【发布时间】:2016-09-05 14:45:51
【问题描述】:
我正在学习和试验神经网络,希望得到更有经验的人对以下问题的意见:
当我在 Keras 中训练自动编码器('mean_squared_error' 损失函数和 SGD 优化器)时,验证损失逐渐下降。并且验证准确性正在上升。到目前为止一切顺利。
然而,一段时间后,损失不断减少,但准确率突然回落到低得多的低水平。
- 准确度上升非常快并保持高位突然回落是“正常”行为还是预期行为?
- 即使验证损失仍在减少,我是否应该以最大准确度停止训练?换句话说,使用 val_acc 或 val_loss 作为指标来监控提前停止?
查看图片:
更新: 下面的 cmets 为我指明了正确的方向,我想我现在更好地理解了。如果有人能确认以下内容是正确的,那就太好了:
准确度指标衡量 y_pred==Y_true 的百分比,因此仅对分类有意义。
我的数据是真实和二元特征的组合。准确率图上升非常陡峭然后回落,而损失继续下降的原因是因为在 epoch 5000 左右,网络可能正确预测了 +/- 50% 的二进制特征。当训练继续时,在 epoch 12000 左右,对真实和二元特征的预测一起得到改善,因此损失减少,但单独对二元特征的预测不太正确。因此准确率下降,而损失减少。
【问题讨论】:
-
您是否使用 MSE 进行分类任务?
-
这是一个有趣的情节。虽然我没有使用自动编码器的经验,但我想知道这是否只是过度拟合的一些极端情况。您是否尝试过降低网络复杂性(更小或更多规范化)(也许还检查增加的验证子集?)我可以想象,它看起来会有所不同。
-
@MarcinMożejko:我使用的是 mse,但它是自动编码器,而不是分类。
-
取决于计算的损失(不知道它们是否始终相同;MSE 与准确度听起来不同)。并且在监管方面也存在差异(我认为验证会停用 dropout 和 l1/l2 regs)。如果计算量不太大,我会尝试这些更改。一般来说:你可以在调试类似的东西时使用更小的数据集。
-
我也认为,这个情节看起来很奇怪(向上、稳定、向下;相当对称;但我不是专家)。但是训练损失减少(甚至单调)和验证损失增加的一般观察并没有什么特别的。每个太大的神经网络最终都会这样做(它记住了样本)。
标签: neural-network deep-learning keras autoencoder