728x90
모델 학습을 위해 필요한 것
- 손실 함수 (Loss Function)
예측값과 실제값 사이의 차이를 계산
- 최적화 함수 (Optimizer)
손실 함수를 최소화 하기 위해 사용되는 알고리즘
Backpropagation으로 계산된 기울기를 사용해 가중치 업데이트
모델의 가중치 업데이트 하면서 최적화
- 에폭 (Epoch)
모든 데이터셋을 한 번 학습하는 횟수
- 학습률 (Learning rate)
학습을 얼마나 빨리 시킬건지
필요 라이브러리 임포트
import torch
import torch.nn as nn
# 최적화함수를 위해
import torch.optim as optim
최적화함수 -> Adam
손실함수 -> 크로스엔트로피
에폭 -> 100
학습률 -> 0.001
# 최적화함수, 학습률
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 손실함수
criterion = nn.CrossEntropyLoss()
# 에폭
epochs = 100
1. 기울기 초기화
2. 순전파(모델에 학습용 데이터 넣어 예측)
3. 손실함수 계산( 예측 값과 실제 정답의 오차 계산)
4. 역전파(기울기 계산)
5. 파라미터 업데이트(역전파 과정에서 계산된 기울기를 최적화함수에 넣어 파라미터 업데이트)
이걸 에폭 수만큼 반복
매 반복마다 최적화 함수를 통해 파라미터를 업데이트 하지만, 기울기는 0으로 초기화
for epoch in range(epochs):
optimizer.zero_grad() # 학습할 때마다 기울기 초기화
y_pred = model(X) # 순전파
loss = criterion(y_pred, y) # 손실함수 계산
loss.backward() # 역전파
optimizer.step() # 파라미터 업데이트
저는 시각화를 위해 코드를 더 추가해보겠습니다.
# 시각화를 위한 loss값 저장 리스트
loss_list = []
for epoch in range(epochs):
# 학습할 때마다 기울기 초기화
optimizer.zero_grad()
# 순전파
y_pred = model(X)
# 손실함수 계산
loss = criterion(y_pred, y)
# loss 표시
print(f'epoch: {epoch+1} loss: {loss}')
loss_list.append(loss.item())
# 역전파
loss.backward()
# 파라미터 업데이트
optimizer.step()
loss_list 시각화
import matplotlib.pyplot as plt
plt.plot(range(epochs), loss_list)
plt.show()
'Pytorch' 카테고리의 다른 글
[파이토치] iris 데이터를 위한 신경망 만들어보기 (0) | 2024.12.24 |
---|---|
[파이토치] 모델 만들기 (1) | 2024.12.15 |
[파이토치] 기본2 (0) | 2024.08.01 |
[Pytorch] 모델 저장하기, 불러오기 (0) | 2024.07.23 |
[Pytorch] 텐서(Tensor) 자료형 (0) | 2024.07.16 |