为什么更多的纪元会让我的模型变得更糟?

Car*_*n P 0 python machine-learning lstm keras tensorflow

我的大部分代码都是基于这篇文章,我所问的问题在那里很明显,而且在我自己的测试中也是如此。它是一个具有 LSTM 层的顺序模型。

这里下面是对来自模型的真实数据的预测,该模型是使用一个时期的大约 20 个小数据集进行训练的。

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

在此输入图像描述

造成这种情况的原因是什么以及如何解决?另外,我发送的第一个链接在底部显示了相同的结果 - 1 epoch 效果很好,而 3500 epoch 则很糟糕。

此外,当我针对更高的数据计数但只有 1 个时期运行训练课程时,我得到了与第二个图相同的结果。

什么可能导致此问题?

Dan*_*ler 5

几个问题:

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

酷图

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

我清楚地看到巨大的预测山谷,其中预期数据应该是峰值

这真的更好吗?这听起来像是完全异相的随机波,这意味着直线确实代表比这更好的损失。

看一下“训练损失”,这肯定可以告诉你你的模型是否更好。

如果是这种情况,并且您的模型没有达到所需的输出,那么您可能应该制作一个功能更强大的模型(更多层、更多单元、不同的方法等)。但请注意,无论模型有多好,许多数据集都太随机而无法学习。

过度拟合 - 训练损失变得更好,但验证损失变得更糟

万一你实际上有更好的训练损失。好的,所以你的模型确实变得更好了。

  • 您正在绘制训练数据吗?- 那么这条直线实际上比异相波更好
  • 您正在绘制验证数据吗?
    • 验证损失发生了什么?更好或更差?

如果你的“验证”损失越来越严重,那么你的模型就过度拟合了。它是记住训练数据而不是一般性地学习。你需要一个能力较差的模型,或者大量的“dropout”。

通常,存在一个最佳点,验证损失停止下降,而训练损失持续下降。如果你过度拟合,这就是停止训练的关键点。阅读有关EarlyStoppingkeras 文档中有关回调的信息。

学习率不佳 - 训练损失无限增加

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

降低学习率(除以 10 或 100),创建并编译“新”模型并重新启动训练。

另一个问题?

然后你需要正确地详细说明你的问题。