Проблема заключается в том, что после последнего плотного слоя (перед слоем lstm) выходная форма равна (?, 20), а слой lstm ожидает 3D-тензор, а не 2D. Так что вы можете расширить размеры вЧтобы добавить еще один перед подачей в слой lstm.
Размеры можно расширить с помощью tf.expand_dims (при условии, что вы используете тензор потока в качестве бэкэнда) tf expand
input_layer = Input((30,24,48))
model = Conv2D(20,(5,5), input_shape = (30,24,48), activation = "relu", strides = 1, padding = "valid")(input_layer)
model = MaxPooling2D(pool_size=(2,2))(model)
model = Conv2D(50, (5,5), use_bias = 50)(model)
model = MaxPooling2D(pool_size=(2,2))(model)
model = Flatten()(model)
model = Dense(20, activation = "relu")(model)
model = tf.expand_dims(model, axis=-1)
model = LSTM(50, activation="relu", return_sequences=True)(model)
(Я не использовал последовательный режим, я использую функциональный API , поскольку он более гибкий)
Если вы хотите использовать последовательную модель:
model = Sequential()
model.add(Conv2D(20,(5,5), input_shape = (30, 24, 48), activation = "relu", strides = 1, padding = "valid"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(50, (5,5), use_bias = 50))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(20, activation = "relu"))
model.add(Lambda(lambda x: tf.expand_dims(model.output, axis=-1)))
model.add(LSTM(50, activation="relu", return_sequences=True))
вынеобходимо использовать расширенные размеры внутри Лямбда