일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- STL
- docker
- Set
- 패치분할
- 도커 레이어
- MESH
- GIS
- 지하철역좌표
- 데이터입수
- 컨테이너
- graph
- 귀여운고래
- 이미지빌드
- 좌표거리
- GNN
- 3d
- osmnx
- 파이썬
- geopandas
- 동명이인찾기
- python최단거리
- geojson
- Python
- GCN
- 알고리즘
- 그리드분할
- 폴더조사
- 도커
- pyvista
- 3d데이터
- Today
- Total
이것저것 기록
[DL, PyTorch] loss, optimizer 설정하기 본문
PyTorch로 신경망 모델을 설계할 때, 크게 다음과 같은 세 가지 스텝을 따르면 된다.
- Design your model using class with Variables
- Construct loss and optim
- Train cycle (forward, backward, update)
여기서 두 번째 순서인 로스와 옵티마이저를 설정하는 방법을 포스팅 해보려고 한다.
1. Opimizer 설정
옵티마이저는 PyTorch의 optim 패키지를 사용하여 간단하게 정의할 수 있다.
optim 패키지는 다양한 최적화 알고리즘을 초합하고 있으니까 참고하면 된다.
torch.optim — PyTorch 1.6.0 documentation
torch.optim torch.optim is a package implementing various optimization algorithms. Most commonly used methods are already supported, and the interface is general enough, so that more sophisticated ones can be also easily integrated in the future. How to us
pytorch.org
import torch.optim as optim
optimizer = optim.SGD([a, b], lr=lr)
for epoch in range(n_epochs):
yhat = a + b * x_train_tensor
error = y_train_tensor - yhat
loss = (error ** 2).mean()
loss.backward()
optimizer.step()
optimizer.zero_grad()
print(a, b)
옵티마이저는 update할 parameter와 learning rate 및 여러 다른 hyper-parameter를 받아 step() method 를 통해 업데이트한다.
Gradient를 0으로 만드는 것도 옵티마이저의 zero_grad() method 가 해결해 준다.
그러니까 어떤 옵티마이저를 쓸지 정하고, 파라미터와 lr을 넘겨주면 남은 일?은 .step(), .zero_grad()이 해준다고 보면 될 것 같다.
옵티마이저에 대해 알아두면 좋은 것들: (greeksharifa.github.io/pytorch/2018/11/10/pytorch-usage-03-How-to-Use-PyTorch/#set-loss-functioncreterion-and-optimizer)
- optimizer는 step() method를 통해 argument로 전달받은 parameter를 업데이트한다.
- 모델의 parameter별로(per-parameter) 다른 기준(learning rate 등)을 적용시킬 수 있다.
- torch.optim.Optimizer(params, defaults)는 모든 optimizer의 base class이다.
- nn.Module과 같이 state_dict()와 load_state_dict()를 지원하여 optimizer의 상태를 저장하고 불러올 수 있다.
- zero_grad() method는 optimizer에 연결된 parameter들의 gradient를 0으로 만든다.
- torch.optim.lr_scheduler는 epoch에 따라 learning rate를 조절할 수 있다.
2. Loss 설정
로스는 모델이 추측한 결과와 실제 정답이 얼마나 다른지에 대한 loss를 계산한다.
로스 함수에도 종류가 엄청 많으니까 참고하면 좋다.
torch.nn — PyTorch 1.6.0 documentation
Shortcuts
pytorch.org
로스 함수를 정의할 때 보통은 creterion, loss_fn, loss_function 등의 이름을 많이 사용한다.
import torch.nn as nn
loss_fn = nn.MSELoss(reduction='mean')
optimizer = optim.SGD([a, b], lr=lr)
for epoch in range(n_epochs):
yhat = a + b * x_train_tensor
loss = loss_fn(y_train_tensor, yhat)
loss.backward()
optimizer.step()
optimizer.zero_grad()
'Data Science > ML & DL' 카테고리의 다른 글
[DL, PyTorch] 클래스로 선형회귀 (linear regression) 구현하기 (0) | 2020.10.14 |
---|---|
[DL, PyTorch] Dataset과 DataLoader (0) | 2020.10.14 |
[DL, PyTorch] 신경망 모델 정의하기 -- Class, nn.Module (0) | 2020.10.13 |
[DL, PyTorch] Autograd: 자동 미분 (0) | 2020.10.13 |
[DL, PyTorch] 텐서 슬라이싱, 브로드캐스팅, 기본 연산 (0) | 2020.10.10 |