深度学习入门文档深度页
神经网络训练循环
按清梯度、前向、损失、反向和更新的顺序重复优化参数。
学习目标
- 写出五步循环
- 解释每步是否更新参数
- 记录训练损失
为什么需要这个概念
职责顺序错误会导致梯度累加、参数不更新或损失无法下降。
- 串联所有训练组件
- 是 PyTorch 项目的核心骨架
学习前需要掌握
背景与问题
职责顺序错误会导致梯度累加、参数不更新或损失无法下降。
概念定义
一次普通训练迭代处理一个 batch,并在 optimizer.step 时更新一次参数。
直观理解
先答题、计分、追责,再按责任调整参数。
核心原理
backward 只计算并累积梯度,step 才更新参数,zero_grad 清除旧梯度。
学习率控制更新尺度;验证阶段不得 backward 或 step。
数学表达
核心公式
θ 是参数,η 是学习率,梯度来自 backward。
变量含义
θ模型参数η学习率L当前 batch 损失
计算步骤
- 1w_new=2-0.1×0.3
代码对应位置
示例 1神经网络训练循环 · PyTorch 示例:验证神经网络训练循环的输入、计算和输出。
变量解释
| 变量 | 含义 |
|---|---|
θ | 模型参数 |
η | 学习率 |
L | 当前 batch 损失 |
完整数值示例
一次权重更新
已知条件
- w=2
- grad=0.3
- η=0.1
- 1
w_new=2-0.1×0.3
w_new=1.97
处理前后对比
计算与实现步骤
- 1
zero_grad
- 2
model(x)
- 3
criterion
- 4
loss.backward
- 5
optimizer.step
代码实现
示例 1
神经网络训练循环 · PyTorch 示例
神经网络训练循环 · PyTorch 示例
PyTorch
example_01.py用途:验证神经网络训练循环的输入、计算和输出。
optimizer.zero_grad(set_to_none=True)
prediction=model(x)
loss=criterion(prediction,target)
loss.backward()
optimizer.step()代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
验证神经网络训练循环的输入、计算和输出。
model- 组合预处理和估计器的模型对象。
loss- 当前预测与目标之间的损失值。
Step 1 · 1–5 行
计算损失对参数的梯度,对应数学表达中的 ∇J;梯度只给出局部变化方向。
optimizer.zero_grad(set_to_none=True)
prediction=model(x)
loss=criterion(prediction,target)
loss.backward()
optimizer.step()代码与数学原理
参数更新由当前梯度与学习率共同决定。
平方误差代码对应均方损失。
预期输出或运行结果
参数在 step 后发生变化,loss 可用于日志。
常见错误 · 4 条
- 忘记清梯度
- backward 当更新
- 学习率越大越好
- 验证仍 step
实际应用
- 所有梯度训练模型
常见错误
忘记清梯度
backward 当更新
学习率越大越好
验证仍 step
文档来源
02_神经网络的训练与优化原始文档
学习资料/deeplearning/02_神经网络的训练与优化.md- §1 训练循环
- §4 反向传播
- §5 优化器
- §8 标准训练流程
常见问题
哪一步更新参数?
optimizer.step。
为何先清梯度?
PyTorch 默认把梯度累加到 .grad。
推荐学习资料
暂未收录相关资料
参考库不会生成虚假资源或无效外部链接。