ValueError: Error al verificar el objective: el model_2 esperado tiene forma (Ninguno, 252, 252, 1) pero tiene una matriz con forma (300, 128, 128, 3)

hola estoy creando un clasificador de imágenes para una clasificación de una clase en la que he usado el autoencoder mientras ejecutaba este modelo. Estoy recibiendo este error por esta línea (autoencoder_model.fit) (ValueError: error al verificar target: el model_2 esperado tiene forma ( Ninguno, 252, 252, 1) pero tiene una matriz con forma (300, 128, 128, 3).

num_of_samples = img_data.shape[0] labels = np.ones((num_of_samples,),dtype='int64') labels[0:376]=0 names = ['cats'] input_shape=img_data[0].shape X_train, X_test = train_test_split(img_data, test_size=0.2, random_state=2) inputTensor = Input(input_shape) x = Conv2D(16, (3, 3), activation='relu', padding='same')(inputTensor) x = Conv2D(8, (3, 3), activation='relu', padding='same')(x) x = MaxPooling2D((2, 2), padding='same')(x) x = Conv2D(8, (3, 3), activation='relu', padding='same')(x) encoded_data = MaxPooling2D((2, 2), padding='same')(x) encoder_model = Model(inputTensor,encoded_data) # at this point the representation is (4, 4, 8) ie 128-dimensional encoded_input = Input((4,4,8)) x = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded_input) x = UpSampling2D((2, 2))(x) x = Conv2D(8, (3, 3), activation='relu', padding='same')(x) x = UpSampling2D((2, 2))(x) x = Conv2D(16, (3, 3), activation='relu',padding='same')(x) x = UpSampling2D((2, 2))(x) decoded_data = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x) decoder_model = Model(encoded_input,decoded_data) autoencoder_input = Input(input_shape) encoded = encoder_model(autoencoder_input) decoded = decoder_model(encoded) autoencoder_model = Model(autoencoder_input, decoded) autoencoder_model.compile(optimizer='adadelta', `enter code here`loss='binary_crossentropy') autoencoder_model.fit(X_train, X_train, epochs=50, batch_size=32, validation_data=(X_test, X_test), callbacks=[TensorBoard(log_dir='/tmp/autoencoder')]) 

Es una incompatibilidad simple entre la forma de salida del decodificador y la forma de sus datos de entrenamiento. (Objetivo significa salida).

Veo que tienes 2 MaxPoolings (dividiendo el tamaño de tu imagen por 4), y tres upsamplings (multiplicando la entrada del decodificador por 8).

La salida final del autoencoder es demasiado grande y no coincide con sus datos. Simplemente debe trabajar en el modelo para que la forma de salida coincida con sus datos de entrenamiento.

Estás usando la API incorrecta

 autoencoder_model.fit(X_train, X_train, <--- This one is wrong epochs=50, batch_size=32, validation_data=(X_test, X_test), callbacks=[TensorBoard(log_dir='/tmp/autoencoder')]) 

Eche un vistazo al código fuente del método .fit en https://github.com/keras-team/keras/blob/master/keras/models.py

 def fit(self, x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0., validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None, **kwargs): """Trains the model for a fixed number of epochs (iterations on a dataset). # Arguments x: Numpy array of training data. If the input layer in the model is named, you can also pass a dictionary mapping the input name to a Numpy array. `x` can be `None` (default) if feeding from framework-native tensors (eg TensorFlow data tensors). y: Numpy array of target (label) data. If the output layer in the model is named, you can also pass a dictionary mapping the output name to a Numpy array. `y` can be `None` (default) if feeding from framework-native tensors (eg TensorFlow data tensors). 

Entonces, la x debería ser datos, y la y debería ser la etiqueta de los datos. Espero que la ayuda