AI

PyTorch Basic

cstory-bo 2024. 1. 12. 14:36

PyToch Basic

우선 파이토치에서는 Tensor의 구조를 사용한다. 그리고 numpy 기능들을 거의 다 지원한다.

Tensor

numpy의 ndarray와 비슷하다.

import torch
t_array = torch.FloatTensor(n_array)

이외의 Data to Tensor, ndarray to tensor방법 등이 있다.

GPU 사용

~.device를 하면 cpu인지 gpu 사용중인지 알 수 있다.

if torch.cuda.is_available():
	data_cuda = data.to('cuda')
data_cuda.device

위의 코드로 gpu사용 가능하면 gpu로 바꾸도 아니라면 cpu를 그대로 출력한다.

Tensor Handling

view

reshape과 비슷하고 tensor의 shape 변환해준다.

a= torch.zeros(3,2)
b= a.view(2,3)
a.fill_(1)
a= torch.zeros(3,2)
b= a.t().reshape(2,3)
a.fill_(1)

reshape과 약간의 차이가 있는데, 

위의 두 코드 이후 각 a,b를 출력해보면 b의 출력이 다르다.

view에서의 b는 모두 1로 채워져있지만 아래의 b는 0 그대로이다.

view 변환을 보장해주고 reshape은 보장 안해준다.

squeeze, unsqueeze

squeeze : 차원의 개수가 1인 차원을 삭제 (압축)

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

(2,2) → unsqueeze(0) ⇒ (1,2,2)

→ unsqueeze(1) ⇒ (2,1,2)

→ unsqueeze(2) ⇒ (2,2,1)

행렬곱

mm vs dot vs matmul

둘다 벡터일 때는 dot을 사용하고

행렬간 연산은 mm을 사용한다.

matmul은 브로드 캐스팅을 지원해주고 dot은 지원하지 않는다.

nn.functional

자주 사용하는 것 함수이다.

  • F.softmax
  • F.one_hot

AutoGrad

파이토치에서 backward 시에는 자동미분,AutoGrad를 한다.

requires_grad = True로 하면 미분의 대상이 된다.

그래서 만약 Freezing을 할 대는 requires_grad = False로 설정한다.

w= torch.tensor(2.0, requires_grad=True)
y= w**3
z= 10*y + 25
z.backward()
w.grad
# 120