gpt4 book ai didi

keras - 我需要有状态或无状态的 LSTM 吗?

转载 作者:行者123 更新时间:2023-12-03 15:57:18 26 4
gpt4 key购买 nike

我正在尝试为 Keras 中的时间序列预测制作 LSTM。特别是,一旦模型被训练,它应该预测看不见的值。时间序列的可视化如下所示。
Data

该模型在蓝色时间序列上进行训练,并将预测与橙色时间序列进行比较。

对于预测,我想取训练数据的最后 n 个点(其中 n 是序列长度),运行一个预测,并使用这个预测进行连续(第二个)预测,即:

prediction(t+1) = model(obs(t-1), obs(t-2), ..., obs(t-n))
prediction(t+2) = model(prediction(t+1), obs(t-1), ..., obs(t-n))

我试图让它发挥作用,但到目前为止没有成功。如果我应该使用有状态或无状态模型,以及序列长度的值可能是多少,我感到茫然。有任何人对此有经验吗?

我已经阅读并尝试了各种教程,但没有看到适用于我的数据类型。

因为我想运行连续预测,所以我需要一个有状态模型来防止每次调用 model.predict 后 keras 重置状态,但是用 1 的批量大小进行训练需要永远......或者有没有办法规避这个问题?

最佳答案

当整个序列在形成输出中起作用时,使用有状态 LSTM。举个极端的例子;您可能有 1000 长度的序列,该序列的第一个字符是实际定义输出的字符:

有状态
如果您要将其批处理为 10 x 100 长度的序列,那么使用有状态 LSTM,批处理中序列之间的连接(状态)将被保留,并且它将(有足够的示例)学习第一个字符的关系对输出。实际上,序列长度无关紧要,因为网络的状态在整个数据范围内保持不变,您只需将其批处理作为提供数据的一种方式。

无国籍
在训练期间,每个序列后都会重置状态。所以在我给出的例子中,网络不会知道它是定义输出的 1000 长度序列的第一个字符,因为它永远不会看到长期依赖,因为第一个字符和最终输出值处于单独的序列中,并且状态不保留在序列之间。

摘要
您需要确定的是,在您的时间序列结束时是否可能存在数据依赖性,并受到开始时可能发生的事情的影响。

我想说的是,这种长期依赖关系实际上非常罕见,您可能更好的做法是使用无状态 LSTM,但将序列长度设置为超参数,以找出哪些序列长度对数据建模最好,即提供最准确的验证数据。

关于keras - 我需要有状态或无状态的 LSTM 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52027278/

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