神经网络中的过拟合

机器算法验证 Python 张量流 喀拉斯
2022-04-17 08:35:29

我是神经网络的新手。我正在使用 TensorFlow + Keras 对我的神经网络进行建模,以对 12 个徽标进行分类。该模型有 5 个卷积层。

我已经训练了一个神经网络模型并得到了以下结果。

with training,
loss = 0.0877   accuracy = 0.9780

with test data
loss = 0.0976   accuracy = 0.9646
  1. 这个模型好还是过拟合了数据?

  2. 我怎样才能知道模型是否过拟合数据?

在回复的一些帮助后,我设法从张量板数据中绘制了两张图。这有什么好笑的,

  1. val_acc 高于 training_acc
  2. val_loss 低于 training_loss

损失图 精度图

2个回答

如果不了解更多关于模型的信息,也不了解所使用的数据,很难准确而严谨地回答这些问题。除此之外,您提供的值会让人认为它是一个合理的模型,不一定会过度拟合训练数据。

对于您的第二个问题,我的第一条行动始终是绘制每个时期(迭代)的训练和测试准确性,然后看看曲线是如何发展的。我一般希望看到一条测试曲线能遮住训练曲线,总是低一点。这是一张图表,上面有一个简短的解释,摘自斯坦福大学令人惊叹的cs231n课程。

在此处输入图像描述

图片来源

课程主页

所有材料和视频讲座都是免费提供的,这将是您在研究深度学习主题时提高理解力的好地方。

过拟合是逐渐发生的事情,所以有时很难说。此外,模型是否“好”在很大程度上取决于上下文。如果您的模型需要 99% 的准确度才能在生产中使用,那么这些值就不是“好”的。

但是,您显示的训练和测试损失值、准确性对我来说并不表示过度拟合的问题。看到训练值和测试值之间的性能略有下降是正常的。不仅如此,如果测试性能仍然优于任何其他测试性能,训练和测试之间的差异通常是可以接受的。

缺少的一个重要细节是测试数据的大小。报告的准确性只是一个估计值,您的测试集越小,从中得出结论的可靠性就越低。

为了更好地检测过拟合,您可以绘制损失指标与 epoch 数的学习图。如果你看到这样的东西(来自过度拟合的维基百科页面):

典型的过拟合学习图

其中蓝线是您的训练损失,红线是您的测试损失。然后你可以看到,在警告标志之后,过度拟合已经成为一个问题。

这种学习行为,在发生过度拟合之前具有最佳的 epoch 数,是早期停止是训练中常用方法的一个原因。