【问题标题】:Output_shape of lstm modellstm模型的输出形状
【发布时间】:2017-10-17 19:35:48
【问题描述】:

我有 1025643 个条目和 72 个特征/属性的测试数据。我已经用形状为 (245, 30, 72) 的输入数据 trainX 和形状为 (245, ) 的 trainY 训练了一个 lstm。另请注意,我已将回溯指定为 30 步,因此 trainX 的形状为 (245, 30, 72)。

如果我这样做了,现在在训练模型之后

model.output_shape

输出是:

(无,1)

我的理解是,它将对测试集进行一步预测。但我希望它是 30 行预测,一个用于未来的每个步骤,用于测试集中的每一行(比如输出在我的情况下应该具有 (1025643 , 30, 1) 的形状)。我需要对数据形状进行哪些更改?我正在使用带有 tensorflow 后端和 python 3.6 的 keras lstm。

我的模型的代码是:

model = Sequential()
model.add(LSTM(100, return_sequences=True, input_shape = (trainX.shape[1], trainX.shape[2])))
model.add(LSTM(100, return_sequences = False))
model.add(Dense(1, activation='linear'))

model.compile(loss='mse', optimizer='adam')

model.fit(trainX, trainY, epochs=50, shuffle=False, verbose=1)

【问题讨论】:

    标签: python-3.x time-series keras lstm forecasting


    【解决方案1】:

    最后一个 LSTM 层上的return_sequences=False 参数导致 LSTM 仅在所有 30 个时间步之后才返回输出。如果您想要 30 个输出(每个时间步之后一个),请在最后一个 LSTM 层上使用 return_sequences=True,这将导致输出形状为 (None, 30, 1)

    有关 Keras 中 LSTM 的更详细说明,请参阅here

    【讨论】:

    • 非常感谢 :) 现在我必须为测试数据中的每个样本设置 30 的时间步长以使其具有形状 (None, 30, 1),因为模型要求我这样做?如果我只想提供单行并且模型给了我 30 行的输出(依次为 30 个时间步),该怎么办?就像我的测试数据仍然具有形状 (1025643, 72) 并且我得到的结果具有形状 (1025643, 30, 1)。
    • 如果我理解正确,您希望提供单个时间步长的输入并产生接下来的 30 个时间步长的输出。 LSTM 需要每个时间步的输入。要从单个输入产生 30 个时间步的输出,您可以在每个时间步复制第一个输入,或者使用 LSTM 的输出作为下一个时间步的输入(LSTM 的输入维度与输出不匹配,所以后一个选项不适用于您的架构)。
    • 是的,复制的想法是有道理的。再次感谢你:)
    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2021-10-15
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    相关资源
    最近更新 更多