章节摘要:前面四章把对照轴拆开讲。本章用同一数据集把轴再合上。Fashion MNIST:七万张 28×28 灰度服装图,六万训练、一万测试,十类。先把数据契约写清楚——类别名、形状、取值范围——再双侧实现相近容量的多层感知机,并加一个简单卷积作为「换层不换框架」的对照。最后用训练/验证曲线诊断过拟合与欠拟合,做第一轮调参:容量、Dropout、epoch、学习率。验收标准不是刷榜,而是:两侧数字可解释,最佳检查点可加载。
阅读完本章,你应当能够:
金句:对照实战的敌人不是「另一框架更准」,而是「两边预处理根本不是同一道菜」。

MNIST 与 Fashion MNIST 的差异、十类、加载入口、为何适合当第一个分类任务。
Keras Sequential MLP/简单 CNN 与 PyTorch Module 对照,含原文 compile 与 CrossEntropy 约定。
训练对验证曲线、过拟合欠拟合、第一轮调参与检查点。
5.1 当天只做加载与打印,不要训练。shape 与 min/max 写进实验卡片。5.2 先 MLP 双侧都跑完 10 epoch,再决定要不要 CNN。CNN 是架构旋钮,不是「正餐」。5.3 在有验证曲线之后才打开,没有曲线就没有诊断。有人喜欢一上来搜「Fashion MNIST Keras 99%」,那些数字往往来自更重的网络或把测试当验证。本课不竞赛,竞赛会破坏对照。
若两侧测试准确率差过五个点,停止调参,回到控制变量清单:预处理、batch、lr、Softmax 次数、是否 shuffle。五个点以内,优先当随机与实现细节,不必为此换主框架。
没有契约就实现,准确率不可比;没有实现就谈调参,曲线是空的。
| 节 | 禁止事项 |
|---|---|
| 5.1 | 不打印 min max 就训练 |
| 5.2 | 五锁未写数字就比框架 |
| 5.3 | 用测试集调参 |
5.1 契约 ──► 5.2 双侧跑通 ──► 5.3 读曲线再动旋钮
本章不要当「终于可以不对照、专心刷分」的章节。恰恰相反:前面拆开的五条轴必须同时在场。数据契约错了,准确率不可比;Softmax 约定错了,一侧会学傻;批次和打乱策略错了,曲线形状会骗人;忘记保存最佳点,调参无法回退。所以 5.1 看起来像在重复数据集说明书,其实是在签对照合同。合同没签就写 CNN,等于无对照的两次作业。
实现节只保留两种架构:原文 MLP,以及简单卷积。不是因为卷积浅显,而是因为再深就无法归因。残差、注意力、预训练骨干会引入第三套变量:初始化、图像尺寸、算力。本课算力假设是 CPU 或一块入门 GPU 能在分钟级跑完 10 个 epoch。超出这个假设的模型,请换专门的视觉教程,并把本课检查点当「我会走完框架流程」的证书。
分析节的调参清单很短,是故意的。同时改学习率、宽度、Dropout 和卷积,你无法知道哪一件起作用,对照表会写成「我调过了,还是不知道」。早停是第一处方,对齐预处理是第二,CNN 是第三。这个顺序对 Keras 与 PyTorch 同样有效——如果某一侧你只会调 fit 的 epoch、不会在另一侧存 best 权重,说明第 4 章还没互译完成,应退回 4.3 而不是在本章加层。
实现节的代码保持概念性,不等于可以省略形状打印。5.2 的第一件事仍是假批次前向,输出必须是 (batch, 10)。第二件事是一个短循环看到损失低于 ln(10)。第三件事才是 10 个 epoch。把这三道门当成第 1.3 安装验收在数据上的翻版:导入变成加载,加法变成假前向,设备列表变成批次与模型同设备。翻版一旦成为习惯,CNN 出问题你也知道先过门再加层。
分析节禁止使用测试集做旋钮选择。原文有的示例把测试当 validation_data,那是为了少写切分代码。本课允许你「跟着原文跑一遍看 API」,不允许你把那次测试数字写进对外报告当泛化。对外只报告:验证上选出的检查点,在锁定的测试集上评估一次。Keras 与 PyTorch 各一行,字段对齐。这是对照伦理,不是吹毛求疵。
实战章把前面所有契约一次性执行。5.1 签合同,5.2 跑双侧基线,5.3 只开一种药。合同字段包括形状、取值范围、划分方式、类别名只用于显示。基线字段包括容量 128、批次 64、学习率 0.001、十个 epoch、Softmax 次数。调参字段包括诊断类型与只改的那一个旋钮。缺字段的准确率数字,本课视为未完成对照,而不是刷分失败。测试集只在最终检查点上出现一次,两侧各一行写进报告。
本章读完应能交出一张双侧报告,而不是两段互不引用的实验日志。报告里每一行数字都能回溯到契约字段,回溯失败就回去补字段,不要补层。