如何修复: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`