如何制作用于序列预测的lstm模型

How to make lstm model for sequence prediction

我在 6 小时内每分钟记录一次来自机器的信号。即一台机器的信号长度为6*60 = 360。我的客户已经为每台机器记录了一个月的这些信号。换句话说,每台机器有 360 个长度信号 28 天。我的数据集中有大约2000台机器的数据。

如果您想了解我的数据集的外观,我在下面提到了它的快速概述(注意:每天的每个信号都是 360 度长,如问题中所述)。

machine_num, day1, day2, ..., day28
m1, [12, 10, 5, 6, ...], [78, 85, 32, 12, ...], ..., [12, 12, 12, 12, ...]
m2, [2, 0, 5, 6, ...], [8, 5, 32, 12, ...], ..., [1, 1, 12, 12, ...]
...
m2000, [1, 1, 5, 6, ...], [79, 86, 3, 1, ...], ..., [1, 1, 12, 12, ...]

我的客户需要一个模型来预测未来 3 天每台机器的信号序列。即在第 29 天、第 30 天、第 31 天。换句话说,模型应该学习从第 1 天到第 29 天的序列,并预测接下来的三个序列。

所以,我开始搜索深度学习模型并找到了似乎适合我的问题的模型Seq2Seq

我现在的代码如下

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, RepeatVector, Dense, TimeDistributed
from tensorflow.keras.activations import elu  
hidden_size = 50
seq2seq = Sequential([
    LSTM(hidden_size, input_shape = (input_sequence_length, no_vars)),
    RepeatVector(prediction_length), 
    LSTM(hidden_size, return_sequences = True), 
    Dense(hidden_size, activation = elu)
    TimeDistributed(Dense(1, activation = elu))
])

但是,由于我在深度学习方面的知识有限,我不确定我所做的是否正确。此外,我没有 day_29、day_30 和 day_31 的数据。所以,我也想知道训练部分怎么做?我被这个问题困住了,因为我不清楚如何进行。

如果需要,我很乐意提供更多详细信息。

编辑:

看起来 LSTM 是解决我的问题的潜在模型,因为我没有 day_29、day_30 和 day_31 的训练数据。我想知道 @ESDARII 的过程是 LSTM 中的内置函数还是我们必须在 keras 中从头开始编写它。如果您有任何其他建议,请告诉我您的想法。

你的网络不应该是真正的 seq2seq 网络。

我建议使用简单的 RNN 或 LSTM,其工作原理如下:

它获取从 1 到 J-1 天的所有信号,并预测第 J 天的信号,例如:

如果第一步,它获取第 1 天的信号并要求预测第 2 天的信号,然后在下一步中获取第 1、2 天的信号并要求预测第 3 天的信号,等等,所以当你到达第 28 天,网络拥有最多 28 天的所有信号,并被要求预测第 29 天的信号,等等

通过这种方式,您可以克服没有第 29、30 和 31 天值的事实。因为您的网络将非常擅长预测第 J 天的信号,给定最多 J- 天的信号1.