[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 산업기능요원이 공부하여 남긴 정리입니다.
'AI Developer > AI Python Tech' 카테고리의 다른 글
[screen] Linux 터미널 다중화 도구 (0) | 2023.08.17 |
---|---|
[tqdm] 진행 상황 표시 모듈 (0) | 2023.08.16 |
[PyTorch] AI 모델 저장 & 불러오기 (0) | 2023.08.15 |
[argparse] Python 스크립트 실행 시 인자 값 전달하기 (0) | 2023.08.13 |
[DataFrame] Pandas DataFrame 다루기 - iloc & loc, 값 변경 (0) | 2023.08.12 |
댓글