Python(Colab) 파이토치(Pytorch) + 단항 선형회귀 해보기
2023. 6. 18. 20:21ㆍ파이썬/머신러닝 및 딥러닝
1개 입력 / 1개 출력
참고사이트
https://rabo0313.tistory.com/entry/pytorch-torchmanualseed
1. 기초설정
import torch
import torch.nn as nn #신경망 모듈
import torch.optim as optim # 기울기와 절편을 학습시키는 알고리즘
import matplotlib.pyplot as plt
torch.manual_seed(10)
2. 예제 데이터 만들기
x_train = torch.FloatTensor([[1],[2],[3]])
y_train = torch.FloatTensor([[2],[4],[6]])
print(x_train)
print(x_train.shape)
print(y_train)
print(y_train.shape)
3. 예제 데이터 시각화
plt.figure(figsize=(8,5))
plt.scatter(x_train,y_train)
4. 선형회귀 모델 셋팅
# H= Wx+b
model = nn.Linear(1,1) # 빈 모델
print(model) # Linear(in_features=1, out_features=1, bias=True) #in입력 /out 출력 /bias=편향(절편)
print(list(model.parameters())) #지금 내가 가지고 있는 기울기와 bias(절편)를 보여준다.
✔️ 해석
1. input이 1개이고, output이 1개인 선형 회귀 모델을 셋팅
2. list(model.parameters()))로 현재 테스트로 만들어진 기울기와 절편을 확인할 수 있다.
5. 비용함수를 이용 (단순 선형회귀이때문에 오차의 최소를 찾기 위해서)
y_pred = model(x_train)
print(y_pred)
6. 오차율 구하기
MSE
# MSE구하는 함수 모양 특이🔴
loss = nn.MSELoss()(y_pred,y_train)
loss
7. 경사하강법 (비용함수 최적화)
✔️ 경사하강법
* Gradient Descent
* 선형회귀:실제값과 가장 비슷한 기울기와 절편을 찾는게 최종목표
* 비용함수의 값을 최소로 하는 기울기와 절편을 찾는 알고리즘을 옵티마이저 알고리즘이라고함
* 최적화 알고리즘이라고 부르기도 한다.
* 옵티마이저 알고리즘을 통해 w(기울기)와 b(절편)을 찾아내는 과정을 학습이라 부른다.
* 경사 하강법은 가장 기본적인 옵티마이저 알고리즘
8. 경사하강법 적용하기
#랜덤하게 데이터를 뽑아서 학습하는 경사하강법 알고리즘 중 1개
#학습율(Learning Rate): 한 번 움직이는 거리 (increment step)
optimizer = optim.SGD(model.parameters(),lr=0.01)
lr: 학습율을 의미하며 그래프가 한번에 움직일 거리를 정하는 것
loss = nn.MSELoss()(y_pred,y_train)
#🔴 3개가 세트처럼 사용
optimizer.zero_grad() # 옵티마이저가 가진 기울기, 절편을 초기화 시키는 것
loss.backward() # 역전파가 일어나게 된다. 비용 함수를 미분을 취해서 기울기와 절편을 새롭게 찾아내는 것
optimizer.step() #현재 W와 b를 업데이트
학습한 기울기 확인
#바뀐 기울기 확인.
print(list(model.parameters()))
# before ) tensor([[-0.0838]],[-0.0343])
# after ) tensor([[0.1120],[0.0498])
9. 반복 학습시키기
반복 훈련을 하면서 틀린 W(기울기),b(절편)의 오차를 계속 줄여나간다.
epoch: 반복 훈련 횟수를 의미
epochs =1000
for epoch in range(epochs+1):
y_pred = model(x_train)
loss = nn.MSELoss()(y_pred,y_train)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if epoch % 100 == 0:
print(f'Epoch{epoch}/{epochs} // Loss{loss:.6f}')
10. 최적화 된 기울기와 절편 확인
print(list(model.parameters()))
(1.9974) * x +0.0060 = y 의미
728x90
'파이썬 > 머신러닝 및 딥러닝' 카테고리의 다른 글
Python(Colab) 파이토치(Pytorch) + 논리 회귀 (0) | 2023.06.20 |
---|---|
Python(Colab) 파이토치(Pytorch) + 다항 선형회귀 해보기 (0) | 2023.06.20 |
Python(Colab) 파이토치(Pytorch) (0) | 2023.06.18 |
Python(Colab) KMeans + 실루엣 기법 / 클러스터링 (0) | 2023.06.18 |
Python(Colab) KMeans / 클러스터링 (0) | 2023.06.17 |