将CNN与GRU堆叠以获取图像

时间:2019-06-13 16:25:33

标签: python-3.x machine-learning keras keras-layer

我正在尝试使用GRU堆叠CNN 2D。 我成功地获得了一种堆叠CNN的方法,但是我遇到了GRU错误。

这是我的代码:

model = Sequential()


#model.add(Dropout(0.25))


model.add(Conv2D(filters = 64, kernel_size = (5,5),padding = 'Same', 
                 activation ='relu', input_shape = (35,152,1)))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Conv2D(filters = 64, kernel_size = (5,5),padding = 'Same', 
                 activation ='relu'))


model.add(GRU(50,return_sequences=True))
model.add(layers.Dense(nb_labels))

model.summary()

model.compile(optimizer=RMSprop(), loss='mae')

history = model.fit(x_train_pad, y_train_pad,
          batch_size=batch_size,
          epochs=100,
          shuffle=True,
          verbose=2,
          validation_data=(x_test_pad, y_test_pad), callbacks=[TQDMNotebookCallback(leave_inner=True, leave_outer=True)]) #callbacks=[TQDMNotebookCallback()]

这是我的错误:

Anaconda3\lib\site-packages\keras\engine\base_layer.py in assert_input_compatibility(self, inputs)
    309                                      self.name + ': expected ndim=' +
    310                                      str(spec.ndim) + ', found ndim=' +
--> 311                                      str(K.ndim(x)))
    312             if spec.max_ndim is not None:
    313                 ndim = K.ndim(x)

ValueError: Input 0 is incompatible with layer gru_16: expected ndim=3, found ndim=4

预先感谢您的帮助

1 个答案:

答案 0 :(得分:0)

正如ValueError解释的那样,GRU层正在等待3维输入,但是最后一个Conv2D的输出为4维(在您的情况下,维为:(None,17,76,64))。根据需要执行的操作,需要在送入GRU层之前减小尺寸形状。例如,您可以使用池化技术。