- Design your model using class with Variables (class와 변수 정의)
- Construct loss and optim
- Train cycle (forward, backward, update)
PyTorch model의 기본 구조
import torch.nn as nn
import torch.nn.functional as F
class Model_Name(nn.Module): #nn.Module 상속
def __init__(self):
super(Model_Name, self).__init__()
self.module1 = ...
self.module2 = ...
"""
ex)
self.conv1 = nn.Conv2d(1, 20, 5)
self.conv2 = nn.Conv2d(20, 20, 5)
"""
def forward(self, x):
x = some_function1(x)
x = some_function2(x)
"""
ex)
x = F.relu(self.conv1(x))
x = F.relu(self.conv2(x))
"""
return x
model = Model_Name() # 여기에 변수를 넣어주면 됨.
PyTorch 모델을 사용하기 위해서는 nn.Module을 상속받아 온 후 __init()__과 forward()를 override 해야함
* 상속 : 어떤 class를 만들 때 다른 class의 기능을 그대로 가지고 오는 것
* override : 부모 class (torch.nn.Module)에 정의되어있는 method를 자식 class에서 변경하는 것
__init()__ : 모델에 사용할 module과 activation function을 정의 = 신경망 모델에 사용될 구성품들을 정의 및 초기화
ex. module : nn.Linear, nn.Conv2d, 사용자가 정의 ...
ex. activation function :nn.functional.relu, nn.functional.sigmoid
## module 과 activation function 이 뭔지에 대한 포스팅 정리하기 ##
forward(self, x) : 모델에서 실행되어야 하는 계산을 정의 = input을 넣어서 어떤 계산을 진행한 뒤 output을 돌려받는지를 정의 = __init()__ 에서 정의된 구성품들을 연결
nn.Module
Neural Network의 모든 것을 포괄하는 모든 신경망 모델의 Base Class
nn.Module을 상속한 subclass가 신경망 모델로 사용되기 위해선 __init()__과 forward(self, x)를 override 해야한다.
- Design your model using class with Variables (class와 변수 정의)
- Construct loss and optim (loss와 optimizer 설정)
- Train cycle (forward, backward, update)
optimizer 설정
optimizer의 목적 : loss function의 최소값 찾기
PyTorch의 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)
- 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를 조절할 수 있다.
loss 설정
loss = 모델의 추측 결과와 실제 정답이 얼마나 다른지(=model이 얼마나 틀리는지)
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()
'Deep Learning' 카테고리의 다른 글
AutoEncoder와 anomaly detection (0) | 2022.08.17 |
---|---|
PyTorch : Dataset과 DataLoader (0) | 2022.08.16 |
PCA (0) | 2022.08.16 |
self-supervised pre-training (0) | 2022.07.16 |
self-supervised learning (0) | 2022.07.15 |