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

时间:2019-12-15 10:38:58

标签: python keras deep-learning sequence lstm

每6分钟我每分钟都会从机器上记录一次信号。即机器的信号长度为6 * 60 = 360。我的客户已经为每个机器记录了一个月的信号。换句话说,每台机器在28天中有360个长度信号。我的数据集中有大约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的数据。因此,我也想知道如何进行培训?我对这个问题非常困惑,因为我不清楚如何进行。

很高兴在需要时提供更多详细信息。

编辑:

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

1 个答案:

答案 0 :(得分:1)

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

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

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

如果第一步是获取第1天的信号并要求预测第2天的信号,则下一步获取第1天,第2天的信号并要求预测第3天的信号,依此类推,因此当您达到在第28天,网络将收到所有信号,直到28天,并要求预测第29天的信号,依此类推。

这样,您可以克服以下事实:在第29天,第30天和第31天没有值。因为在给定J-1天之前的信号的情况下,您的网络将非常擅长预测J天的信号。