Chapter 4 神经网络训练
神经网络训练
训练的过程是反向传播的过程,利用得到的输出值与预测值的偏差,(损失函数),反向更新模型中的参数
逼近的思路理解训练
随机生成一个三阶函数,赋予一组随机参数,得到的输出与 sine 输出值比较,差值 loss 最小的那一组参数就为目标函数。
- 流程:
- 根据预测值和标签值得到 loss
- Loss 函数对各个参数反向求偏导
- 计算每个参数的梯度
- 更新参数值
- 梯度置 0
- 再次循环
反向传播
高阶函数构造 sin(x) c
- 常规思路:loss 对各参数求偏导,计算梯度,更新梯度值,梯度置 0
1 | """用一个三阶函数找到合适的参数 逼近y=sinx |
- loss.backward():由该函数确定更新后的参数值 (这是一个 PyTorch 库中的函数,输入输出需要为张量)
1 | """用一个三阶函数找到合适的参数 逼近y=sinx |
- optimiser.step(): 优化器函数(同上)
1 | """用一个网络模型 逼近y=sinx |
需要注意:
optimiser = torch.optim.RMSprop(params=mynn.model.parameters(),lr=learning_rate)
定义了一个优化器,参数是模型中的各个参数,lr
是学习率。在机器学习和深度学习中,优化器(Optimizer)是一种用于调整模型参数以最小化损失函数的算法或方法。优化器根据模型的梯度信息和指定的优化算法,更新模型参数的值,以便使损失函数达到最小值或接近最小值。在训练神经网络模型的过程中,优化器的作用非常重要。它能够根据损失函数的梯度信息来更新模型参数,使得模型能够逐步调整自身以更好地拟合训练数据。
loss.Backward()
的任务是执行反向传播计算梯度。具体来说,它计算损失函数 loss 关于模型参数的梯度,通过使用链式法则将梯度从损失函数传播到模型的每个参数。这样可以获得每个参数相对于损失函数的梯度信息,即参数的更新方向和大小。
optimiser.step()
的任务是根据梯度信息更新模型参数的值。它使用优化算法(如 RMSprop)和学习率来计算参数的更新量,并将这个更新量应用到模型的参数上,从而更新参数的值。这样,模型的参数会朝着减小损失函数的方向进行调整。
损失函数与优化器
- 常用的损失函数
- 平方损失 输出-预期的平方的求和
- 最大似然处理,输出的结果(似然值)视为概率,再去求得到该结果概率值最大的权重系数 w。已知事情发生的结果,反推发生该结果概率最大的参数 w P(x|w,b)
- 交叉熵损失
1 | """损失函数的使用 |
- 常用的优化器
- SGD
- Adam
构建神经网络全过程
搭建+训练(Chapter 3+4)
下载数据->加载数据->准备模型->设置损失函数->设置优化器->开始训练->最后验证->结果聚合展示
1 | from torch import nn |
Tensor(38.6425)
:这部分表示损失函数的数值,即计算得到的具体损失值。在这个例子中,损失函数的值为 38.6425。
grad_fn=<MseLossBackward0>
:这部分表示损失函数的计算图中的反向传播函数。它指示了该张量是通过执行反向传播操作计算得到的,并且在计算图中有一个与之相关的反向传播函数。在这个例子中,使用的是均方误差损失函数(MSELoss),因此显示为 <MseLossBackward0>。