Учитывая, что вы используете LSTM, вам нужно измерение времени. Таким образом, ваша форма ввода должна быть: (time, image_x, image_y, nb_image_channels).
Я бы предложил получить более глубокое понимание автоэнкодеров, LSTM и 2D Convolution, так как все они здесь играют. Это полезное вступление: https://machinelearningmastery.com/lstm-autoencoders/ и это https://blog.keras.io/building-autoencoders-in-keras.html).
Также посмотрите на этот пример, кто-то реализовал LSTM с Conv2D Как изменить 3-канальный набор данных для ввода в нейронную сеть . Здесь полезен слой TimeDistributed.
Однако, чтобы исправить ошибку, вы можете добавить слой Reshape (), чтобы имитировать дополнительное измерение:
def keras_model(image_x, image_y):
model = Sequential()
model.add(Lambda(lambda x: x / 127.5 - 1., input_shape=(image_x, image_y, 1)))
last = model.output
x = Conv2D(3, (3, 3), padding='same')(last)
x = BatchNormalization()(x)
x = Activation('relu')(x)
x = MaxPooling2D((2, 2), padding='valid')(x)
encoded= Flatten()(x)
# (50,50,3) is the output shape of the max pooling layer (see model summary)
encoded = Reshape((50*50*3, 1))(encoded)
x = LSTM(8, return_sequences=True)(encoded) # input shape can be removed
decoded = LSTM(64, return_sequences = True)(x)
x = Dropout(0.5)(decoded)
x = Dense(400, activation='relu')(x)
x = Dense(25, activation='relu')(x)
final = Dense(1, activation='relu')(x)
autoencoder = Model(model.input, final)
autoencoder.compile(optimizer="Adam", loss="mse")
print(autoencoder.summary())
model= keras_model(100, 100)