验证准确度大于 cnn 中的训练准确度

数据挖掘 机器学习 美国有线电视新闻网 准确性 过拟合 python-3.x
2022-03-07 05:17:31

在此处输入图像描述我以 80:20 的比例拆分了我的训练集,并开发了一个 dropout 为 0.5 的 cnn 模型。我得到了 98% 的准确率。但验证准确度仍然高于训练准确度。这有什么问题吗?会不会导致过拟合?如果是,那为什么我的准确率是 98%?下图。红线是验证准确率,蓝色是训练准确率。

2个回答

正如@Suren 所避免的那样,由于类在训练和验证集上的分布,您的验证准确度可能高于您的训练准确度。如果训练集包含较高比例的特定类,并且验证类也包含该特定类的示例,那么您当然会看到验证准确度很高。

建议是平衡训练、验证和集合的类。您可以进行这种数据扩充,因为您可以人为地增加示例的数量,而不是您已经拥有的数据。看看这篇论文,它评估了使用数据增强的不同类平衡方法对 CNN 泛化性能的影响: https ://arxiv.org/pdf/1710.05381.pdf

正如@shepan6 所提到的,这可能是因为您在验证集中的班级平衡。您应该在训练集和验证集上打印出混淆矩阵。您可能会发现一个高错误类别在您的验证集中的代表性不足。您可能还会发现您的算法经常混淆两个类。例如,对于 MNIST,3 和 8 经常被混淆,因为它们在编写时看起来很相似。使用此示例,如果您的验证集中没有很多 3 和/或 8,那么验证集中的准确度将高于测试集中。

尽管 950 个样本的 1% 差异仅为 9.5 个样本,但从 97% 到 98% 的变化可能不仅仅是随机性。n = 950 和 p = 0.97 的二项式大于或等于 950*0.98=931 的概率约为 3.7%,因此在统计上这是一个不错的跳跃。(这里我忽略了来自训练集准确度测量不确定性的随机性,但是对于 3800 个样本,没有什么可担心的,尤其是在验证误差普遍上升的情况下。)

当然,您可能还想检查您的验证代码是否存在错误。也许您只是交换了训练集和验证集。

最后,您可能已经过度调整您的算法以在验证集上表现良好,并且您可能需要考虑收集新的验证数据(如果可能)。