Python 现代开发学习笔记

16-03 比较优化器

本章题解 · 全部练习

题目

保留同一数据划分与初始化,分别用 SGD 和 Adam 训练,记录训练与验证曲线,再按相同指标解释差异。

推导与做法

SGD 与 Adam 都从相同种子、相同 Linear 参数和同一训练/验证划分开始。训练时只对前十二项反向传播,后八项仅计算验证损失。

题解保存每轮 train、validation,并绘制 optimizer-curves.svg。比较同一轮数与同一 MSE,观察下降速度及训练/验证差距;某一次曲线更低只说明这组参数和数据下的结果,不直接推出优化器永远更好。

实现与运行

查看带注释实现。本题与相关处理函数放在同一章节代码文件中;启动工具负责定位相邻项目和选择题号。

在配套目录的 PyTorch与模型开发/training_project 中运行。先按项目 README 执行 uv sync --locked。接口题先安装 serve 可选项:uv sync --locked --extra serve。

# 使用项目解释器运行本题,题号决定执行哪一组演示。
uv run python "../../学习索引/参考实现/代码/ch16.py" 16-03

程序按题号输出处理后的值、查询结果或状态。先和前面的手算比较,再修改一项输入重跑。

查看本题运行结果
# 与上面的手算状态和题目数值逐项比较。
{
  "SGD": {
    "first": {
      "epoch": 1,
      "train": 1.115538239479065,
      "validation": 7.366790771484375
    },
    "last": {
      "epoch": 40,
      "train": 0.11448212713003159,
      "validation": 1.0389423370361328
    }
  },
  "Adam": {
    "first": {
      "epoch": 1,
      "train": 1.115538239479065,
      "validation": 7.993734836578369
    },
    "last": {
      "epoch": 40,
      "train": 0.008718016557395458,
      "validation": 0.08351005613803864
    }
  }
}
相同初始化与划分下的训练及验证曲线

笔记正文与全部题解 · Ctrl / ⌘ K