如何修复:ValueError: Input 0 is in compatible with layer lstm_2: expected ndim=3, found ndim=2

Posted

技术标签:

【中文标题】如何修复:ValueError: Input 0 is in compatible with layer lstm_2: expected ndim=3, found ndim=2【英文标题】:How to fix: ValueError: Input 0 is incompatible 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,看看它是否有效? 【参考方案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?

【讨论】:

以上是关于如何修复:ValueError: Input 0 is in compatible with layer lstm_2: expected ndim=3, found ndim=2的主要内容,如果未能解决你的问题,请参考以下文章

如何修复'ValueError:shapes(1,3)和(1,1)未对齐:3(dim 1)!= 1(dim 0)'numpy中的错误

如何修复'ValueError:输入张量必须具有等级 4'?

已修复Error: ValueError: The last dimension of the inputs to `Dense` should be defined. Found `None`

已修复Error: ValueError: The last dimension of the inputs to `Dense` should be defined. Found `None`

已修复Error: ValueError: The last dimension of the inputs to `Dense` should be defined. Found `None`

如何修复 ValueError:不支持多类格式