训练损失改善但验证收敛早

时间:2021-01-03 11:50:12

标签: python tensorflow deep-learning neural-network convergence

我正在使用 TensorFlow 创建一个 CNN,在训练时,我发现训练数据集仍在改进(即损失仍在减少),而测试/验证数据集已经收敛并且不再改进。 (下附学习曲线图)

有谁知道为什么会出现这种情况,我该如何解决它,让验证损失随着训练一起减少?将不胜感激!

我的模型学习曲线图:

enter image description here

2 个答案:

答案 0 :(得分:0)

这意味着您正在达到架构的极限,训练损失将不断减少(这称为过度拟合),最终会增加验证损失,更改参数或考虑更改您的层(添加、删除等)。 ),甚至可以研究改变数据集的方法。

不久前当我遇到这种情况时,我在我的 CNN 架构中添加了一个 LSTM 层,并结合了 K-means 验证,这不是演练,您需要针对您的具体问题解决这个问题,祝您好运。

>

答案 1 :(得分:0)

损失的情节非常典型。您的模型似乎表现非常好,MSE 损失非常低。在这一点上,您基本上已经达到了模型性能的极限。可能有帮助的一件事是使用可调整的学习率。可以设置 Keras 回调 ReduceLROnPlateau 来监控验证损失。如果验证损失未能减少“耐心”数量的时期,则学习率将减少一个因子“因子”,其中因子是小于 1 的数字。文档是 here. 您可能还想使用 Keras EarlyStopping 回调。此回调可以设置为监视验证损失并停止训练,如果它未能减少“耐心”次数的 epoch。如果您设置 restore_best_weights=True ,它将使您的模型具有在具有最低验证损失的时期中使用的权重。这将防止您的模型返回过拟合模型。我推荐的代码如下所示

rlronp=f.keras.callbacks.ReduceLROnPlateau(monitor="val_loss", factor=0.5, patience=1)
    

estop=tf.keras.callbacks.EarlyStopping(monitor="val_loss",patience=3,restore_best_weights=True)
callbacks=[rlronp, estop]

在 model.fit 中包含 callbacks=callbacks。我怀疑上述两种方法都不会提供太大的改进。您可能还必须尝试对模型进行一些更改。添加一个 Dropout 层可能在一定程度上有助于减少过拟合,就像包括正则化一样。相关文档是 here.。当然,获取更大数据集的标准方法也可能有所帮助,但并不总是容易实现。如果您正在处理图像,您可以尝试使用 Keras ImageDataGenerator 或 Tensorflow Image Augmentation 层进行图像增强。相关文档是 here.。我发现对图像有帮助的一件事是将图像裁剪到感兴趣的区域 (ROI)。例如,如果您在进行人脸识别,将图像裁剪为人脸会大有帮助。