【问题标题】:How to make lstm model for sequence prediction如何制作用于序列预测的lstm模型
【发布时间】:2020-04-08 02:47:50
【问题描述】:

我有 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 的数据。所以,我也想知道如何做培训部分?我被这个问题困住了,因为我不知道如何继续。

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

编辑:

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

【问题讨论】:

    标签: python keras deep-learning sequence lstm


    【解决方案1】:

    你的网络不应该是一个 seq2seq 网络。

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

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

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

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

    【讨论】:

    • 非常感谢您的出色回答。如果你能告诉我如何用 python 做一个,那就太好了。期待您的来信:)
    猜你喜欢
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 2022-07-28
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 2019-02-23
    相关资源
    最近更新 更多