import torch
from torch import nn
from torch.autograd import Variable
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
w = Variable(torch.Tensor([1.0]), requires_grad=True) # Any random value
print(w)
# our model forward pass
def forward(x):
return x * w
# Loss function
def loss(x, y):
y_pred = forward(x)
return (y_pred - y) * (y_pred - y)
# Training loop
for epoch in range(10):
for x, y in zip(x_data, y_data):
l = loss(x, y)
l.backward() # 自动计算
print("\t grad", x, y, w.grad.data[0]) # 打印 x,y 以及
w.data = w.data - 0.01 * w.grad.data # 直接使用
# manually zero the gradients after running the backward pass and update w
w.grad.data.zero_() # 一定要置0
print("progress:", epoch, l.data[0])
# After training
print("predict (after training)", 4, forward(4))
Variable containing:
1
[torch.FloatTensor of size 1]
grad 1.0 2.0 -2.0
progress: 0 1.0
grad 2.0 4.0 -7.840000152587891
progress: 0 3.841600179672241
grad 3.0 6.0 -16.228801727294922
progress: 0 7.315943717956543
grad 1.0 2.0 -1.478623867034912
progress: 1 0.5465821623802185
grad 2.0 4.0 -5.796205520629883
progress: 1 2.099749803543091
grad 3.0 6.0 -11.998146057128906
progress: 1 3.9987640380859375
grad 1.0 2.0 -1.0931644439697266
progress: 2 0.2987521290779114
grad 2.0 4.0 -4.285204887390137
progress: 2 1.1476863622665405
grad 3.0 6.0 -8.870372772216797
progress: 2 2.1856532096862793
grad 1.0 2.0 -0.8081896305084229
progress: 3 0.16329261660575867
grad 2.0 4.0 -3.1681032180786133
progress: 3 0.6273048520088196
grad 3.0 6.0 -6.557973861694336
progress: 3 1.1946394443511963
grad 1.0 2.0 -0.5975041389465332
progress: 4 0.08925279974937439
grad 2.0 4.0 -2.3422164916992188
progress: 4 0.34287363290786743
grad 3.0 6.0 -4.848389625549316
progress: 4 0.6529689431190491
grad 1.0 2.0 -0.4417421817779541
progress: 5 0.048784039914608
grad 2.0 4.0 -1.7316293716430664
progress: 5 0.18740876019001007
grad 3.0 6.0 -3.58447265625
progress: 5 0.35690122842788696
grad 1.0 2.0 -0.3265852928161621
progress: 6 0.02666448801755905
grad 2.0 4.0 -1.2802143096923828
progress: 6 0.10243429243564606
grad 3.0 6.0 -2.650045394897461
progress: 6 0.195076122879982
grad 1.0 2.0 -0.24144840240478516
progress: 7 0.014574333094060421
grad 2.0 4.0 -0.9464778900146484
progress: 7 0.055988773703575134
grad 3.0 6.0 -1.9592113494873047
progress: 7 0.10662525147199631
grad 1.0 2.0 -0.17850565910339355
progress: 8 0.007966067641973495
grad 2.0 4.0 -0.699742317199707
progress: 8 0.030602457001805305
grad 3.0 6.0 -1.4484672546386719
progress: 8 0.0582793727517128
grad 1.0 2.0 -0.1319713592529297
progress: 9 0.004354109987616539
grad 2.0 4.0 -0.5173273086547852
progress: 9 0.016726721078157425
grad 3.0 6.0 -1.070866584777832
progress: 9 0.03185431286692619
predict (after training) 4 Variable containing:
7.8049
[torch.FloatTensor of size 1]
Process finished with exit code 0