1.代码实现(这里torch.Tensor和torch.tensor都可以,前者是类后者是pytorch函数)
#使用pytorch进行反向传播,我们使用tensor数据类型
import torch
import numpy as np
import matplotlib.pyplot as plt
#准备tensor数据类型
x_data = torch.Tensor([1.0,2.0,3.0])
y_data = torch.Tensor([2.0,4.0,6.0])
w = torch.Tensor([1.0])
w.requires_grad = True#默认Tensor是不会计算梯度的,这里需要指明
#前馈传播
def forward(x):
return x*w #这里进行数乘,x进行了一个tensor类型的自动转换
#定义loss函数
def loss(x,y):
y_pred = forward(x)
return (y_pred-y)**2
print("Predict (before training)",4,forward(4).item())#这里的y_pred是tensor类型,我们取数值
for epoch in range(100):
for x,y in zip(x_data,y_data):
l = loss(x,y)#前馈
l.backward()#反馈
print("\tGrad:",x,y,w.grad.item())
#更新梯度
w.data -=0.01*w.grad.data #不能忘记这里的data,因为grad本身也是一个tensor类型
#更新一次,那么计算图的grad就得重新置为0,否则梯度会进行累加再投入计算
w.grad.data.zero_()
print("Progress:",epoch,l.item()) #取l的数值一定要加item,否则l是计算图
print("Predict (after training)",4,forward(4).item())