1.安装pycharm
-链接安装pycharm教程
-安装成功页面
安装pytorch
链接微软官方安装pytorch教程
安装中…
安装成功
python实现反向传播
模型为w1xx+w2*x+b
参考代码
import torch
x_data =[1,2,3]
y_data =[2,4,6]# 三个tensor
w1 = torch.tensor([1.0])
w1.requires_grad =True
w2 = torch.tensor([2.0])
w2.requires_grad =True
b = torch.tensor([1.0])
b.requires_grad =Truedefforward(x):return w1 * x * x + w2 * x + b
defloss(x, y):
y_pred = forward(x)return(y_pred - y)*(y_pred - y)print("训练之前",4, forward(4).item())# 训练过程for epoch inrange(10):for x, y inzip(x_data, y_data):# 把x_data和y_data整理成一个样本(x,y)
l = loss(x, y)# 前馈计算,并计算出损失值,张量
l.backward()# 后向计算,自动把计算图中需要梯度的地方求出,存到tensor的w中,释放计算图,下次进行loss计算时,在准备下一次的计算图# print('grad:', x, y, w1.grad.item(), w2.grad.item())
w1.data = w1.data - w1.grad.data *0.01# 张量loss中包含tensor类型的data和grad,要获得梯度(数值),而w.grad计算图,需要w.grad.data数值
w1.grad.data.zero_()
w2.data = w2.data - w2.grad.data *0.01# 张量loss中包含tensor类型的data和grad,要获得梯度(数值),而w.grad计算图,需要w.grad.data数值
w2.grad.data.zero_()
b.data = b.data - b.grad.data *0.01# 张量loss中包含tensor类型的data和grad,要获得梯度(数值),而w.grad计算图,需要w.grad.data数值
b.grad.data.zero_()# print("progress", epoch, l)print("训练之后",4, forward(4).item())
训练10次:
训练100次:
训练1000次:
训练10000次:
PyTorch Autograd自动求导
eg:y=x^2,在x=3的时候它的导数为6
代码实现:
import torch
x = torch.tensor(3.0, requires_grad=True)
y = torch.pow(x,2)# 判断x,y是否是可以求导的print(x.requires_grad)print(y.requires_grad)# 求导,通过backward函数来实现
y.backward()# 查看导数,也即所谓的梯度print(x.grad)
结果:
和预测结果一样。
版权归原作者 m0_53173359 所有, 如有侵权,请联系我们删除。