#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:
Ответ кроется в ошибке.
- Ожидаемый результат вашей модели для ввода типа (3,256,256,1) равен (3,256,256,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), которая является размером изображений в наборе данных. не могли бы вы помочь мне, как я могу изменить параметры слоев в соответствии с моим набором данных?