我正在建立一个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
答案 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。