akaSonny
완전 간단한 Linear model 만들기 본문
Linear regression 이란?
x(입력값)와 y(출력값)가 $y = x * w + b$ 라는 관계식을 갖고 있다고 가정하고 푸는 문제!
따라서 모델은 $\hat{y} = x * w$ 라는 예측값을 출력하기 위해 1차 계수인 $w$를 학습을 통해 훈련하게 된다.
이제 간단한 linear model을 만들어보자.
1. (완전) 간단한 데이터셋 만들기
import torch
import torchvision
import numpy as np
import matplotlib.pyplot as plt
x_data = [1., 2., 3.]
y_data = [2., 4., 6.]
plt.plot(x_data, y_data)
plt.xlabel('Hours')
plt.ylabel('Points')
plt.show()
2. weight에 변화를 주면서 loss 값 (여기서는 MSE) 계산하기
w = 1.0 # initial weight
def forward(x):
return x * w
def loss(x, y):
y_pred = forward(x)
return (y_pred - y) ** 2 # mean square error
# calculate loss (MSE) according to the change of weight
for w in np.arange(0.0, 4.1, 0.1):
print("w = %.1f"%(w))
l_sum = 0
for x_val, y_val in zip(x_data, y_data):
y_pred_val = forward(x_val)
l = loss(x_val, y_val)
l_sum += l
print("\t".join([str(x_val), str(y_val), "%.1f"%(y_pred_val), "%.2f"%(l)]))
print("MSE = %.2f \n"%(l_sum / len(x_val)))
2-1. weight 변화에 따른 loss 값 도식화 (매 반복 실행마다 weight와 loss 값을 리스트에 저장하면 된다.)
w_list = []
mse_list = []
for w in np.arange(0.0, 4.1, 0.1):
l_sum = 0
for x_val, y_val in zip(x_data, y_data):
y_pred_val = forward(x_val) # 예측값
l = loss(x_val, y_val) # loss 계산
l_sum += l
w_list.append(w)
mse_list.append(l_sum / len(x_val))
plt.plot(w_list, mse_list)
plt.ylabel("Loss")
plt.xlabel("Weight")
plt.show()
이렇게 되면 weight가 2에서 loss가 최소가 나오는 것을 볼 수 있다.
이건 정말정말 간단하게 linear한 관계를 가지는 데이터들의 weight를 어떻게 찾을 수 있는지 확인하는 실습이었다.
딥러닝 모델의 훈련 목적은 저 loss값이 최소가 되는 weight를 찾는 것!
다음 시간부터는 어떻게 loss를 찾는지에 대해 공부할 것이당
'Study (Programming) > Pytorch' 카테고리의 다른 글
[Pytorch] checkpoint 불러와서 모델 이어서 학습하기 (0) | 2024.02.19 |
---|---|
Pytorch 기초부터 시작! (0) | 2022.05.20 |