본문 바로가기
딥러닝

텐서(Tensor)의 개념: 텐서플로우 vs 파이토치 vs 케라스

by 데이널 2024. 1. 9.

딥러닝을 공부하다 보면 텐서(Tensor)라는 개념이 나옵니다. 과연 텐서는 무엇일까요? 이번 글에서는 텐서에 대한 개념과 구성요소 등을 알아보고, 가장 많이 사용하는 프레임워크인 텐서플로우, 파이토치, 케라스를 비교해 살펴보도록 하겠습니다. 

 

 

텐서(Tensor)란 무엇인가?

컴퓨터 과학에서 배열(arrary)은 번호(Index)와 각 번호에 대응하는 값들로 이루어진 데이터 형태를 말합니다. 그런데 텐서는 간단히 말해, 다차원의 배열을 통칭합니다. ‘선형 관계를 나타내는 다중선형대수학의 대상‘ 으로 풀이되나, 데이터적인 관점에서는 여러 차원을 가진 배열이라 이해하는 것이 더 편합니다. 텐서는 딥러닝에 입력(Input)으로 들어가는 단위죠.  딥러닝은 미니배치 단위로 수행되므로 row와 속성 + 하나의 추가 차원만 있으면 Tensor가 됩니다. 이 텐서(Tensor)의 구성요소는 Rank, Shape, Type 3가지 있습니다. 

 

딥러닝 프레임워크
딥러닝 프레임워크 점유율 (출처: Quora.com)

텐서의 구성요소

  • Rank : 몇 차원 배열이냐를 의미함, 축의 개수, tf.rank(tensor)
  • Shape : 텐서가 몇개의 행과 열을 갖는지 구조를 의미 ex) [3,3]
  • Type : 텐서를 담을 수 있는 데이터 타입을 의미(tf.float32, tf.int32 등)

텐서, 가중치 초기화

  • tf.zeros() : 모든 요소가 0인 텐서 초기화
  • 가중치 초기화 : 가중치 초기화 메쏘드 w1 = tf.get_variable (“w1”, shape[[3,3], initializer = tf.contrib.layer.xavier_initializer())

텐서 실제 사례

  • 벡더 데이터 : 2D Tensor = (batch size, features)
  • 시계열 데이터 : 3D Tensor = (batch size, timesteps, features)
  • 단어 데이터 : 3D Tensor = (batch size, length, word_dim)
  • 이미지 데이터 : 4D Tensor = (batch size, width, height, channels) 또는 (batch size , channels, width, height) 
  • 동영상 데이터 : 5D Tensor = (batch size, frames, width, height, channels)
rank 수학 개체 예제
0 Scalar(magnitude only) S = 100
1 Vector(magnitude and direction) v = [1.1, 1.2, 1.3]
2 Matrix(table of numbers) m = [ [1,2,3,4], [5,6,7,8] ]
3 3-Tensor(cube of numbers) t = [ [ [1],[2],[3] ],[4],[5],[6] ] ]
4 n-Tensor(you get the ieda ...

 

텐서플로우(TensorFlow)

텐서플로우는 구글에서 만든 가장 인기 있는 딥러닝 프레임워크입니다. 데이터를 의미하는 Tensor 와 DataFlow Graph를 따라 연산이 수행되는 Flow를 합쳐 TensorFlow라 이름를 붙였습니다. 

 

장점

  • 데이터 플로우 그래프를 통한 풍부한 표현이 가능(텐서플로우 2.0에서 그래프 방식 코딩이었고, 3.0부터서는 달라졌음)
  • 계산 구조와 목표(손실) 함수만 정의하면 자동 미분 계산을 처리함
  • 텐서보드를 통해서 파라미터 변화 양상 및 DNN 구조를 알 수 있음

단점

  • 메모리를 효율적으로 사용하지 못하고 있음


케라스(Keras)

케라스는 딥러닝을 만들기 위한 고수준 라이브러리를 포함한 API입니다. 2019년 텐서플로우 2.0에서 케라스의 문법과 패키지 공식 지원하기 시작했습니다. 

 

장점

  • 사용자 친화성, 모듈성, 확장성 일관되고 간결한 API를 제공
  • 배우기 쉽고 모델 구축이 쉬움
  • 컨볼루션 신경망, 순환 신경망, 둘의 조합까지 모두 지원

단점

  • 어떤 오류가 발생했을 때 케라스자체의 문제인지, 백엔드 언어의 문제인지 특정하기 어려움
  • 문서화가 제대로 되어 있지 않고 이용자 적어 참고할 곳이 아직 부족함

파이토치(PyTorch)

파이토치(PyTorch)는 파이썬 기반 오픈소스 인공지능 라이브러리입니다. 페이스북 인공지능 연구집단에서 개발했습니다. 동적 계산 그래프와 자연어 처리와 같은 업무 특화된 오픈소스 라이브러리 입니다. 

 

장점

  • 익히기 쉽고 간결하며 구현이 빠르게 됨
  • 비교적 빠른 최적화가 가능함
  • 그래프를 만들면서 동시에 값을 할당하는 define by run 방식으로 코드를 깔끔하게 작성할 수 있음

단점

  • 텐서플로우에 비해 학습에 필요한 예제를 구하기 쉽지 않음
  • 텐서플로우보다 디테일한 모델링이 불가능함