Code

# 선형 회귀
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())

Untitled