← 返回文章

实验方法 / 7 分钟

验证集不是测试集

让数据划分、训练曲线和文字结论各自守住证据边界。
实验证据机器学习

名称决定结论边界

验证集用于训练过程中的模型选择和调参。测试集应尽量留到最终评估。如果训练过程中反复查看一份数据的准确率,并根据它选择模型或修改参数,这份数据承担的就是验证角色。

这个区别看起来只是名称,实际会影响结论能走多远。验证准确率可以说明某个训练设置下的模型选择依据,但不能自动变成独立测试结果。

先记录数据怎样被切分

在 CNN 结构对照项目中,CIFAR-10 训练数据被划分为 45,000 张训练样本和 5,000 张验证样本,并保留 10,000 张测试样本。划分使用固定随机种子,训练流程记录了优化器、学习率、权重衰减和训练轮数。

这些设置让训练曲线有了上下文。曲线里的 validation accuracy 仍然是验证指标,即使代码里同时存在测试 DataLoader,只要没有执行并记录独立测试评估,就不能发布测试准确率。

项目页面也要遵守同一规则

智图寻宝项目记录了 6,214 张验证图片上的结果,包括 99.32% 验证准确率和 99.04% macro F1。它们是可核对的验证指标,所以项目卡明确写 VAL ACC,没有把它缩写成模糊的“模型准确率”。

同样,U-Net 的 0.008605 被描述为最佳验证损失。损失数值只有在数据划分、损失函数和训练设置明确时才有意义。

图表至少回答四个问题

发布一条训练曲线之前,我会检查它是否能回答:

  1. 数据来自训练集、验证集还是测试集。
  2. 横轴代表 epoch、step 还是其他单位。
  3. 纵轴是 accuracy、loss 还是另一个指标。
  4. 曲线对应哪个模型和哪组训练设置。

如果这些信息缺失,一张看起来完整的图仍然难以复现,也容易被误读。

结果表述要和证据一一对应

比较 CNN、Inception 和 ResNet 时,可以描述验证曲线在特定设置下的差异,但不能据此声称某种结构普遍最好。模型结构只是实验变量之一,训练轮数、数据增强、优化器和随机种子都可能改变观察结果。

诚实地缩小结论范围并不会削弱项目。相反,它让读者知道哪些内容来自代码,哪些来自验证记录,哪些仍需要独立测试。