딥러닝 (Deep Learning)/딥러닝 기초

신경망의 데이터 표현 1 - tensor

DS지니 2021. 4. 23. 23:17
728x90
반응형
[케라스 창시자에게 배우는 딥러닝] 참고

 

텐서(tensor)

: 다차원 넘파이 배열. 머신러닝 기본 데이터 구조로 사용.

 

텐서플로를 비롯해 딥러닝 라이브러리들은 다차원 배열을 텐서라고 부른다. (하지만 파이썬 커뮤니티에서 넘파이 배열을 텐서라고 부르지는 않는다.)

텐서는 임의의 차원 개수를 가지는 행렬의 일반화된 모습이다. 텐서에서는 차원(dimension)을 종종 축(axis)라고 부른다.

핵심적으로 텐서는 데이터를 위한 컨테이너(container)이다. 거의 수치형 데이터를 다루므로 숫자를 위한 컨테이너라고 생각하면 된다.

 

텐서의 핵심 속성

  • 축의 개수(rank) : 2D = (axis=2), 3D = (axis=3)
  • 크기(shape) : 텐서의 각 축을 다라 얼마나 많은 차원이 있는지 나타낸 파이썬의 튜플.  
    • ex) 1D = (5,) , 3D = (3, 5) , 3D = (3, 3, 5) 
  • 데이터 타입(dtype) : 텐서에 포함된 데이터의 타입. float32, uint8, float64 등. 드물게 char 타입을 사용하지만, 텐서는 사전에 할당되어 연속된 메모리에 저장되어야 하므로 넘파이 배열과 대부분 라이브러리는 가변 길이의 문자열을 지원하지 않는다.

 


 

1. 0D tensor - 스칼라

 

하나의 숫자만 담고 있는 텐서를 스칼라(scalar)라고 한다.

스칼라 텐서, 0차원 텐서, 0D tensor 라고 부른다.

넘파이에서는 float 타입의 숫자가 스칼라 텐서(또는 배열스칼라(array scalar))이다.

 

넘파이의 array scalar는 수정할 수 없는 0차원의 넘파이 배열이며, 프로그래밍 언어의 스칼라 변수와는 다르다.

 

ndim 속성을 사용하면 넘파이 배열의 축 개수를 확인할 수 있다.

스칼라 텐서의 축 개수는 0개이다.(ndim == 0)

텐서의 축 개수를 랭크(rank)라고도 부른다.

 

 

2. 1D tensor - 벡터

 

숫자의 배열을 벡터(vector) 또는 1D tensor 라고 부른다.

1D tensor는 딱 하나의 축을 갖는다. 

 

위 벡터는 5개의 원소를 가지고 있으므로 5차원 벡터라고 부른다.

 

5D 벡터와 5D 텐서는 다름 주의!

5D Vector : 하나의 축을 따라 5개의 차원을 가진 것

5D Tensor : 5개의 축을 가진 것

 

즉, 텐서의 각 축을 따라 여러 개의 차원을 가진 벡터가 놓일 수 있다.

차원 수(dimensionality)는 상황에 따라 특정 축을 따라 놓인 원소의 개수(5d vector)이거나 텐서의 축 개수(5d tensor)일 수 있기 때문에 혼동하기 쉽다.

 

혼동하지 않기 위해서 5D tensor의 경우 "랭크 5인 텐서" 라고 말할 수 있음. (rank=축 개수)

 

 

3. 2D tensor - 행렬

 

벡터의 배열이 행렬(matrix) 또는 2D 텐서이다.

행렬에는 2개의 축이 있는데, 보통 행(row)과 열(column)이라 부른다.

행렬은 숫자가 채워진 사각 격자라고 생각할 수 있다.

 

첫 번째 축에 놓여 있는 원소를 행이라고 하고, 두 번째 축에 놓여 있는 원소를 열이라고 한다.

ex) x의 첫번째 행 : [1, 3, 5, 7, 9] / x의 첫 번째 열 : [1, 39, 3]

 

 

4. 3D tensor & High-demension tensor

아래처럼 행렬들을 하나의 새로운 배열로 합치면 숫자가 채워진 직육면체 형태로 해석할 수 있는 3D 텐서가 만들어진다.

 

3D 텐서들을 하나의 배열로 합치면 4D 텐서가 만들어 진다.

 

 

딥러닝에서는 보통 0D에서 4D까지의 텐서를 다룬다. 만약 동영상 데이터를 다룰 경우에는 5D 텐서 까지 가기도 한다.

728x90
반응형