【问题标题】:How to fix: ValueError: Input 0 is incompatible with layer lstm_2: expected ndim=3, found ndim=2如何修复:ValueError: Input 0 is in compatible with layer lstm_2: expected ndim=3, found ndim=2
【发布时间】:2020-01-29 15:00:54
【问题描述】:

我有一个关于时间序列数据的问题。我的训练数据集的维度为 (3183, 1, 6)

我的模特:

model = Sequential()
model.add(LSTM(100, input_shape = (training_input_data.shape[1], training_input_data.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(100, input_shape = (training_input_data.shape[1], training_input_data.shape[2])))
model.add(Dense(1))
model.compile(optimizer = 'adam', loss='mse')

我在第二个 LSTM 层收到以下错误:

ValueError:输入 0 与层 lstm_2 不兼容:预期 ndim=3,发现ndim=2 但是没有ndim参数。

【问题讨论】:

  • 你能在第一层试试return_sequences=True,看看它是否有效?

标签: python keras machine-learning-model


【解决方案1】:

问题是第一个 LSTM 层返回了形状为(batch_size, 100) 的东西。如果您想使用第二个 LSTM 层进行迭代,您可能应该在第一个 LSTM 层中添加选项 return_sequences=True(然后将返回形状为 (batch_size, training_input_data.shape[1], 100) 的对象。

请注意,在第二个 LSTM 中传递 input_shape = (..) 不是强制性的,因为该层的输入形状是根据第一层的输出形状自动计算的。

【讨论】:

    【解决方案2】:

    您需要设置参数 return_sequences=True 来堆叠 LSTM 层。

    model = Sequential()
    model.add(LSTM(
        100,
        input_shape = (training_input_data.shape[1], training_input_data.shape[2]),
        return_sequences=True
    ))
    model.add(Dropout(0.2))
    model.add(LSTM(100, input_shape = (training_input_data.shape[1], training_input_data.shape[2])))
    model.add(Dense(1))
    model.compile(optimizer = 'adam', loss='mse')
    

    另见How to stack multiple lstm in keras?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-26
      • 2019-07-19
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 2018-05-19
      • 2019-01-03
      相关资源
      最近更新 更多