Недопустимый аргумент: Несовместимые формы: [3,256,256,2] против [3,150,150,2]

#python #image #machine-learning #keras #deep-learning

Вопрос:

Я хочу построить модель для раскрашивания изображения, я попытался выполнить этот код, но столкнулся с несовместимыми формами: ошибка [3,256,256,2] против [3,150,150,2].

 #CNN model  from keras.layers import Conv2D, Conv2DTranspose, UpSampling2D from keras.layers import Activation, Dense, Dropout, Flatten, InputLayer from tensorflow.keras.layers import (  BatchNormalization, SeparableConv2D, MaxPooling2D, Activation, Flatten, Dropout, Dense ) from keras.callbacks import TensorBoard, ModelCheckpoint from keras.models import Sequential  model = Sequential()  #Input Layer model.add(Conv2D(64, (3, 3), input_shape=(256, 256, 1), activation='relu', padding='same'))  #Hidden Layers model.add(Conv2D(64, (3, 3), activation='relu', padding='same', strides=2)) model.add(Conv2D(128, (3, 3), activation='relu', padding='same')) model.add(Conv2D(128, (3, 3), activation='relu', padding='same', strides=2)) model.add(Conv2D(256, (3, 3), activation='relu', padding='same')) model.add(Conv2D(256, (3, 3), activation='relu', padding='same', strides=2)) model.add(Conv2D(512, (3, 3), activation='relu', padding='same')) model.add(Conv2D(256, (3, 3), activation='relu', padding='same')) model.add(Conv2D(128, (3, 3), activation='relu', padding='same')) model.add(UpSampling2D((2, 2))) model.add(Conv2D(64, (3, 3), activation='relu', padding='same')) model.add(UpSampling2D((2, 2))) model.add(Conv2D(32, (3, 3), activation='relu', padding='same')) model.add(Conv2D(2, (3, 3), activation='tanh', padding='same')) model.add(UpSampling2D((2, 2)))    #Compiling the CNN model.compile(optimizer='rmsprop', loss='mse', metrics = ['accuracy']) #model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy'])  

ошибка возникает, когда я запускаю код, соответствующий модели

 # Image transformer datagen = ImageDataGenerator(  shear_range=0.2,  zoom_range=0.2,  rotation_range=20,  horizontal_flip=True)  import matplotlib.pyplot as plt  # Image transformer datagen = ImageDataGenerator(  shear_range=0.2,  zoom_range=0.2,  rotation_range=20,  horizontal_flip=True)  # Generate training data batch_size = 10 def image_a_b_gen(batch_size):  for batch in datagen.flow(Xtrain, batch_size=batch_size ):  lab_batch = rgb2lab(batch)  X_batch = lab_batch[:,:,:,0]  Y_batch = lab_batch[:,:,:,1:] / 128  yield (X_batch.reshape(X_batch.shape (1,)), Y_batch)    # Train model  tensorboard = TensorBoard(log_dir="/output/beta_run") trainedmodel = model.fit(image_a_b_gen(batch_size), callbacks=[tensorboard],epochs=100, steps_per_epoch=30)  

Сообщение об ошибке:

 InvalidArgumentError Traceback (most recent call last)  lt;ipython-input-112-7a987e785f95gt; in lt;modulegt;  29 # Train model  30 tensorboard = TensorBoard(log_dir="/output/beta_run")  ---gt; 31 trainedmodel = model.fit(image_a_b_gen(batch_size), callbacks=[tensorboard],epochs=100, steps_per_epoch=30)  32   33     ~anaconda3libsite-packageskerasutilstraceback_utils.py in error_handler(*args, **kwargs)  65 except Exception as e: # pylint: disable=broad-except  66 filtered_tb = _process_traceback_frames(e.__traceback__)  ---gt; 67 raise e.with_traceback(filtered_tb) from None  68 finally:  69 del filtered_tb    ~anaconda3libsite-packagestensorflowpythoneagerexecute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)  56 try:  57 ctx.ensure_initialized()  ---gt; 58 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,  59 inputs, attrs, num_outputs)  60 except core._NotOkStatusException as e:    InvalidArgumentError: Incompatible shapes: [3,256,256,2] vs. [3,150,150,2]  [[node gradient_tape/mean_squared_error/BroadcastGradientArgs  (defined at C:UsersHudaAanaconda3libsite-packageskerasoptimizer_v2optimizer_v2.py:464)  ]] [Op:__inference_train_function_33345]  

Я попытался распечатать сводку слоев, но не смог найти проблему

Ответ №1:

Ответ кроется в ошибке.

  1. Ожидаемый результат вашей модели для ввода типа (3,256,256,1) равен (3,256,256,2).
  2. Трассировка показывает, что что-то не так с частью mse (функция потерь).

Решение :

Проверьте форму X_batch.reshape(X_batch.shape (1,) и Y_batch как выходные данные функции image_a_b_gen.

Я предполагаю, что ваш Y_batch неправильной формы.

Комментарии:

1. Я проверил форму X_batch и Y_batch, это (150,150,1), которая является размером изображений в наборе данных. не могли бы вы помочь мне, как я могу изменить параметры слоев в соответствии с моим набором данных?