https://wikidocs.net/book/2788
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
# 같은 결과를 위한 랜덤시드 설정
torch.manual_seed(1)
x_train = torch.FloatTensor([[1] ,[2], [3]])
y_train = torch.FloatTensor([[2] ,[4], [6]])
print("x_train : ")
print(x_train)
print(x_train.shape) # 3행1열
# 가중치 w를 0으로 초기화하고 학습을 통해 변경되는 변수임을 명시
W = torch.zeros(1, requires_grad=True) # torch.zeros(size, out)
print("W :")
print(W) # tensor([0.], requires_grad=True)
# 편향 b도 0으로 초기화
b = torch.zeros(1, requires_grad=True)
# 경사하강법 SGD 구현. 가중치와 편향이 입력값이 된다
optimizer = optim.SGD([W, b], lr = 0.01)
nb_epochs = 1999
for epoch in range(nb_epochs + 1):
# 가설세우기 = 직선 만들기
hypothesis = x_train * W + b
# print("hypotesis : ")
# print(hypothesis)
# 비용함수 = 오차함수 선언
cost = torch.mean((hypothesis - y_train) ** 2)
# print("cost : ")
# print(cost) # 가중치와 편향이 모두 0일때는 그냥 음수값
optimizer.zero_grad() # 기울기 초기화. 새로운 가중치 편향에 대해 새로운 기울기 구할 수 있다
cost.backward() # 비용함수 미분해 기울기 계산
optimizer.step() # 가중치와 편향 업데이트
# 100번마다 로그 출력
if epoch % 100 == 0:
print('Epoch {:4d}/{} W: {:.3f}, b: {:.3f} Cost: {:.6f}'.format(
epoch, nb_epochs, W.item(), b.item(), cost.item()
))
x_train :
tensor([[1.],
[2.],
[3.]])
torch.Size([3, 1])
W :
tensor([0.], requires_grad=True)
Epoch 0/1999 W: 0.187, b: 0.080 Cost: 18.666666
Epoch 100/1999 W: 1.746, b: 0.578 Cost: 0.048171
Epoch 200/1999 W: 1.800, b: 0.454 Cost: 0.029767
Epoch 300/1999 W: 1.843, b: 0.357 Cost: 0.018394
Epoch 400/1999 W: 1.876, b: 0.281 Cost: 0.011366
Epoch 500/1999 W: 1.903, b: 0.221 Cost: 0.007024
Epoch 600/1999 W: 1.924, b: 0.174 Cost: 0.004340
Epoch 700/1999 W: 1.940, b: 0.136 Cost: 0.002682
Epoch 800/1999 W: 1.953, b: 0.107 Cost: 0.001657
Epoch 900/1999 W: 1.963, b: 0.084 Cost: 0.001024
Epoch 1000/1999 W: 1.971, b: 0.066 Cost: 0.000633
Epoch 1100/1999 W: 1.977, b: 0.052 Cost: 0.000391
Epoch 1200/1999 W: 1.982, b: 0.041 Cost: 0.000242
Epoch 1300/1999 W: 1.986, b: 0.032 Cost: 0.000149
Epoch 1400/1999 W: 1.989, b: 0.025 Cost: 0.000092
Epoch 1500/1999 W: 1.991, b: 0.020 Cost: 0.000057
Epoch 1600/1999 W: 1.993, b: 0.016 Cost: 0.000035
Epoch 1700/1999 W: 1.995, b: 0.012 Cost: 0.000022
Epoch 1800/1999 W: 1.996, b: 0.010 Cost: 0.000013
Epoch 1900/1999 W: 1.997, b: 0.008 Cost: 0.000008
Process finished with exit code 0
'ESL 연구실 활동 > LAB' 카테고리의 다른 글
오늘 한 거 (0) | 2022.01.26 |
---|---|
혼공머 스터디 (1~2장) (0) | 2022.01.25 |
컴구 운체 강의 추천 (0) | 2022.01.23 |
Pythorch 입문 - 다중회긔 (0) | 2022.01.20 |
[Dacon Basic] 영화 리뷰 감정분석 경진대회 (0) | 2022.01.19 |
임베디드 공부팁 (from 안) (0) | 2022.01.16 |