본문 바로가기

내가 보려고 만든 Pytorch

내가 공부하려 만든 Pytorch7(Unsqueeze)

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()는 텐서의 원소 수를 그대로 유지하면서 모양과 차원을 조절합니다.

 

출처 : https://wikidocs.net/52846