从一百张错图开始:用Keras把MNIST练习变成诊断实验 | xkmchenmu Blog

从一百张错图开始:用Keras把MNIST练习变成诊断实验

MNIST的价值不在于快速刷出一个准确率数字,而在于用低成本检查数据契约、卷积网络、验证策略和错误分析是否连成闭环。本文从预测失败样本倒推一套可复现的Keras实验流程。

如果一次手写数字实验最后只留下“准确率很高”这句话,那么最有价值的训练环节其实被跳过了。真正能迁移到其他视觉任务的能力,是知道数据怎样进入模型、模型为何在某类笔迹上犹豫,以及一次改动究竟修复了什么。

MNIST规模适中、图像单纯、标签明确,常被当作深度学习的第一道练习。正因为它容易跑通,更适合承担实验管线的体检任务:固定随机性、检查形状、建立基线、观察训练分歧、保存完整产物。与其从网络层数出发,不如先收集一批错误预测,把每张错图当成一条线索。模糊边缘、偏移书写、相似数字和标签疑点会把问题指向不同环节,模型改造也就不再是盲目叠层。

错误样本先于网络结构进入实验记录

错图现象 可能原因 优先核查 不应立刻做的事
整体偏到边缘 位置分布变化 裁剪与中心化 直接增加全连接层
线条很浅或断裂 强度范围异常 像素缩放与采集流程 只延长训练轮数
四与九频繁混淆 局部形状相近 混淆矩阵和代表样本 只看总体准确率
训练正确而验证错误 过拟合或切分偏差 损失曲线与数据隔离 继续压低训练损失

开始训练前,先随机抽取每个类别的若干图像,同时输出标签、最小值、最大值和张量形状。原始灰度通常需要转换为浮点数并缩放到稳定区间,但缩放规则只能由训练集确定,并且在验证集、测试集和未来推理中保持一致。若采用卷积层,输入一般包含批次、高度、宽度和通道四个维度;通道位于前还是后必须和运行环境约定一致。形状错位有时会立即报错,更危险的情况是能够广播或重排后继续运行,却让模型学习到错误布局。

标签也要接受同样严格的检查。使用稀疏交叉熵时保留整数类别,使用普通分类交叉熵时再转成独热向量,两者不要混搭。抽样可视化时应同时展示标签文字,避免图像索引与标签索引在切片或打乱后失去对应。测试集必须留到最后一次独立判断,不能因为调参方便而反复查看,否则它会在无形中变成验证集。

三份数据承担三种不能交换的责任

  • 训练集负责更新权重,可以参与随机打乱和数据增强。
  • 验证集负责选择轮数、阈值与结构,不参与梯度更新。
  • 测试集负责估计最终方案在未见样本上的表现,只在方案冻结后使用。
  • 额外保存一组固定错图索引,用来比较版本之间的行为变化。

对于入门实验,训练集中划出一小部分作为验证集已经足够。重要的不是追求某个固定比例,而是确保不同类别都有代表,并让同一个原始样本只能落入一个集合。如果未来数据包含同一书写者的多张图片,就应按书写者分组切分,而不是按图片随机切分;否则模型可能借助个人笔迹特征得到过于乐观的成绩。

先建立容量受控的卷积基线

一个可靠起点可以由少量卷积层、非线性激活、一次下采样、扁平化或全局汇聚以及十类输出组成。卷积负责在局部区域复用相同的特征检测器,池化或带步长卷积缩小空间尺度,最后的分类头把特征映射为各数字的分数。网络无需一开始就很深;对MNIST而言,过大的模型只会让训练集更快被记住,同时掩盖数据和评估流程中的问题。

在Keras中,顺序模型适合单输入、单输出且层按直线连接的基线。每加入一层,都应记录输出形状与参数量,确认空间尺寸没有意外归零,分类头的最后维度恰好等于类别数。Dropout只在训练阶段随机屏蔽部分激活,推理阶段会自动关闭;它不是修复数据泄漏的工具,也不能替代验证集。批量归一化、数据增强或更复杂连接应当作为后续单变量实验加入,而不是同时堆进第一个版本。

  1. 用一个小批次完成前向传播,确认输出没有非数值。
  2. 在极小数据子集上尝试过拟合,检验模型是否具备学习能力。
  3. 恢复完整训练集,记录每轮训练与验证损失。
  4. 启用基于验证指标的早停,并恢复表现最好的权重。
  5. 冻结方案后才在测试集上做一次最终评估。

“小样本能否被记住”是一项非常实用的故障检测。如果几十张图都无法被模型拟合,问题更可能出在标签、损失、学习率、形状或梯度,而不是泛化能力。相反,训练集迅速接近完美但验证集停滞,才提示容量过大、正则不足或数据分布不一致。把这两种症状分开,远比机械更换优化器有效。

准确率之外至少保留三张诊断表

总体准确率把所有类别和错误后果压成一个平均数。它适合做概览,却不能告诉开发者下一次实验应改哪里。

第一张表是混淆矩阵,用来观察真实类别与预测类别的交叉分布。第二张表按类别列出召回率,回答某个数字有多少被遗漏。第三张表按模型置信度排序保存错误样本,尤其关注“非常自信但预测错误”的图像:它们可能代表异常笔迹、预处理偏差,甚至标签错误。还可以把预测熵较高的样本单独分组,比较模型犹豫与人类辨认困难是否一致。

错图审阅要带着假设,而不是只做图片墙

审阅时可为错误附上原因标签,例如笔画粘连、字符偏移、对比度不足、类别形态相近和疑似错标。标签不必一次准确,它的作用是形成可检验假设。若大量错误来自位置偏移,可以加入轻微平移增强并只比较这一项变化;若集中在低对比度样本,则应先验证输入缩放和采集端,而不是让网络承担修复责任。每次改动都保留旧模型在固定错图集上的预测,才能看见“修好一组、损坏另一组”的回归。

实验编号 唯一改动 主指标 行为证据
B0 小型卷积基线 验证损失 固定错图预测
B1 轻微平移增强 偏移样本召回 边缘笔迹变化
B2 调整正则强度 训练验证差距 高置信错误数量
B3 修改分类头 按类召回 混淆对变化
从一百张错图开始:用Keras把MNIST练习变成诊断实验 - 手写数字错图诊断环

保存的是可重新判断的实验,而不只是权重

一个可交付的实验目录应包含模型结构、权重、类别映射、像素缩放规则、输入形状、随机种子、数据切分依据、训练曲线和评估脚本。只保存权重文件,日后很难判断它期待通道优先还是通道最后,也无法确认推理端是否重复归一化。模型保存后应在一个全新进程中重新加载,用固定样本比较加载前后的概率输出,而不是仅检查文件是否存在。

  • 记录依赖环境与硬件信息,避免同名接口在不同版本下产生差异。
  • 记录最佳轮次而不是只记录最后轮次,防止早停权重被遗漏。
  • 把预处理封装成与训练共用的函数,减少服务端另写一份逻辑。
  • 为输出概率设置基本断言,例如维度正确、总和合理且无非数值。

当这套闭环建立后,MNIST就不再是一道“照着代码跑”的练习。它成为一个成本很低的实验室:可以练习如何提出假设、隔离变量、读懂曲线、审查失败样本和封装推理契约。以后面对更复杂的图像分类任务,数据更脏、类别更多、模型更大,但诊断顺序仍然成立——先确认输入与标签,再证明基线能够学习,接着观察泛化差距,最后让每一次改动都留下可复核的行为证据。

(0)
打赏 支付宝扫一扫 支付宝扫一扫

发表回复

登录后才能评论