gpt4 book ai didi

python - 神经网络训练验证损失的解释

转载 作者:行者123 更新时间:2023-11-30 22:06:54 25 4
gpt4 key购买 nike

我已经训练了一个用于时间序列预测的 LSTM 模型。我使用了提前停止方法,耐心等待 150 轮。我使用了 0.2 的 dropout,这是训练和验证损失的图: enter image description here

早期停止方法在 650 个 epoch 后停止训练,并在 460 个 epoch 左右保存最佳权重,此时验证损失最佳。

我的问题是:训练损失总是高于验证损失是否正常?我知道,如果情况相反(火车上方的验证损失),那将是过度拟合的迹象。但这个案子又如何呢?

编辑:我的数据集是一个具有每小时时间频率的时间序列。它由35000个实例组成。我已将数据分为 80% 的训练数据和 20% 的验证数据,但按时间顺序排列。例如,训练将包含 2017 年初之前的数据,验证将包含 2017 年到年底的数据。我通过对 15 天的数据进行平均来创建此图,结果如下:enter image description here

所以也许原因正如您所说,验证数据有一个更简单的模式。我该如何解决这个问题?

最佳答案

对于大多数情况,验证损失应该高于训练损失,因为模型可以访问训练集中的标签。事实上,训练新网络的一个好习惯是使用一小部分数据,看看训练损失是否可以收敛到 0(完全过拟合训练集)。如果不是,则意味着该模型在某种程度上无法记住数据。

让我们回到你的问题。我认为验证损失小于训练损失的观察结果是发生的。 但这可能不是因为您的模型,而是因为您如何分割数据。考虑数据集中有两种类型的模式(A 和 B)。如果你的分割方式是训练集同时包含模式A和模式B,而小验证集只包含模式B。在这种情况下,如果B更容易被识别,那么你可能会得到更高的训练损失。

在一个更极端的例子中,模式 A 几乎不可能被识别,但数据集中只有 1%。并且模型可以识别所有模式B。如果验证集恰好只有模式B,那么验证损失会更小。

正如 alex 提到的,使用 K-fold 是一个很好的解决方案,可以确保每个样本都用作验证数据和训练数据。此外,打印出混淆矩阵以确保所有标签相对平衡是另一种可以尝试的方法。

关于python - 神经网络训练验证损失的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52584256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com