
Github 참조
onlybooks/pytorch: 파이토치 딥러닝 마스터 (github.com)
GitHub - onlybooks/pytorch: 파이토치 딥러닝 마스터
파이토치 딥러닝 마스터. Contribute to onlybooks/pytorch development by creating an account on GitHub.
github.com
3장 텐서 구조체에서
3.8 텐서 메타데이터: 사이즈, 오프셋, 스트라이드
파트를 공부한 내용만을 담고 있습니다.
1차 수정 완료 (07.24)
3장 텐서 구조체
3.8 텐서 메타데이터: 사이즈, 오프셋, 스트라이드
저장공간을 인덱스로 접근하기 위해 텐서는 저장 공간에 포함된 몇 가지 명확한 주소, 즉 사이즈, 오프셋, 스트라이드에 의존한다.
텐서의 사이즈(넘파이에서는 셰이프)
- 텐서의 각 차원 별로 들어가는 요소의 수를 표시한 튜플
저장 공간에 대한 오프셋
- 텐서의 첫 번째 요소를 가리키는 색인 값과 동일
스트라이드
- 각 차원에서 다음 요소를 가리키고 싶을 때 실제 저장 공간상에서 몇 개의 요소를 거넌뛰어야 하는지를 알려주는 숫자
오프셋 코드
결과
코드 설명
storage함수를 사용하면 다차원 배열이 1차원 배열로 바뀌는데,
third_point = point[2] 코드를 구동하면 tensor([2., 1.]) 가 된다.
이 tensor가 [4]번째이기 때문에 결과로 4가 나온다.
만약 second_point가 point[1]이라면 tensor([5., 3.])이 된다.
이 tensor가 [2]번째 이기 때문에 2가 결과로 나올 것이다.
사이즈 코드
결과
torch.Size([2])
코드 설명
세 번째 포인트는 1차원이므로 Size 클래스는 하나의 요소를 가지는 객체이고 값으로는 차원 크기가 들어있다.
텐서 객체의 shape 속성값과 동일하다.
ex) second_point.shape 코드와 결과가 동일하게 나오는 걸 확인해보길 바란다.
스트라이드 코드
결과
(2, 1)
코드 설명
스트라이드는 값을 가진 튜플인데, 각 차원에서 인덱스를 하나 증가했을 때 저장 공간상에서 몇 개 요소를 건너뛰어야 하는지를 값으로 가진다.
2차원 텐서에서 요소 i, j에 접근한다면 저장 공간상으로는 storage_offset + stride[0] * i + stride[1] * j 번째 요소다.
stride[0]은 행을 따라 이동할 때,
stride[1]은 열을 따라 이동할 때로 생각하면 된다.
복사 없이 텐서 전치하기
결과
tensor([[4., 1.],
points에서 인덱스를 하나 올리는 것은 어느 차원인지에 따라 의미가 다르다.
points[0,0]에서 points[1,0]으로의 이동은 저장 공간에서 요소 두개를 건너 뛰는것과 같고 points[0,1]은 하나만 건너뛰는 거랑 같다.
다른 말로 하면 텐서에서 각 요소는 행 단위로 나뉘어 있다.
그림으로 그려보자면,

이렇게 생긴 텐서일때,

[0,1]로는 요소 한개, [1,0]으로는 요소 두 개를 건너뛰는 것을 볼 수 있다.
파이토치 텐서 연산 중에는 인접한 텐서에 대해서만 동작하는 경우가 있다.
ex) View이런 경우에 파이토치는 경고성 예외를 던져서 명시적으로 contiguous를 호출하라고 알려준다.텐서가 이미 인접한 상태라면 contiguous가 실제로 하는 일은 없고 성능에 지장을 주지도 않는다.
인접한 텐서 1
결과
인접한 텐서 2
points_t.is_contiguous()
결과
False
코드 설명
points는 연속한 텐서지만 전치한 결과가 그렇지 않음을 확인할 수 있다.
contiguous 메소드를 사용하면 인접하지 않은 텐서를 인접한 텐서로 만들 수도 있다.
텐서 내용은 동일하나, 값의 배치와 스트라이드가 바뀐 텐서가 만들어진다.
'파이토치 딥러닝 마스터' 카테고리의 다른 글
| [파이토치 딥러닝 마스터] 4장 (4) (0) | 2024.07.12 |
|---|---|
| [파이토치 딥러닝 마스터] 4장 (3) (0) | 2024.07.11 |
| [파이토치 딥러닝 마스터] 4장 (2) (0) | 2024.07.10 |
| [파이토치 딥러닝 마스터] 4장 (1) (0) | 2024.07.09 |
| [파이토치 딥러닝 마스터] 3.4 이름이 있는 텐서 (2) | 2024.07.05 |