Unsqueeze
특정 위치에 1인 차원을 추가한다.
언스퀴즈는 스퀴즈와 정반대입니다. 특정 위치에 1인 차원을 추가할 수 있습니다.
view로도 구현 가능합니다.
1. 벡터 생성
ft = torch.Tensor([0, 1, 2])
print(ft.shape)
ft
torch.Size([3])
tensor([0., 1., 2.])
2. Unsqueeze 사용
2차원 행렬로 차원 증가
print(ft.unsqueeze(0))#0번째 차원에 1인 차원 추가
print(ft.unsqueeze(0).shape)
print(ft.unsqueeze(0).dim())
tensor([[0., 1., 2.]])
torch.Size([1, 3])
2
print(ft.unsqueeze(1))#1번째 차원에 1인 차원 추가
print(ft.unsqueeze(1).shape)
print(ft.unsqueeze(1).dim())
tensor([[0.],
[1.],
[2.]])
torch.Size([3, 1])
2
3. View 사용(Unsqueeze와 비교)
print(ft.view(1, -1))
print(ft.view(1, -1).shape)
tensor([[0., 1., 2.]])
torch.Size([1, 3])
print(ft.view(-1, 1))
print(ft.view(-1, 1).shape)
tensor([[0.],
[1.],
[2.]])
torch.Size([3, 1])
예제
1. 3d 텐서 생성
x = torch.ones(3, 5, 7)
print(x.shape)
torch.Size([3, 5, 7])
2. 1번과 2번 사이에 dimension 추가
x1 = x.unsqueeze(dim = 1)
x1.shape # torch.Size([3, 1, 5, 7])
torch.Size([3, 1, 5, 7])
3. 마지막 자리에 dimension 추가
x2 = x.unsqueeze(dim = -1) # dim = 3과 동일한 결과
x2.shape # torch.Size([3, 5, 7, 1])
torch.Size([3, 5, 7, 1])
4. 오류가 발생하는 경우
x3 = x.unsqueeze(dim = 4)
# IndexError: Dimension out of range (expected to be in range of [-4, 3], but got 4)
view(), squeeze(), unsqueeze()는 텐서의 원소 수를 그대로 유지하면서 모양과 차원을 조절합니다.
'내가 보려고 만든 Pytorch' 카테고리의 다른 글
내가 공부하려 만든 Pytorch8(Type Casting ~ In-place Operation) (0) | 2023.04.21 |
---|---|
내가 공부하려 만든 Pytorch6(view,squeeze) (0) | 2023.04.21 |
내가 공부하려고 만든 Pytorch4(Permute와 Transpose) (0) | 2023.04.21 |
내가 공부하려고 만든 Pytorch5(3d Tensor 혼자 해보기) (0) | 2023.04.21 |
내가 공부하려고 만든 Pytorch1(벡터, 행렬 그리고 텐서) (0) | 2023.04.12 |