为什么更多的训练轮次会使我的模型变差?

我的大部分代码基于这篇文章,我要问的问题在这篇文章中也很明显,并且在我的测试中也有体现。这是一个包含LSTM层的序列模型。

Here 这是用大约20个小数据集训练了一个epoch的模型,对真实数据的预测图。

这是另一个图,但这次是用更多数据训练了10个epoch的模型。

enter image description here

是什么导致了这种情况,我该如何解决?另外,我发送的第一个链接在底部也显示了相同的结果——1个epoch效果很好,而3500个epoch效果很差。

此外,当我用更高的数据量进行训练,但只运行1个epoch时,得到的结果与第二个图相同。

是什么可能导致这个问题?


回答:

几个问题:

  • 这个图是训练数据还是验证数据的图?
  • 你认为它更好是因为:
    • 图看起来很酷?
    • 你实际上有更好的“损失”值?
      • 如果是这样,是训练损失吗?
      • 还是验证损失?

酷炫的图表

早期的图表确实看起来很有趣,但仔细观察它:

我清楚地看到预测的谷底在预期数据应该达到峰值的地方

这真的更好吗?这听起来像是一个完全不同步的随机波动,这意味着一条直线实际上比这代表更好的损失值。

仔细看看“训练损失”,这可以确切地告诉你你的模型是否更好。

如果情况是这样,并且你的模型未达到预期的输出,那么你可能需要构建一个更有能力的模型(更多的层,更多的单元,不同的方法等)。但要注意,许多数据集过于随机,无法学习,无论模型有多好。

过拟合 – 训练损失改善,但验证损失变差

如果你实际上有更好的训练损失。好的,那么你的模型确实是在改善。

  • 你在绘制训练数据吗? – 那么这条直线实际上比不同步的波动要好
  • 你在绘制验证数据吗?
    • 验证损失是变好还是变差?

如果你的“验证”损失在变差,那么你的模型就在过拟合。它是在记忆训练数据而不是在学习一般规律。你需要一个能力较弱的模型,或者大量的“dropout”。

通常,存在一个最佳点,即验证损失停止下降,而训练损失继续下降。如果你过拟合,这是停止训练的点。阅读keras文档中的EarlyStopping回调函数的说明。

学习率问题 – 训练损失持续上升

如果你的训练损失在上升,那么你就遇到了真正的问题,要么是bug,要么是某个地方的计算准备不当(如果你使用的是自定义层),要么就是学习率太大

降低学习率(除以10或100),创建并编译一个“新”模型,然后重新开始训练。

其他问题?

那么你需要详细说明你的问题。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注