【问题标题】:Is it possible to use LSTM predictions as inputs for next time steps?是否可以使用 LSTM 预测作为下一个时间步的输入?
【发布时间】:2020-07-30 14:37:05
【问题描述】:

我正在使用 LSTM(在 PyTorch 中)进行多元时间序列预测。让我们想象一下这种情况:我有 2 个时间序列,A 和 B,我想使用 A 和 B 的先前值(在 t 之前)预测 B 的 t 值。这样的预测效果很好,我的模型得到了很好的结果。

但是如果(在测试期间,训练之后)我想使用 B 的预测值作为下一个时间步的输入而不是实际值,该怎么办?例如:我预测B的第一个值,迈出一步,将预测值代替真实值,然后再次进行预测。然后我使用两个预测值而不是真实的两个,依此类推。在某些步骤中,只有预测值会在时间序列 B 中。

有没有可能做到这一点?

【问题讨论】:

  • Teacher Forcing 收敛更快。在测试模式下,您可以使用波束搜索以获得最佳性能
  • 在培训期间,我使用教师强制方法。当预测值作为下一个时间步的输入时,测试期间会出现问题。例如。 [x1, x2, x3] 预测 x4,在下一个时间步我将使用 [x2, x3, x4] 预测 x5,依此类推,x3 之后的值是预测,不是来自测试数据,但我的 lstm 不收敛。

标签: python pytorch lstm recurrent-neural-network


【解决方案1】:

这正是人们为机器翻译和文本生成所做的一般工作。在这种情况下,LSTM 预测词汇表的分布,您选择一个词并将其用作下一步网络的输入。详情请见PyTotrch tutorial on machine translation

重要的一点是 LSTM 以两种方式执行:

  • 用于训练:作为标准序列标记。它提供了输入,它应该预测未来的一步。

  • 对于推理:它逐渐生成新样本并将它们用作下一个输入。在 PyTorch 中,这需要使用显式的 for 循环来实现。

【讨论】:

  • 感谢您的回答!它确实提高了我的理解。但问题在于有点不同的方向。事实证明,我完全按照你的建议去做。问题是当我对输入使用预测时,例如[x1, x2, x3] 预测 x4,在下一个时间步我将使用 [x2, x3, x4] 预测 x5,依此类推,x3 之后的值是预测,不是来自测试数据,我的 lstm 不收敛,但是当我只使用测试数据时,一切都很好。我检查了输入的类型,两种情况都相同。
猜你喜欢
  • 2020-07-21
  • 2019-06-24
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 2021-09-08
  • 1970-01-01
  • 2020-04-10
相关资源
最近更新 更多