Pytorch

[파이토치] 모델 학습하기

왕초보코딩러 2024. 12. 23. 15:06
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()