Squeeze()

torch queeze 함수의 원리는 (A x B x 1 x C x 1) 형태의 텐서에서

차원이 1인 부분을 제거하여 (A x B x C) 형태로 만들어 주는 것이다.

또한, 원하는 dimension 위치를 따로 선택하면, 해당 위치의 1만 삭제가 가능하다.

단, 해당 차원 위치의 size가 1이 아니라면 삭제가 불가능하다.

Example

import torch

# (A, B, 1, C, 1) 차원 형태 텐서
x = torch.ones(10, 5, 1, 3, 1)

# size가 1인 차원 전체 삭제 : (A, B, C) 차원 형태
x1 = x.squeeze() # torch.squeeze(x) 가능
x1.shape # torch.Size([10, 5, 3])

# size가 1인 차원 일부 삭제 : (A, B, 1, C) 차원 형태
x2 = x.squeeze(dim = 2) # x.squeeze(2) 가능
x2.shape # torch.Size([10, 5, 3, 1])

x3 = x.squeeze(dim = -1) # dim = 4와 동일한 결과
x3.shape # torch.Size([10, 5, 1, 3])

# size가 1이 아닌 차원 삭제 시도(불가능)
x4 = x.squeeze(dim = 1)
x4.shape # torch.Size([10, 5, 1, 3, 1])

크기가 1인 차원인 2, 4번 dim은 정상 삭제가 가능했으나,

dim = 1처럼 size가 1이 아닌 경우는 삭제가 이루어지지 않았다.

참고로, dim = -1처럼 뒤쪽 차원부터 접근도 가능하며,

torch.squeeze(tensor, dim)형태 사용과 dim = 2 대신 2처럼만 작성하는 것도 가능하다.

Unsqueeze()