ValueError:输入0与层lstm_14不兼容:预期ndim = 3,找到的ndim = 2

时间:2019-03-11 05:46:09

标签: python lstm recurrent-neural-network

我正在建立一个cnn_rnn网络进行图像分类。在我的jupyter笔记本中运行以下python代码时出现错误。

     # model
     model1 = Sequential()
     # first convolutional layer
     model1.add(Conv2D(32, kernel_size=(3, 3),activation='relu',input_shape(160, 120, 3)))
     # second convolutional layer
     model1.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
     #Adding a pooling Layer
     model1.add(MaxPooling2D(pool_size=(3, 3)))
     #Adding dropouts
     model1.add(Dropout(0.25))
     # flatten and put a fully connected layer
     model1.add(Flatten())
     model1.add(Dense(32, activation='relu')) # fully connected

     #Adding RNN N/W
     model1.add(LSTM(32, return_sequences=True))
     model1.add(TimeDistributed(Dense(5, activation='softmax')))

我还尝试将input_shape =(160,120,3)作为参数添加到LSTM函数,但无济于事。请帮忙!

P.S:我也尝试使用GRU而不是LSTM,但是出现了相同的错误。

更新:请注意model.summary()结果 enter image description here

1 个答案:

答案 0 :(得分:0)

您的错误是由于您在LSTM层之前使用了Flatten和Dense。

LSTM层要求输入的形状为(批量大小x长度x特征深度0)(或某些变形),而展平将Conv2D输出从(B x H x W x F)更改为(B x W * F * H)如果可以的话。如果要使用此体系结构,建议您在LSTM层之前使用Reshape层来平整所需的尺寸,并使用内核大小为1的Conv1D(与完全连接的层相同)。

或者,如果您想使用此确切的代码,请将其添加到LSTM层之前,它应该可以工作:

  

model1.add(Reshape(target_shape =(1,54 * 40,32))

由于pool_size为(3,3),因此分别为54和40。