【问题标题】:keras tensor reshaping (lstm input shape error)keras 张量整形(lstm 输入形状错误)
【发布时间】:2023-03-22 23:57:02
【问题描述】:

我在 keras 上使用 LSTM,并在之前使用了重塑层,希望我不必为 LSTM 层指定形状。

输入为 84600 x 6

2 个月内 84600 秒。 6 个指标/[标签] 我在 2 个月内进行测量

目前为止

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Reshape((86400,1,6), input_shape=(84600, 6)))
model.add(tf.keras.layers.LSTM(128,  activation='relu', input_shape= 
(x_train.shape), return_sequences=True))
model.add(tf.keras.layers.Dense(10, activation='softmax'))

引发错误:

ValueError: Input 0 of layer lstm is incompatible with the layer: expected ndim=3, found ndim=4. Full shape received: [None, 86400, 1, 6]

这是可以理解的。批量大小加上 3 层等于 4。 然而,当我重塑

model.add(tf.keras.layers.Reshape((86400,1,6), input_shape=(84600, 6)))
vvvvvvv
model.add(tf.keras.layers.Reshape((86400,6), input_shape=(84600, 6)))

它抛出

ValueError: Error when checking input: expected reshape_input to have 3 dimensions, but got array with shape (86400, 6)

它似乎忽略了作为数组元素的批量大小。并将其视为 2 个索引。它从 4 维跳跃到 2 维。

问题是 LSTM 需要 3 个维度作为输入,我似乎无法理解。理想情况下,我想要一个 86400 x 1 x 6 阵列/张量。所以它变成了 84600 个 1x6 数据的例子。

非常感谢!

【问题讨论】:

    标签: python tensorflow keras lstm


    【解决方案1】:

    问题在于您重塑输入的方式与 LSTM 层不兼容。 LSTM 层需要 3 个维度的输入:(batch_size, timesteps, features)。但是,您正在为它提供一个形状为 (batch_size, 84600, 1, 6) 的输入。

    在您的情况下,似乎 84600 是时间步数,而 6 是每个时间步的特征数。因此,省略 Reshape 层并简单地将 input_shape (84600, 6) 用于 LSTM 层会更有意义:

    model = tf.keras.models.Sequential()
    model.add(tf.keras.layers.LSTM(128,  activation='relu', input_shape=(84600, 6), return_sequences=True))
    model.add(tf.keras.layers.Dense(10, activation='softmax'))
    

    【讨论】:

    • 我也有同样的问题,已经卡了三天了。使用重塑层也会导致 4 个暗淡而不是 3 个,而且我不知道我还能做什么。 input_shape 参数似乎已从 tf.compat.v2.keras.layers.LSTM 以及任何其他参数中删除
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2017-10-15
    相关资源
    最近更新 更多