pytorch中的多步时间序列LSTM网络

时间:2019-04-04 09:59:57

标签: lstm pytorch recurrent-neural-network

我在pytorch中遇到LSTM功能的问题。我正在使用LSTM神经网络来预测某个值。输入是多维的(多个要素),输出应是一维的(仅需要预测一个要素)。我想提前预测1-6个时间步。我也想使用多个时间步输入。现在,我必须采用不同的方式来实现这一目标,但似乎都没有。

第一个方法是制作6个不同的多对一网络,每个网络都提前预测另一个时间步长1-6h,但是在预测多个时间步长时仍使用递归结构(请参见图片)(因此不仅要转移目标数据1-6小时)。另一个选择是多对多神经网络,我认为这也很好。 (另请参见图片)

我的输入现在看起来像:首先将同一时间步长上的不同参数进行分组,然后每次将要在预测中使用的所有时间步长进行分组(回头看)

tensor([[[-0.2800, -0.6381, -0.1033, -0.4941,  0.0016],
         [-0.3159,  0.1378, -0.1010, -0.4529,  0.0016],
         [-0.2800,  0.1378, -0.0963, -0.4706,  0.1150],
         ...,
         [-0.5673, -0.2149, -0.0598, -0.4000,  0.2850],
         [-0.3518, -0.4265, -0.0669, -0.3646,  0.3417],
         [-0.2440, -0.0738, -0.0657, -0.3823,  0.2283]],

        [[-0.3159,  0.1378, -0.1010, -0.4529,  0.0016],
         [-0.2800,  0.1378, -0.0963, -0.4706,  0.1150],
         [-0.7469,  0.1731, -0.0845, -0.4176,  0.3417],
         ...,
         [-0.3518, -0.4265, -0.0669, -0.3646,  0.3417],
         [-0.2440, -0.0738, -0.0657, -0.3823,  0.2283],
         [-0.1722, -0.5323, -0.0610, -0.4117,  0.2283]],

        [[-0.2800,  0.1378, -0.0963, -0.4706,  0.1150],
         [-0.7469,  0.1731, -0.0845, -0.4176,  0.3417],
         [-0.7829, -0.4265, -0.0692, -0.4176,  0.4550],
         ...,
         [-0.2440, -0.0738, -0.0657, -0.3823,  0.2283],
         [-0.1722, -0.5323, -0.0610, -0.4117,  0.2283],
         [-0.1363, -0.8850, -0.0669, -0.4294,  0.1150]],

        ...,

        [[-0.3518,  0.2083, -0.1386,  0.8479, -0.1684],
         [-0.3518,  0.4552, -0.1398,  0.9480,  0.0016],
         [-0.2800, -0.4265, -0.1398,  0.9126,  0.0583],
         ...,
         [-1.0343, -0.1443, -0.1433,  0.8479,  0.0016],
         [-0.8906,  0.3847, -0.1445,  1.0304, -0.2251],
         [-0.7829, -0.0385, -0.1433,  1.0127, -0.1117]],

        [[-0.3518,  0.4552, -0.1398,  0.9480,  0.0016],
         [-0.2800, -0.4265, -0.1398,  0.9126,  0.0583],
         [-0.4596, -0.9202, -0.1410,  0.8479,  0.1150],
         ...,
         [-0.8906,  0.3847, -0.1445,  1.0304, -0.2251],
         [-0.7829, -0.0385, -0.1433,  1.0127, -0.1117],
         [-0.8547,  0.2436, -0.1422,  0.9715, -0.0550]],

        [[-0.2800, -0.4265, -0.1398,  0.9126,  0.0583],
         [-0.4596, -0.9202, -0.1410,  0.8479,  0.1150],
         [-0.6392, -0.5323, -0.1422,  0.8655,  0.0016],
         ...,
         [-0.7829, -0.0385, -0.1433,  1.0127, -0.1117],
         [-0.8547,  0.2436, -0.1422,  0.9715, -0.0550],
         [-0.9984, -0.0033, -0.1422,  0.8597,  0.0583]]])

输出看起来像,其中将不同的时间步长1-6h进行了分组。我可以轻松更改它。

tensor([[[ -7.],
         [ -9.],
         [-11.],
         [-13.],
         [-13.]],

        [[ -9.],
         [-11.],
         [-13.],
         [-13.],
         [-10.]],

        [[-11.],
         [-13.],
         [-13.],
         [-10.],
         [ -9.]],

        ...,

        [[-12.],
         [-10.],
         [-10.],
         [-10.],
         [ -9.]],

        [[-10.],
         [-10.],
         [-10.],
         [ -9.],
         [ -8.]],

        [[-10.],
         [-10.],
         [ -9.],
         [ -8.],
         [-10.]]])

现在我不知道如何使用LSTM结构进行多个时间步长预测。输出层应该是线性的。

批量大小对我来说并不重要,我认为目前可以。

0 个答案:

没有答案