PyTorch에서 신경망 학습을 위해 지원하는 자동 미분 엔진인 Autograd에 대해 간단한 예제를 통해 알아보자.
Autograd
import torch
from torchvision.models import resnet18, ResNet18_Weights
model = resnet18(weights=ResNet18_Weights.DEFAULT)
data = torch.rand(1, 3, 64, 64)
labels = torch.rand(1, 1000)
prediction = model(data) # 순전파 단계(forward pass)
loss = (prediction - labels).sum()
loss.backward() # 역전파 단계(backward pass)
# 옵티마이저 생성
optim = torch.optim.SGD(model.parameters(), lr=1e-2, momentum=0.9)
optim.step() # 경사하강법(gradient descent)
prediction = model(data) # 순전파 단계(forward pass)
입력값을 모델의 각 layer에 통과시켜 예측값을 얻어낸다.
loss = criterion(outputs, labels)
loss.backward() # 역전파 단계(backward pass)
- 예측값과 정답의 오차를 손실 함수를 이용해 계산한다.
- 이렇게 구한 오차 텐서에 .backward()를 호출하여 역전파한다.
- AutoGrad가 자동으로 loss값에 관여한 파라미터들의 .grad 속성에 gradient를 계산하여 저장한다.
# 옵티마이저 생성
optim = torch.optim.SGD(model.parameters(), lr=1e-2, momentum=0.9)
모델의 파라미터들이 등록된 SGD 옵티마이저를 생성한다.
optim.step() # 경사하강법(gradient descent)
.step()을 호출하여 옵티마이저가 파라미터의 .grad에 저장된 gradient에 따라 값을 조정한다.
'AI > PyTorch' 카테고리의 다른 글
[PyTorch] Transfer Learning (전이 학습) (0) | 2023.03.23 |
---|---|
[PyTorch] 모델 저장하기 및 불러오기 (0) | 2023.03.20 |
[PyTorch] 모듈들에 custom 함수 적용시키기 (0) | 2023.03.17 |
[PyTorch] hook (0) | 2023.03.17 |
[Pytorch] Dataset과 DataLoader (0) | 2023.03.16 |