机器学习----PyTorch正向传播与反向传播

正向传播

  • 神经网络本质上就是一个复杂且有很多参数的复合函数,数据为函数的输入,结果为函数的输出。
  • 正向传播就是通过函数的输入以及神经网络,得到函数的输出。
  • 通常用来验证当前的参数是否是最优解,或者已经训练好的模型用来检测。
  1. 例如函数: y = w ∗ x y = w*x y=wx

  2. 通过调整过的参数 w w w和数据 x x x传入进去:获取到预测值 y ′ y' y

  3. 获取到损失值: l o s s = ( y − y ′ ) 2 loss = (y - y')^2 loss=(yy)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是否符合设定的关系➡反向传播求偏导➡梯度下降➡循环训练模型

猜你喜欢

转载自blog.csdn.net/bjsyc123456/article/details/124847558
今日推荐