반응형
import torch
X = [1, 2, 3, 4, 5, 6, 7]
Y = [25000, 55000, 75000, 110000, 128000, 155000, 180000]
X = [[i] for i in X]
Y = [[i] for i in Y]
x_data = torch.Tensor(X)
y_data = torch.Tensor(Y)
class LinearRegressionModel(torch.nn.Module):
def __init__(self, input_dim, output_dim):
super(LinearRegressionModel, self).__init__()
self.linear = torch.nn.Linear(input_dim, output_dim)
def forward(self, x):
y_pred = self.linear(x)
return y_pred
model = LinearRegressionModel(1, 1)
criterion = torch.nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.001)
for epoch in range(10001):
pred_y = model(x_data)
loss = criterion(pred_y, y_data)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if epoch % 1000 == 0:
print("[ epoch: %d, cost: %.2f ]" % (epoch, loss.data))
print("w = %.2f, b = %.2f" % (model.linear.weight, model.linear.bias))
print("f(x) = %.2fx + %.2f" % (model.linear.weight, model.linear.bias))
print("예측값: [%.2f]" % (model(torch.Tensor([[8]]))))
[ epoch: 0, cost: 13455522816.00 ]
w = 1036.49, b = 208.20
[ epoch: 1000, cost: 9836451.00 ]
w = 25147.71, b = 3880.53
[ epoch: 2000, cost: 9190552.00 ]
w = 25305.77, b = 3097.79
[ epoch: 3000, cost: 8891225.00 ]
w = 25413.36, b = 2564.96
[ epoch: 4000, cost: 8752501.00 ]
w = 25486.61, b = 2202.24
[ epoch: 5000, cost: 8688207.00 ]
w = 25536.47, b = 1955.31
[ epoch: 6000, cost: 8658409.00 ]
w = 25570.42, b = 1787.21
[ epoch: 7000, cost: 8644593.00 ]
w = 25593.54, b = 1672.78
[ epoch: 8000, cost: 8638193.00 ]
w = 25609.28, b = 1594.86
[ epoch: 9000, cost: 8635219.00 ]
w = 25619.99, b = 1541.81
[ epoch: 10000, cost: 8633847.00 ]
w = 25627.26, b = 1505.71
f(x) = 25627.26x + 1505.71
예측값: [206523.78]
공부내용
Day 16일차에 배운 내용을 Pytorch로 구현한 코드이다. import torch
를 사용하여 torch라이브러리를 불러온다.
x,y데이터를 Tensor형태로 바꾼다.
class LinearRegressionModel(torch.nn.Module):
def __init__(self, input_dim, output_dim):
해당 코드는 차원을 입력받는다. 이때 들어오는 차원이 1차원이므로 model = LinearRegressionModel(1, 1)
에 1,1이 적히게 된다.
optimizer = torch.optim.SGD(model.parameters(), lr=0.001)
optimizer.zero_grad()
loss.backward()
optimizer.step()
이 코드에선 torch.optim.SGD을 통해 이제 경사 하강법을 구현합니다. 아래의 'SGD'는 경사 하강법의 일종입니다. lr은 학습률(learning rate)를 의미합니다. 학습 대상인 W와 b가 SGD의 입력이 됩니다.
# gradient를 0으로 초기화
optimizer.zero_grad()
# 비용 함수를 미분하여 gradient 계산
cost.backward()
# W와 b를 업데이트
optimizer.step()
참고사이트
'AI_Bootcamp' 카테고리의 다른 글
4주차 Day17 Numpy 심화 실습 3 (0) | 2022.01.25 |
---|---|
4주차 Day17 Multivariable Linear Regression with PyTorch chap2 (0) | 2022.01.25 |
4주차 Day16 Linear Regression with bias chap2 (0) | 2022.01.25 |
4주차 Day16 Linear Regression chap1 (0) | 2022.01.25 |
4주차 Day16 딥러닝 기초 및 비전 (0) | 2022.01.25 |