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

2023. 8. 19. 15:00·Python
반응형

[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 산업기능요원이 공부하여 남긴 정리입니다.

반응형
저작자표시 (새창열림)

'Python' 카테고리의 다른 글

[Python] 문자열 내 문자 및 인덱스 찾기 (count(), find(), index())  (3) 2023.09.15
[Python] 문서 자동화 (docx-template)  (1) 2023.09.13
[Python] 리스트 컴프리헨션(List Comprehension)  (0) 2023.08.18
[screen] Linux 터미널 다중화 도구  (0) 2023.08.17
[tqdm] 진행 상황 표시 모듈  (0) 2023.08.16
'Python' 카테고리의 다른 글
  • [Python] 문자열 내 문자 및 인덱스 찾기 (count(), find(), index())
  • [Python] 문서 자동화 (docx-template)
  • [Python] 리스트 컴프리헨션(List Comprehension)
  • [screen] Linux 터미널 다중화 도구
성 언
성 언
AI 학과 3학년 학생이자 RAG 기반 LLM 챗봇 개발 회사에서 근무 중입니다. AI 챗봇 개발과 관련된 기술, 연구, 그리고 실험 과정에서 얻은 인사이트를 공유합니다. 최신 AI 기술을 함께 탐구하며 성장해 나가요!
    반응형
  • 성 언
    AI EON
    성 언
  • 전체
    오늘
    어제
    • AII
      • NLP
      • AI Paper Review
      • MLOps
      • Python
      • Algorithm
      • Memo
      • Server Developer
        • Node.js
        • DataBase&Data Engineering
        • Server Basic
      • MATH
        • Linear Algebra
        • AI
      • etc
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    파이썬 문서 자동화
    스택
    Python
    NVML
    파이썬
    배열의 모양 변경
    docx-template
    백준
    reranker
    transaction
    문서 자동화
    [Numpy] squeeze & unsqueeze
    패스트캠퍼스 수강 후기
    word 자동화
    그리디 알고리즘
    트랜잭션
    비반복 읽기
    리랭커
    Ubuntu-20.04 APM 소스 설치
    umc
    팬텀 읽기
    다중 버전 동시성 제어
    c++
    node.js
    Signature 초격차 패키지
    map 함수
    더티 읽기
    더티 쓰기
    배타 잠금
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
성 언
[Numpy] squeeze & unsqueeze - 배열의 모양 변경
상단으로

티스토리툴바