Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以使用LSTM预测作为下一时间步的输入?_Python_Pytorch_Lstm_Recurrent Neural Network - Fatal编程技术网

Python 是否可以使用LSTM预测作为下一时间步的输入?

Python 是否可以使用LSTM预测作为下一时间步的输入?,python,pytorch,lstm,recurrent-neural-network,Python,Pytorch,Lstm,Recurrent Neural Network,我正在使用LSTM(PyTorch)进行多元时间序列预测。让我们想象一下这种情况:我有两个时间序列,A和B,我想用A和B的先前值(在t之前)预测B的t值。这样的预测效果很好,我的模型得到了很好的结果 但是,如果(在测试期间,在训练之后)我想使用B的预测值作为下一时间步的输入,而不是实际值,该怎么办?例如:我预测B的第一个值,进行一步,将预测值替换为实数,然后再次进行预测。然后我使用两个预测值而不是实际值,依此类推。在某些步骤中,只有预测值会出现在时间序列B中 有没有可能做到这一点?这正是人们通常

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

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


有没有可能做到这一点?

这正是人们通常为机器翻译和文本生成所做的。在这种情况下,LSTM预测词汇表的分布,您选择一个单词,并在下一步将其用作网络的输入。有关更多详细信息,请参阅

重要的一点是,LSTM在两种情况下执行:

  • 用于培训:作为标准序列标签。它是提供的输入,它应该预测未来的一个步骤

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


教师强制收敛速度更快。在测试模式下,您可以使用beam搜索来获得最佳绩效。我使用教师强制方法进行培训。当预测值作为下一时间步的输入时,测试过程中会出现问题。例如,[x1,x2,x3]预测x4,在下一时间步我将使用[x2,x3,x4]预测x5,等等,x3后的值是预测值,不是来自测试数据,但我的lstm不收敛。谢谢回答!这真的提高了我的理解力。但问题在于有点不同的方向。结果我完全按照你的建议做了。问题是,当我对输入使用预测时,例如[x1,x2,x3]预测x4,在下一个时间步我将使用[x2,x3,x4]预测x5,依此类推,x3后的值是预测值,不是来自测试数据,我的lstm不会收敛,但当我只使用测试数据时,一切都很好。我检查了输入的类型,它们在两种情况下都是相同的。