Matrix operation
view, reshape, transpose, permute 차이
- transpose(-2,-1), transpose(-1,-2) 동작 같음
- permute() : () 안에 있는 숫자들이 의미하는 것은 어떤 차원을 어떻게 바꿀지
- 연산할 때, 차원을 바꿀 필요 있을 수 있음...(행렬 곱이 결국 어떤 값들에 대해 연산을 할지니까...)
-
행렬 shape를 바꾸면서 뭉게지면 정보를 손실하는게 아닌가....nlp라서 값이 존재만하면 되나??? local한 정보에 대해서 중요한게 아니니까????
-
matrix shape에 대해 transpose, permute, view, reshape 으로 연산 가능한 shape으로 맞춰ㅁ
comparison between 4 operation
-
view vs reshape
- view : tensor 모양 변경 가능, 원본 tensor와 기반 되는 data 공유(origin data change -> tensor also changed)
- reshape : tensor 모양 변경 가능, return copy of origin tensor(origin data change -> tensor not changed)
-
view vs transpose
- view : tensor 모양 변경 가능, contiguous tensor에서 동작, return contiguous tensor
- transpose : tensor 모양 변경 가능, non-contiguous/contiguous tensor 모두 동작 but 반환은 non-contiguous tensor로 반환
- *contiguous : 각 데이터가 메모상에서 인접한지??????
- contiguous하다 = tensor의 데이들이 memory상에서 인접하게 있다
-
transpose vs permute
- transpose : 딱 두 개의 차원 맞교환
- x.transpose(0,2) : 0, 2번째 차원 맞교환
- permute : 모든 차원 맞교환. 결과 non-contiguous
- x.permute(2,1,0) : 2->0 , 1->1, 0->2 로 차원 맞교환
Squeeze, Unsqueeze
- Squeeze : 1인 차원 제거
- Unsqueeze : 특정 위치 1인 차원 추가