【发布时间】:2020-03-18 03:25:43
【问题描述】:
我的 Keras-Tensorflow 模型的行为如下图所示。我可以看到训练和验证损失表现良好,但训练和验证准确性非常不正常。我认为验证数据集可能比训练集容易。因此,我得到了很高的验证准确性。我期待着您的建议。
【问题讨论】:
标签: python-3.x tensorflow machine-learning keras deep-learning
我的 Keras-Tensorflow 模型的行为如下图所示。我可以看到训练和验证损失表现良好,但训练和验证准确性非常不正常。我认为验证数据集可能比训练集容易。因此,我得到了很高的验证准确性。我期待着您的建议。
【问题讨论】:
标签: python-3.x tensorflow machine-learning keras deep-learning
从训练期间的指标和损失的角度来看,您在此处显示的图看起来很正常。
通常会看到小的峰值,因为我们使用的是 batch_training。此外,当您看到这些损失峰值(损失增加)时,准确度也会降低。
因此,剧情本身无需担心。
但是,您对验证准确性的观察确实是明智的:大多数情况下,发生这种情况是因为验证数据集更容易。
处理此问题的一种方法是使用交叉验证,以查看此现象是否仍然存在。
交叉验证是一种模型验证技术,其中,在每次迭代/折叠中,数据集的不同部分都会保留用于训练和验证。下图总结了我刚刚写的内容。
发生这种现象的另一个原因是由于称为 Dropout 的正则化技术。您可能知道,在训练阶段,在某一层应用的 dropout 意味着一定百分比的神经元的随机关闭/停用。这反过来会惩罚训练集的性能,但同时也降低了过度拟合的风险。因此,很多时候在训练过程中使用 Dropout 时,可能会出现验证准确率较大的情况,因为在验证预测过程中,Dropout 是没有开启的。
【讨论】: