본문 바로가기
AI-Tech 부스트캠프/파이토치

[PyTorch] 파이토치 기본 구조에 대해서 알아보자

by Alan_Kim 2022. 12. 23.
728x90
반응형

 

 

Tensor handling

view, squeeze, unsqueeze 등으로 Tensor을 조정할 수 있다.

- view: reshaper과 동일하게 tensor의 shape을 변환

- squeeze: 차원의 개수가 1인 차원을 삭제(압축)   ex) $ 2 \times 2 \times 1$ 행렬을 $ 2 \times 2$ 행렬로 변환

- unsqueeze: 차원의 개수가 1인 차원을 추가

 

그럼 view와 reshape의 차이는 무엇일까?

view는 contigious(인접한)것이 아니면 사용할 수 없다는 것이다.

contigious는 무엇을 이야기 할까?

 

각 원소별로 메모리 주소를 보자

X, Y 모두 torch.float32 자료형은 4바이트이므로, 메모리 1칸 당 주소 값이 4씩 증가한다.

X는 메모리 순서대로 4바이트씩 늘어나지만 Y는 그렇지 않다. 이는 X는 메모리 순서대로 읽는 방면, Y는 메모리 순서대로 읽지 않는다는 것을 알 수 있다.

즉 X는 메모리 순서대로 읽기 때문에 view 사용 가능하지만 Y는 메모리 순서대로 읽지 않기 때문에 view 사용을 할 수 없다.

view는 메모리 순서대로 데이터를 읽을 때만 사용할 수 있다.

 

Squeeze와 Unsqueeze에 대해서

 

출처: https://bit.ly/3CgkVWK

잘 보면 알겠지만 Unsqueeze()는 안에 숫자에 따라 차원을 늘릴 방향을 정할 수 있다.

squeeze()는 차원의 개수가 1인 차원을 모두 삭제한다.

Tensor operations

 

행렬 곱셈 연산 'dot' vs 'mm' vs 'matmul'

 

dot와 mm과 matmul을 계산해보면 dot는 곱셈연산을 사용할 수 없다.

mm과 matmul의 차이점은 mm은 broadcasting을 지원 안한다는 것이고 matmul은 broadingcasting을 지원한다는 것이다.

Broadcasting은 텐서에 대해서 사칙 연산을 수행할 때 자동적으로 크기를 맞춰서 연산을 수행하게 만드는 기능을 말한다.

import torch
m1 = torch.FloatTensor([[1,2]])
m2 = torch.FloatTensor([3])
# m1 + m2 = [1,2] + [3] = [1,2] + [3,3] = [4,5] 이와 같은 것을 broadcasting 지원이라고 말한다.

Tensor operations for ML/DL formula

nn.functional 모듈을 통해 다양한 함수를 제공한다.

AutoGrad

PyTorch의 가장 큰 핵심중 하나인 자동 미분(AutoGrad) 지원한다는 것이다.

다음과 같은 행렬이 있다고 가정하자.

$$\begin{bmatrix}a_{1} & a_{2} \\b_{1} & b_{2} \end{bmatrix}$$ 

$Q =3a^3 - b^2$ 를 a, b에 대해서 autograd를 확인하려고 한다.

728x90
반응형

댓글