
本课学习重点
- 训练集
- 验证集
- 测试集
先从一个具体问题出发
训练题全会,换一道题却答错
一个猫狗分类模型在训练图片上达到 99% 准确率,遇到新图片却只有 72%。它可能记住了训练图片的细节,没有学到能迁移到新图片的规律。
LEARNING TO LEARN
区分训练集、验证集和测试集,通过互动学习曲线理解过拟合、早停与调参。
这一课要回答:模型训练与评估:过拟合、验证集和调参建立必要的基础概念
先认识三个关键词
先看每个概念负责什么,再把它们放回完整流程。无需先记公式,先建立直觉。
用来学习参数
模型反复查看这些带答案的样本,并根据损失更新权重。
用来选择方案
不参与参数更新,用于比较网络结构、学习率和训练轮数。
用来做最终检查
方案确定后再使用,避免反复查看造成乐观偏差。
把概念连接成流程
从数据到可信结果
按顺序走一遍,观察每一步的输入、动作与输出。
- 01
先划分数据
在训练前固定训练、验证和测试范围。
- 02
只在训练集学习
每轮更新参数并记录训练损失。
- 03
用验证集选方案
关注新数据表现,必要时早停或调参。
- 04
最后使用测试集
只报告最终确定方案的一次独立结果。
互动实验 · 动手建立直觉
拖动训练轮数,寻找合适停止点
训练损失通常持续下降;验证损失可能先降后升。两条曲线开始分离,是过拟合的重要信号。
训练损失 0.48验证损失 0.54
验证损失接近低点,这是较合适的停止区间。
知道模型能做什么,也知道不能做什么
三个容易忽略的边界
技术名词描述的是一种计算方法。真正用于产品时,还要检查数据、指标、成本与使用场景。
高训练分数不代表泛化
真正关心的是模型面对未见数据的表现。
验证集也会被间接适应
反复根据同一验证集调参,仍可能对它产生过拟合。
先排查数据泄漏
同一对象或未来信息进入不同数据集,会让评估虚高。
可选代码实践 · 逐行理解
记录训练与验证损失
代码只呈现本课最关键的计算路径。先根据注释理解每一步,再放进完整项目。
course-06.py
best_loss = float("inf")
for epoch in range(30):
model.train()
train_one_epoch(model, train_loader, optimizer)
model.eval()
val_loss = evaluate(model, val_loader)
if val_loss < best_loss:
best_loss = val_loss
save_model(model)- 步骤 1
model.train() 开启训练状态,随后只使用训练数据更新参数。
- 步骤 2
model.eval() 切换到评估状态,验证阶段不更新权重。
- 步骤 3
只保存验证损失更低的模型,相当于保留当前最佳检查点。
知识检查与课程总结
确认你能把概念讲清楚
完成三个问题,再用五句话回顾本课主线。
已回答 0 / 3 题 · 当前答对 0 题
- 训练集学习参数,验证集选择方案,测试集做最终评估。
- 泛化能力比单纯的训练成绩更重要。
- 训练与验证曲线能帮助识别欠拟合和过拟合。
- 早停、正则化和数据增强可以缓解过拟合。
- 调参前应先检查数据划分和数据泄漏。
下一课 · COURSE 07
CNN:计算机如何看懂图片
进入计算机视觉,观察局部卷积窗口如何从像素中提取特征。