배움 기록/Programming

torch. squeeze의 역할

Spezi 2023. 6. 14. 19:02
반응형

squeeze의 역할은 텐서에서 차원의 크기가 1인 차원을 제거한다는 것이다. 그러면 차원의 크기가 1인 애들을 왜 제거하는 것일까?

1. 차원축소: 차원이 1인 경우, 해당 차원은 단 하나의 요소를 가지기 때문에 정보적으로 불필요하다. 따라서 차원을 제거함으로써 텐서의 크기를 줄이고 메모리 사용을 줄일 수 있다.

그렿다면 왜 단 하나의 요소만을 가지면 정보적으로 불필요한 것일까?

이 이미지를 보면 이해가 된다.  [ [ [1,2] , [3,4] ] ] 은 3차원 텐서로 텐서의 shape은 (1,2,2)이다.  이때 squeeze가 크기가 1인 차원을 없앤다는 것이다. 그래서 squeeze를 하고 나면 [ [1,2], [3,4] ]가 되면서 2차원의 텐서가 되며 (2,2) shape을 가지게 된다. 이때 크기가 1인 차원은 이미지에서 볼 수 있듯이 정보적으로 불필요함을 볼 수 있다. 그저 하나의 괄호 쌍이 추가되어 있는 것일 뿐, 정보적으로는 아무 영향을 끼치지 않으니까!

그 외에 다른 역할로는 아래와 같은 것들이 있다.

2. 텐서 연산 호환성: 일부 연산이나 라이브러리는 차원이 1인 텐서를 처리할 수 없거나 예상한 차원 구조를 유지하기 위해 차원이 1인 텐서를 제거함. `squeeze` 작업을 통해 텐서를 차원 축소시킴으로써 다른 연산이나 라이브러리와의 호환성을 확보 가능.

3. 배열의 모양 일관성: 차원이 1인 텐서를 제거함으로써 배열의 모양을 조정하여 일관성을 유지할 수 있음. 예를 들어, 여러 텐서를 쌓아 새로운 차원을 생성한 후 차원이 1인 텐서를 제거하면 쌓인 텐서들의 모양이 일관되게 유지된다.


 

 

 

 


배움을 기록하기 위한 공간입니다. 

수정이 필요한 내용이나 공유하고 싶은 것이 있다면 언제든 댓글로 남겨주시면 환영입니다 :D

반응형