선형 회귀를 Pytorch로 구현하겠습니다.
이 글을 보시기 전에 아래 링크를 보시는 것을 추천드립니다.
https://coding-yoon.tistory.com/50?category=825914
최대한 선형 회귀식처럼 보기 쉽게끔 코딩하였습니다.
# 선형 회귀
import torch
import torch.nn as nn # 선형회귀를 불러오기 위한 라이브러리
import torch.optim as optim # 경사하강법를 불러오기 위한 라이브러리
import torch.nn.init as init # 텐서의 초기값을 구하기 위한 라이브러리
data = 1000 # 몇 개의 데이터를 만들 것인가...
epoch = 500 # 몇 번을 거쳐 돌릴 것인가... ( = 데이터 전체를 학습에 한 번 사용하는 주기 )
W = 4 # weight ( = 기울기 )
b = 5 # bias ( = 절편 )
x = init.uniform_(torch.Tensor(data, 1), -10, 10) # Input data
y = W * x + b # Output data
model = nn.Linear(1, 1) # 선형회귀 모델 ( Input 특성의 수, 결과로 나오는 특성의 수 )
cost_function = nn.MSELoss() # MSE : 제곱의 평균 ( = Mean of squares )
# optim : 최적화 함수 ( = optimizer)
# SGD : 경사하강법 ( = stochastic gradient descent )
# model.parameters() : model 의 parameter(w, b) 를 전달
# lr : 학습률 ( = learning rate )
optimizer = optim.SGD(model.parameters(), lr=0.01)
for i in range(epoch):
optimizer.zero_grad() # 처음엔 gradient 값이 없기 때문에 0으로 초기화
H_x = model(x) # hypothesis
loss = cost_function(H_x, y) # cost(=loss) 구하기
loss.backward() # W, b에 대한 기울기 계산
optimizer.step() # optimizer 호출, 경사하강법을 사용하여 업테이트
# 10번 씩 수행하면 cost 출력
if i % 10 == 0:
print("Cost(=loss) :", loss.item())
result = list(model.parameters())
print("W :", result[0].item())
print("b :", result[1].item())
# 결과
Cost(=loss) : 814.8699340820312
Cost(=loss) : 12.195707321166992
Cost(=loss) : 8.143980026245117
Cost(=loss) : 5.438344955444336
Cost(=loss) : 3.6315879821777344
Cost(=loss) : 2.4250807762145996
Cost(=loss) : 1.6194065809249878
Cost(=loss) : 1.081398606300354
Cost(=loss) : 0.7221314907073975
Cost(=loss) : 0.4822206497192383
Cost(=loss) : 0.3220142424106598
Cost(=loss) : 0.21503257751464844
Cost(=loss) : 0.14359332621097565
Cost(=loss) : 0.09588787704706192
Cost(=loss) : 0.06403134018182755
Cost(=loss) : 0.042758237570524216
Cost(=loss) : 0.02855268307030201
Cost(=loss) : 0.01906675659120083
Cost(=loss) : 0.012732233852148056
Cost(=loss) : 0.008502312004566193
Cost(=loss) : 0.005677602719515562
Cost(=loss) : 0.003791437717154622
Cost(=loss) : 0.0025317480321973562
Cost(=loss) : 0.001690658857114613
Cost(=loss) : 0.001128957374021411
Cost(=loss) : 0.0007538488134741783
Cost(=loss) : 0.0005033717607147992
Cost(=loss) : 0.0003361686831340194
Cost(=loss) : 0.00022449734387919307
Cost(=loss) : 0.0001499166974099353
Cost(=loss) : 0.00010010885307565331
Cost(=loss) : 6.684719119220972e-05
Cost(=loss) : 4.463006553123705e-05
Cost(=loss) : 2.9802462449879386e-05
Cost(=loss) : 1.990168311749585e-05
Cost(=loss) : 1.3289816706674173e-05
Cost(=loss) : 8.872347279975656e-06
Cost(=loss) : 5.9264275478199124e-06
Cost(=loss) : 3.959625701099867e-06
Cost(=loss) : 2.6436666757945204e-06
Cost(=loss) : 1.766238597156189e-06
Cost(=loss) : 1.1812345519501832e-06
Cost(=loss) : 7.882306931605854e-07
Cost(=loss) : 5.261869091555127e-07
Cost(=loss) : 3.516942399528489e-07
Cost(=loss) : 2.3484382438709872e-07
Cost(=loss) : 1.5710433842741622e-07
Cost(=loss) : 1.0491751822883089e-07
Cost(=loss) : 6.964684473587113e-08
Cost(=loss) : 4.667232644806063e-08
W : 3.9999990463256836
b : 4.999824047088623
Process finished with exit code 0
아래 결과를 자세히 보시면 중간까지는 cost의 값이 굉장히 작다가 후반부에 cost의 값이 증가하는 것을 확인할 수 있습니다.
모델링을 할 때 유의사항 중 epoch를 무조건 많이 준다하여, 학습이 잘되는 것이 아닙니다.
데이터 처리, 모델링, epoch 등을 모두 적절하게 적용하여야 합니다.
728x90
반응형
'Python > Deep Learning' 카테고리의 다른 글
[딥러닝] BRNNs(Bidirectional Recurrent Neural Networks) with Pytorch (0) | 2020.05.01 |
---|---|
[딥러닝] RNN with PyTorch ( RNN 기본 구조, 사용 방법 ) (3) | 2020.04.28 |
[딥러닝] 선형 회귀(Linear Regression) (1) | 2020.04.09 |
[딥러닝] 파이토치 기본 step3::구조 1탄 (0) | 2020.02.06 |
[딥러닝] 파이토치 step2:: 설치&준비 (0) | 2020.02.04 |