我的Keras-Tensorflow模型表现如下的图片所示。我可以看到训练和验证损失表现良好,但训练和验证准确率却相当异常。我认为验证数据集可能比训练集容易得多。因此我得到了较高的验证准确率。我期待您的宝贵建议。
回答:
您展示的图表从训练期间的指标和损失的角度来看是正常的。
使用批量训练时,出现小幅波动是很常见的。此外,当您看到损失中的这些波动(损失增加)时,准确率也会随之下降。
因此,图表本身没有什么可担心的。
然而,您关于验证准确率的观察确实是有道理的:大多数情况下,这是因为验证数据集比较容易。
解决这个问题的办法之一是使用交叉验证,看看这种现象是否仍然存在。
交叉验证是一种模型验证技术,在每次迭代/折叠中,数据集的不同部分被保留用于训练和验证。下图总结了我刚刚所说的内容。
这种现象发生的另一个原因是使用了称为Dropout的正则化技术。如您所知,在训练阶段,某个层应用Dropout意味着随机关闭/停用一定百分比的神经元。这反过来会惩罚训练集上的表现,但同时也会降低过拟合的风险。因此,许多时候在训练中使用Dropout时,可能会出现验证准确率更高的情况,因为在验证时的预测中Dropout并未启用。