본문 바로가기
AI Developer/AI Python Tech

[Numpy] squeeze & unsqueeze - 배열의 모양 변경

by 성 언 2023. 8. 19.

[Numpy] squeeze & unsqueeze - 배열의 모양 변경에 대해 학습 후 정리한 포스팅 입니다.

 

이번 포스팅에서는 [Numpy] squeeze & unsqueeze - 배열의 모양 변경에 대해 학습합니다.

 

 

 

 

I) squeeze & unsqueeze 란?

numpy에서 사용되는 squeeze 와 unsqueeze는 배열의 차원을 조절하거나 모양을 변경할 때 유용합니다.

 

 

 

 

 

 

II) AI에서 squeeze & unsqueeze

학습 데이터가 (batch_size, sequence_length) 형태로 되어 있는데, 모델이 이를 처리하려면 3D 텐서 형태인 (batch_size, sequence_length, input_dim)로 변환해야 할 수 있습니다. 이런 상황에서 unsqueeze를 사용하여 필요한 차원을 추가하거나, squeeze를 사용하여 불필요한 차원을 제거합니다.

또한, 이러한 함수들은 데이터 전처리 과정이나 특정 작업에 따라 모델의 입력 데이터 형태를 조절할 때 자주 사용됩니다.

 

 

 

 

 

 

 

 

III) squeeze 코드

squeeze: tensor의 차원을 줄임 (단, 줄이는 차원의 크기는 1 이어야함)

squeeze_tensor = torch.rand(size=(2,1,2))
print(squeeze_tensor)
print(squeeze_tensor.shape)
 
squeeze_tensor = squeeze_tensor.squeeze()
print(squeeze_tensor)
print(squeeze_tensor.shape)

tensor([[[0.8646, 0.0803]],
        [[0.5723, 0.5468]]])
torch.Size([2, 1, 2])
tensor([[0.8646, 0.0803],
        [0.5723, 0.5468]])
torch.Size([2, 2])

cf) 결과를 원래 tensor에 다시 할당하지 않는 한 원래 tensor를 수정하지 않습니다

줄이는 차원의 크기의 개수에 상관없이 차원을 줄여준다.

squeeze_tensor = torch.rand(size=(2,1,3,1))
print(squeeze_tensor)
print(squeeze_tensor.shape)
 
squeeze_tensor = squeeze_tensor.squeeze()
print(squeeze_tensor)
print(squeeze_tensor.shape)

tensor([[[[0.8009],
          [0.5247],
          [0.5378]]],
        [[[0.7873],
          [0.9660],
          [0.6945]]]])
torch.Size([2, 1, 3, 1])
tensor([[0.8009, 0.5247, 0.5378],
        [0.7873, 0.9660, 0.6945]])
torch.Size([2, 3])

원하는 차원을 선택해서 줄일 수 있다.

ex) 1차원에 대해서 줄이기 dim = 1

squeeze_tensor = torch.rand(size=(2,1,3,1))
print(squeeze_tensor)
print(squeeze_tensor.shape)

squeeze_tensor = squeeze_tensor.squeeze(1)
print(squeeze_tensor)
print(squeeze_tensor.shape)

tensor([[[[0.7309],
          [0.4182],
          [0.1830]]],
        [[[0.0714],
          [0.0641],
          [0.6629]]]])
torch.Size([2, 1, 3, 1])
tensor([[[0.7309],
         [0.4182],
         [0.1830]],
        [[0.0714],
         [0.0641],
         [0.6629]]])
torch.Size([2, 3, 1])

ex) 3차원에 대해서 줄이기 dim = 3

squeeze_tensor = torch.rand(size=(2,1,3,1))
print(squeeze_tensor)
print(squeeze_tensor.shape)

squeeze_tensor = squeeze_tensor.squeeze(1)
print(squeeze_tensor)
print(squeeze_tensor.shape)

tensor([[[[0.7309],
          [0.4182],
          [0.1830]]],
        [[[0.0714],
          [0.0641],
          [0.6629]]]])
torch.Size([2, 1, 3, 1])
tensor([[[0.7309],
         [0.4182],
         [0.1830]],
        [[0.0714],
         [0.0641],
         [0.6629]]])
torch.Size([2, 3, 1])

 

 

 

 

 

 

 

 

IV) unsqueeze 코드

unsqueeze: 원하는 차원의 크기를 1로 늘려준다. dim의 관한 인자가 필요함

unsqueeze_tensor = torch.rand(size=(2,3))

unsqueeze_tensor.unsqueeze(0).shape # [1,2,3]
unsqueeze_tensor.unsqueeze(1).shape # [2,1,3]
unsqueeze_tensor.unsqueeze(2).shape # [2,3,1]

 

 

 

cf) tensor의 shape을 쉽게 바꿀 수 있는 view

 

 

<Summary>

- [Numpy] squeeze & unsqueeze - 배열의 모양 변경

 

 

 

 

*유의사항

- AI 산업기능요원이 공부하여 남긴 정리입니다.

댓글