机器学习----PyTorch正向传播与反向传播
正向传播神经网络本质上就是一个复杂且有很多参数的复合函数,数据为函数的输入,结果为函数的输出。正向传播就是通过函数的输入以及神经网络,得到函数的输出。通常用来验证当前的参数是否是最优解,或者已经训练好的模型用来检测。例如函数: y=w∗xy = w*xy=w∗x通过调整过的参数www和数据xxx传入进去:获取到预测值 y′y'y′获取到损失值:loss=(y−y′)2loss = (y - y')
·
正向传播
- 神经网络本质上就是一个复杂且有很多参数的复合函数,数据为函数的输入,结果为函数的输出。
- 正向传播就是通过函数的输入以及神经网络,得到函数的输出。
- 通常用来验证当前的参数是否是最优解,或者已经训练好的模型用来检测。
-
例如函数: y=w∗xy = w*xy=w∗x
-
通过调整过的参数www和数据xxx传入进去:获取到预测值 y′y'y′
-
获取到损失值:loss=(y−y′)2loss = (y - y')^2loss=(y−y′)2
import torch
def forward(x, y, w):
# 模型
y_predicted = w * x
# 计算出真实值和预测值的损失值
loss = (y- y_predicted )**2
return loss
x = torch.tensor(1.0)
y = torch.tensor(2.0)
w = torch.tensor(1.0, requires_grad=True)
forward(x, y, w)
获取到预测值和真实值的差异,这就是正向传播的全过程
前面线性回归中求MSE的过程就是正向传播
反向传播
- 反向传播的目的就是计算预测值和参数之间的梯度关系(通过偏导数计算)
- 通过求偏导和梯度下降计算出的值调整w参数求出w参数的最优解(
模型训练的过程)
loss = forward(x, y, w)
loss.backward()
print(f'loss关于w的偏导值:{w.grad}')
# 清空梯度计算 避免下次计算进行累加
w.grad.zero_()
总结
- 总的来说,平时我们解方程
y=wx是求x和y的值 - 现在我们知道了x值和y值,怎么去求x和y之间的关系
- 怎么去求w参数的最优解,才可以让x和y有一定的关系
- 求w参数就是机器学习的过程
正向传播➡查看MSE是否符合设定的关系➡反向传播求偏导➡梯度下降➡循环训练模型
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)