욤미의 개발일지
4. 파이토치 기초(PyTorch Basic): View, Squeeze, Unsqueeze 본문
728x90
반응형
📌 구글 colab에서 실습한 내용
1. 뷰(View)
✨매우 중요✨
- 원소의 개수를 유지하면서 텐서의 크기를 변경한다.
- 사이즈가 -1로 설정되면 다른 차원으로 부터 해당 값을 유추한다.
- Numpy의 Reshape와 같은 역할을 수행한다.
임의의 3차원 텐서를 만들고 크기를 변경해본다.
import torch
import numpy as np
t = np.array([[[0,1,2],
[3,4,5]],
[[6,7,8],
[9,10,11]]])
ft = torch.FloatTensor(t) # 3차원 numpy array를 3차원 tensor로
print(ft.shape) # 텐서의 크기(shape)확인, torch.Size([2, 2, 3]) 차원, 행, 열
'''
torch.Size([2, 2, 3])
'''
1) 3차원 텐서 → 2차원 텐서
ft.view([-1, 3])는 ft라는 텐서를 (?, 3)의 크기로 변경한다.
- -1: 첫번째 차원은 사용자가 잘 모르겠으니 파이토치가 알아서 계산하도록 하는 것
- 3: 두번째 차원은 3으로 지정
결과적으로 (2, 2, 3) → (2×2, 3) → (4, 3)의 크기를 가지는 텐서로 변경한다.
print(ft.view([-1, 3])) # 원래 ft의 형태를 바꾸지는 않음
print(ft.view([-1, 3]).shape) # torch.Size([4, 3])
'''
tensor([[ 0., 1., 2.],
[ 3., 4., 5.],
[ 6., 7., 8.],
[ 9., 10., 11.]])
torch.Size([4, 3])
'''
2) 3차원 텐서 → 다른 크기의 3차원 텐서
원소 개수가 유지되어야하기 때문에 (2, 2, 3)텐서를 (?, 1, 3)텐서로 바꾸려면
? 차원은 4가 된다.
print(ft.view([-1,1,3]))
print(ft.view([-1,1,3]).shape) # torch.Size([4, 1, 3])
'''
tensor([[[ 0., 1., 2.]],
[[ 3., 4., 5.]],
[[ 6., 7., 8.]],
[[ 9., 10., 11.]]])
torch.Size([4, 1, 3])
'''
2. 스퀴즈(Squeeze)와 언스퀴즈(Unsqueeze)
- squeeze: 차원이 1인 경우 해당 차원을 제거
- unsqueeze: 특정 위치에 1인 차원 추가(squeeze와 정반대 역할)
- 0부터 첫번째 차원을 의미
- -1은 마지막 차원을 의미
(3 × 1) 크기의 2차원 텐서를 squeeze하면 1이었던 두번째 차원을 제거한다.
→ (3,) 크기의 1차원 벡터
ft = torch.FloatTensor([[0],[1],[2]])
print(ft)
print(ft.shape)
'''
tensor([[0.],
[1.],
[2.]])
torch.Size([3, 1])
'''
print(ft.squeeze())
print(ft.squeeze().shape)
'''
tensor([0., 1., 2.])
torch.Size([3])
'''
(3,) 크기의 1인 차원 텐서를 unsqueeze(0) 하면 인자 0을 의미하는 첫번째 차원에 1인 차원이 추가된다.
→ (1,3) 크기의 2차원 텐서
ft = torch.FloatTensor([0,1,2])
print(ft)
print(ft.shape)
'''
tensor([0., 1., 2.])
torch.Size([3])
'''
print(ft.unsqueeze(0)) # 인덱스가 0부터 시작, 0 = 첫번째 차원 의미
print(ft.unsqueeze(0).shape)
'''
tensor([[0., 1., 2.]])
torch.Size([1, 3])
'''
(3,) 크기의 1인 차원 텐서를 unsqueeze(1) 하면 인자 1을 의미하는 두번째 차원에 1인 차원이 추가된다.
→ (3,1) 크기의 2차원 텐서
print(ft.unsqueeze(1)) # 인덱스가 0부터 시작, 0 = 첫번째 차원 의미
print(ft.unsqueeze(1).shape)
'''
tensor([[0.],
[1.],
[2.]])
torch.Size([3, 1])
'''
728x90
반응형
'PyTorch' 카테고리의 다른 글
6. 파이토치(PyTorch): 클래스로 파이토치 모델 구현하기 (0) | 2023.06.05 |
---|---|
5. 파이토치(PyTorch): 선형 회귀(Linear Regression) (0) | 2023.04.06 |
3. 파이토치 기초(PyTorch Basic): 텐서의 연산 (0) | 2023.03.29 |
2. 파이토치 기초(PyTorch Basic): 텐서 선언, 텐서의 속성 (0) | 2023.03.28 |
1. 파이토치 기초(PyTorch Basic): 파이토치 패키지 (0) | 2023.03.22 |
Comments