2021 네이버 부스트캠프 - Ai tech

Week_3 Pytorch - view vs. reshape

미미수 2021. 8. 17. 20:30

두번째로 헷갈리는 개념은 viewreshape이다.

 

reshape함수는 numpy에서도 자주 쓰이는 함수여서 친숙할 것이다. 

이름 그대로 shape를 '다시' 정해준다.

 

view도 거의 똑같다. 

같은 기능을 하지만 하나의 차이점은 데이터 값의 복사 유뮤 인데, 이를 이해하기 위해서는 우선 Contiguous라는 개념을 알아야한다.

 

Contiguous : Torch의 Array의 값이 연속적인 메모리 위치를 가지는 상태

 

[ Contiguous vs. Noncontiguous ]

 

 

왼쪽 그림을 보면 이해가 쉬운데,

 

맨 윗줄이 메모리 공간을 쭉 펴논거라고 하자.

왼쪽은 앞에서부터 순차적으로 메모리 위치가 이어진다.

오른쪽은 메모리 위치가 섞여 있다.

 

 

 

 

 

view : contiguous tensor에서만 작동함. contiguous tensor를 반환

reshape : contiguous tensor에서는 view와 동일하게 작동함. non-contiguous tensor에서는 data를 copy!!!

 

-> View 와 Reshape 은 contiguity 보장의 차이.

실제로 reshape를 사용하니까 non-contiguous 텐서에 대해서는 data를 copy해오기 때문에 a를 1로 바꿔도 b에는 변화가 없다.