如何解决:ValueError:输入0与lstm_2层不兼容:预期的ndim = 3,找到的ndim = 2

时间:2019-09-30 10:17:44

标签: python keras machine-learning-model

我对时间序列数据有疑问。我的训练数据集的维度为(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参数。

2 个答案:

答案 0 :(得分:0)

问题在于第一LSTM层返回的形状为(batch_size, 100)。如果要迭代第二个LSTM层,则可能应该在第一个LSTM层中添加选项return_sequences=True(然后将返回形状为(batch_size, training_input_data.shape[1], 100)的对象。

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

答案 1 :(得分:0)

您需要设置参数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?