首页 › S 模型训练 › S4 训练过程 › 01

S4-01 · loss 曲线解读:一眼看出欠拟合、过拟合、震荡

进阶阶段约 120 分钟阶段:S4 训练过程

阶段:S4-训练过程 | 预计耗时:75-90 分钟(三种病各跑一次)| 前置:S3 全部验收通过 新依赖:pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple 代码:本篇代码要你自己敲成 model-learn/s4_loss_curves.py

学习目标

  1. 学会记录训练曲线:每个 epoch 的 train loss / val loss 双线
  2. 亲手制造三种病——欠拟合、过拟合、震荡——各跑一次,把图存档
  3. 达到"给你一张曲线图,30 秒说出它得了什么病、该开什么药"的水平

核心知识

1. 三种病的曲线指纹

病 曲线长相 病因 药方
欠拟合 train 高且不再降 模型太小/轮数太少 加大模型/多训/加特征
过拟合 train 持续降,val 先降后升(剪刀差) 模型背题了 更多数据/增强/正则化/早停
震荡(lr 太大) 上下乱跳甚至 NaN 步子太大 减小学习率

2. 为什么必须画 val 线

只看 train loss 永远觉得"一切正常"——过拟合的信号只出现在 val 线上。S2-02 的划分知识在这里兑现。

3. 本机实现要点

  • 每 epoch 结束评一次 val(5000 样本几秒钟,开销可忽略)
  • 结果存 CSV + matplotlib 画 PNG 存档(放进本阶段文件夹)
  • 三种配置用命令行参数切,一次只跑一种

实验任务

任务 1:写带记录的训练脚本(40 分钟)

核心骨架(在 S1-01 训练循环上加两件事:每 epoch 记录 + 最后画图):

# s4_loss_curves.py --config normal|overfit|chaos
#   normal : 5000样本 5epoch lr=1e-3      (健康对照)
#   overfit: 200样本 30epoch lr=1e-3      (背题现场)
#   chaos  : 5000样本 5epoch lr=5         (步子太大)
# 每 epoch 记录 train_loss / val_loss 到列表,最后:
import matplotlib
matplotlib.use("Agg")                       # 无窗口环境也能出图
import matplotlib.pyplot as plt
plt.plot(train_hist, label="train"); plt.plot(val_hist, label="val")
plt.legend(); plt.title(config); plt.savefig(f"loss_{config}.png", dpi=120)

(CSV 也存一份:epoch,train_loss,val_loss——数据比图更值得留档。)

任务 2:跑三种配置,存三张图(20 分钟)

.venv/Scripts/python.exe s4_loss_curves.py --config normal
.venv/Scripts/python.exe s4_loss_curves.py --config overfit
.venv/Scripts/python.exe s4_loss_curves.py --config chaos

任务 3:自我考核(15 分钟)

把三张 PNG 打乱顺序重看,每张 30 秒内说出:什么病 → 证据(哪条线什么形态)→ 开什么药。答案写进观察记录表。

验收标准

衔接下一阶段

会诊病 → S4-02 过拟合与正则化:把"过拟合"这张图当靶子,逐一试药。

小测验(3 题)

答完立即判分,错题给解析;得分存本地。实验与实操题不上网测:回对话找老师验收。