torch.nn.init 이 궁금하다면?
# 선형 회귀
import torch
import torch.nn as nn # 선형회귀를 불러오기 위한 라이브러리
import torch.optim as optim # 경사하강법를 불러오기 위한 라이브러리
import torch.nn.init as init # 텐서의 초기값을 구하기 위한 라이브러리
data = 1000 # 데이터 개수
epoch = 500
W = 4
b = 5
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()
# 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())
