【问题标题】:LSTM Keras API predicting multiple outputsLSTM Keras API 预测多个输出
【发布时间】:2018-02-16 13:05:01
【问题描述】:

我正在训练一个 LSTM 模型,其输入包含 50 个步骤的 3 个不同特征的序列,如下所示:

#x_train
[[[a0,b0,c0],.....[a49,b49,c49]],
  [a1,b1,c1]......[a50,b50,c50]],
  ...
  [a49,b49,c49]...[a99,b99,c99]]]

使用以下因变量

#y_train
[a50, a51, a52, ... a99]

下面的代码仅用于预测 a,如何让它在给定时间步预测并返回 [a,b,c] 的向量?

def build_model():
model = Sequential()

model.add(LSTM(
    input_shape=(50,3),
    return_sequences=True, units=50))
model.add(Dropout(0.2))

model.add(LSTM(
    250,
    return_sequences=False))
model.add(Dropout(0.2))

model.add(Dense(1))
model.add(Activation("linear"))

model.compile(loss="mse", optimizer="rmsprop")
return model

【问题讨论】:

  • 您是否尝试过更改网络以使标签为 [[a50, b50, c50], [a51, b51, c51], ... [a99, b99, c99]]?跨度>
  • txizzle,我不确定你的意思,ax、bx、cx 只是我用于离散时间序列数据点的占位符。

标签: machine-learning keras lstm rnn


【解决方案1】:

每一层的输出取决于它有多少单元格/单元/过滤器。

您的输出有 1 个特征,因为 Dense(1...) 只有一个单元格。

只需将其设为Dense(3...) 即可解决您的问题。


现在,如果您希望输出具有与输入相同的时间步数,那么您需要在所有 LSTM 层中打开 return_sequences = True

LSTM 的输出是:

  • (批量大小,单位)-return_sequences=False
  • (批量大小、时间步长、单位)-return_sequences=True

然后,您在后续层中使用TimeDistributed 层包装器来工作,就好像它们也有时间步长一样(它基本上会保留中间的维度)。

def build_model():
    model = Sequential()

    model.add(LSTM(
        input_shape=(50,3),
        return_sequences=True, units=50))
    model.add(Dropout(0.2))

    model.add(LSTM(
        250,
        return_sequences=True))
    model.add(Dropout(0.2))

    model.add(TimeDistributed(Dense(3)))
    model.add(Activation("linear"))

    model.compile(loss="mse", optimizer="rmsprop")
    return model

【讨论】:

  • 太棒了,做到了!对 TimeDistributed 包装器感到好奇,在最终输出中返回全套时间步长的用例是什么?这和在输入数据集上运行预测不一样吗?
  • 这一切都取决于你想做什么。想象一个案例,你试图判断一个人在整部电影中的感受。每个电影帧都是一个时间步长,您希望对所有步长进行分类,以便对一个人的感觉进行时间分布的演变。但是你永远无法从一个单独的帧中猜出一种感觉。这就是 LSTM 层的作用,分析每个时间步并跟踪正在发生的事情。
  • 有没有办法产生大于return_sequences 的输出?换句话说,我会提前多个时间步预测特征。是否可以使用您的答案中编写的 keras 模型?或者它最多只能返回一个输出,其大小与循环结构中采用的时间步长窗口一样大?
  • 你可以看看这里的例子stateful = True预测未来:stackoverflow.com/questions/38714959/understanding-keras-lstms/…
猜你喜欢
  • 2021-10-02
  • 2018-09-14
  • 2018-05-15
  • 1970-01-01
  • 2017-12-30
  • 2018-03-12
  • 2021-08-13
  • 2018-04-15
  • 1970-01-01
相关资源
最近更新 更多