AI/PyTorch

[PyTorch] Autograd

sangwonYoon 2023. 3. 20. 01:56

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)
  1. 예측값과 정답의 오차를 손실 함수를 이용해 계산한다.
  2. 이렇게 구한 오차 텐서에 .backward()를 호출하여 역전파한다.
  3. AutoGrad가 자동으로 loss값에 관여한 파라미터들의 .grad 속성에 gradient를 계산하여 저장한다.

 

# 옵티마이저 생성
optim = torch.optim.SGD(model.parameters(), lr=1e-2, momentum=0.9)

모델의 파라미터들이 등록된 SGD 옵티마이저를 생성한다.

 

optim.step() # 경사하강법(gradient descent)

.step()을 호출하여 옵티마이저가 파라미터의 .grad에 저장된 gradient에 따라 값을 조정한다.