Python

[Pytorch] Tensor 란? 차원, 크기

메린지 2022. 12. 27. 21:14

1. Tensor

텐서: 데이터의 배열

RANK TYPE EX
0 scalar [0]
1 vector [0, 0]
2 matrix [[0, 0], [0, 0]]
3 3-tensor [[[0, 0], [0, 0]], [[0, 0], [0, 0]]]
n n-tensor ~

차원별 데이터 배열

2. Example

HELLO WORLD

HI HELLO

HI WORLD

세 가지가 있다고 가정

2-1) one-hot encoding으로 vector를 표현

WORD INDEX EX
HELLO 0 [1, 0, 0]
HI 1 [0, 1, 0]
WORLD 2 [0, 0, 1]

2-2) 각 word를 이렇게 vector를 만들고, 이를 기반으로 sentence를 matirx로 표현

SENTENCE EX
HELLO WORLD [[1, 0, 0], [0, 0, 1]]
HI HELLO [[0, 1, 0], [1, 0, 0]]
HI WORLD [[0, 1, 0], [0, 0, 1]]

2-3) 각 sentence를 corpus로 변환해 모델에 input 하므로 corpus를 tensor로 표현

CORPUS EX
HELLO WORLD HI HELLO HI WORLD [[[1, 0, 0], [0, 0, 1]], [[0, 1, 0], [1, 0, 0]], [[0, 1, 0], [0, 0, 1]]]

위의 corpus는 이제 4차원의 word, 2차원의 Sentence, 3개의 sentence로 구성된 (3, 2, 3)의 3차원 Tensor임

 

이제 이 corpus tensor를 example 이라고 함

 

3. Tensor 생성

 

 

4. Tensor의 차원

- dim(), ndim() : tensor의 차원 반환

>>> example.dim()
3
>>> example.ndim()
3

- shape, size() : tensor 사이즈 반환

>>> example.shape
torch.Size([3, 2, 3])

>>> example.shape[1]
2

>>> example.size()
torch.Size([3, 2, 3])

>>> example.size(2)
3

- view(), reshape() : 텐서의 크기는 유지하면서 사이즈 변경

** 이 때 변수로 -1을 사용하면 ==> 자동으로 크기 변경!

>>> example.reshape(3, 6)
tensor([[1, 0, 0, 0, 0, 1],
        [0, 1, 0, 1, 0, 0],
        [0, 1, 0, 0, 0, 1]])
        
>>> exampel.view(6, -1)
tensor([[1, 0, 0],
        [0, 0, 1],
        [0, 1, 0],
        [1, 0, 0],
        [0, 1, 0],
        [0, 0, 1]])