티스토리 뷰

예제를 통해서 선형 모형(Linear regression)을 설명하겠습니다.

image

> X(학습시간), Y(점수)이며 주어진 데이터를 바탕으로 학습시간에 따른 점수를 예측하는 것이 Task입니다.

> Training dataset - 모델을 구축하기 위해서 train하는 데이터, Test dataset - 모델이 잘 구축되었는지 test하는 데이터


image

> 학습 모형은 선형 모델을 가정합니다.

> 학습시간에 따른 점수를 잘 예측 할 수있는 선형 모델의 W, b를 찾는 것이 목표입니다.


  • Weight Initailization

In[1]

W = torch.zeros(1, requires_grad = True)
b = torch.zeros(1, requires_grad = True)

> W, b를 0으로 초기화하고

> W, b를 학습할 것이라고 명시합니다.



In[2]

hypothesis = x_train * W +b


  • cost funtion

In[3]

cost = torch.mean((hypothesis - y_train)**2 )

> 예측값(hypothesis)과 실제값(y_train)차이에 대한 cost function을 정의합니다.


  • Gradient Descent

In[4]

optimizer = optim.SGD([W,b], lr=0.01)
optimizer.zero_grad()
cost.backward()
optimizer.step()

> [W, b]는 학습 할 값이기 tensor이기 때문에 list로 만들어줍니다.

> Zero_grad()로 gradient 초기화, Backward()로 gradient 계산, Step()으로 개선합니다.


  • Training with full Code

In[5]

# 데이터
x_train = torch.FloatTensor([[1],[2],[3]])
y_train = torch.FloatTensor([[2],[4],[6]])
# 모델 초기화
w = torch.zeros(1,requires_grad = True)
b = torch.zeros(1,requires_grad = True)
# optimzier 설정
optimizer = optim.SGD([W, b], lr=0.01)
nb_epochs = 1000
for epoch in range(nb_epochs + 1):
#H(x)
hypothesis = x_train*W + b
#cost
cost = torch.mean((hypothesis - y_train)**2)
#cost개선
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()))

Out[5]

Epoch 0/1000 W:0.187, b:0.080, Cost:18.666666
Epoch 100/1000 W:1.746, b:0.578, Cost:0.048171
Epoch 200/1000 W:1.800, b:0.454, Cost:0.029767
Epoch 300/1000 W:1.843, b:0.357, Cost:0.018394
Epoch 400/1000 W:1.876, b:0.281, Cost:0.011366
Epoch 500/1000 W:1.903, b:0.221, Cost:0.007024
Epoch 600/1000 W:1.924, b:0.174, Cost:0.004340
Epoch 700/1000 W:1.940, b:0.136, Cost:0.002682
Epoch 800/1000 W:1.953, b:0.107, Cost:0.001657
Epoch 900/1000 W:1.963, b:0.084, Cost:0.001024
Epoch 1000/1000 W:1.971, b:0.066, Cost:0.000633

> 결과는 W=1.971, b: 0.066이다. 학습시간 (X=4) 일 때 예상점수(Y)?

> 1.971*4 + 0.066 = 7.95




참고링크 :

[PyTorch] Lab-02 Linear regression

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함