Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 3d
- python최단거리
- 파이썬
- 귀여운고래
- 3d데이터
- 이미지빌드
- STL
- 패치분할
- graph
- 알고리즘
- 도커 레이어
- geojson
- 좌표거리
- 폴더조사
- 컨테이너
- geopandas
- 지하철역좌표
- MESH
- GNN
- osmnx
- 동명이인찾기
- docker
- GIS
- 그리드분할
- GCN
- Python
- 도커
- 데이터입수
- Set
- pyvista
Archives
- 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 패키지는 다양한 최적화 알고리즘을 초합하고 있으니까 참고하면 된다.
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를 계산한다.
로스 함수에도 종류가 엄청 많으니까 참고하면 좋다.
로스 함수를 정의할 때 보통은 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 |
Comments