Tensor는 숫자 데이터를 여러 차원으로 배열한 자료구조이다.
쉽게 생각하면 Scalar, Vector, Matrix를 더 높은 차원까지 확장한 개념이라고 볼 수 있다.
예를 들어 하나의 숫자 1도 Tensor로 표현할 수 있고,
[1, 2, 3]
과 같은 1차원 배열이나,
[
[1, 2],
[3, 4]
]
과 같은 2차원 배열도 Tensor로 표현할 수 있다.
Tensor는 특히 Machine Learning과 Deep Learning에서 데이터를 표현하는 기본적인 구조로 사용된다.
Tensor의 Rank
Tensor가 몇 개의 차원을 가지는지를 Rank라고 한다.
| Rank | Type | 예시 |
| 0 | Scalar | 1 |
| 1 | Vector | [1, 2, 3] |
| 2 | Matrix | [[1, 2], [3, 4]] |
| 3 | 3D Tensor | [[[1, 2], [3, 4]], [[5, 6], [7, 8]]] |
Rank 0 Tensor는 하나의 숫자이다.
1
Rank 1 Tensor는 숫자가 한 방향으로 배열되어 있다.
[1, 2, 3]
Rank 2 Tensor는 행과 열을 가지는 Matrix 형태이다.
[
[1, 2],
[3, 4]
]
Rank 3 Tensor는 Matrix가 다시 여러 개 쌓여 있는 구조로 생각할 수 있다.
[
[
[1, 2],
[3, 4]
],
[
[5, 6],
[7, 8]
]
]
즉,
Scalar → Vector → Matrix → 3D Tensor → ...
와 같이 차원을 계속 확장할 수 있다.
Rank와 Shape의 차이
Tensor를 공부할 때 Rank와 함께 자주 등장하는 개념이 Shape이다.
Rank는 Tensor가 몇 차원인지를 나타내고, Shape은 각 차원에 몇 개의 데이터가 존재하는지를 나타낸다.
예를 들어 다음 Tensor가 있다.
[
[1, 2, 3],
[4, 5, 6]
]
이 Tensor에는 행 방향과 열 방향이라는 두 개의 차원이 있으므로 Rank는 2이다.
그리고
2개의 행
3개의 열
을 가지고 있으므로 Shape은 (2, 3)으로 표현할 수 있다.
따라서 다음과 같이 구분하면 된다.
Rank = 차원의 개수
Shape = 각 차원의 크기
예를 들어,
[
[
[1, 2],
[3, 4]
],
[
[5, 6],
[7, 8]
]
]
은 Rank가 3이고 각 방향의 크기가 모두 2이므로 Shape은 (2, 2, 2)이다.
Tensor를 왜 사용하는가?
Deep Learning에서는 입력 데이터와 신경망의 연산 결과를 대부분 Tensor 형태로 표현한다.
예를 들어 하나의 흑백 이미지는 다음과 같이 나타낼 수 있다.
Height × Width
여러 장의 이미지를 한 번에 처리한다면 하나의 차원이 추가된다.
Batch × Height × Width
RGB 이미지라면 색상 정보를 나타내는 Channel 차원도 필요하다.
Batch × Channel × Height × Width
이처럼 실제 데이터는 여러 방향의 정보를 동시에 가지고 있기 때문에 이를 표현하기 위해 Tensor를 사용한다.
결국 Tensor를 처음 공부할 때는 다음 세 가지를 구분할 수 있으면 된다.
Tensor : 여러 차원으로 배열된 데이터
Rank : Tensor의 차원 개수
Shape : 각 차원의 크기
