值错误:形状(None, None)和(None, 28, 28, 12)不兼容

我正在处理一个包含12个类别的图像数据集。我使用VGG16进行迁移学习。然而,我遇到了一个错误:形状(None, None)和(None, 28, 28, 12)不兼容。我的代码如下:

IMAGE_SHAPE = (224, 224)BATCH_SIZE = 32train = ImageDataGenerator()train_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale= 1./255, fill_mode= 'nearest')train_data = train_generator.flow_from_directory(directory="path",target_size=IMAGE_SHAPE , color_mode="rgb" , class_mode='categorical', batch_size=BATCH_SIZE , shuffle = True )valid = ImageDataGenerator()validation_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)valid_data = validation_generator.flow_from_directory(directory="path, target_size=IMAGE_SHAPE , color_mode="rgb" , class_mode='categorical' , batch_size=BATCH_SIZE , shuffle = True )test = ImageDataGenerator()test_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)test_data = test_generator.flow_from_directory(directory='path',target_size=IMAGE_SHAPE , color_mode="rgb" , class_mode='categorical' , batch_size=1 , shuffle = False )test_data.reset()from keras.applications.vgg19 import VGG19vggmodel = VGG19(weights='imagenet', include_top=True)for layers in (vggmodel.layers)[:32]:    print(layers)    layers.trainable = Falseimport tensorflow as tftf.keras.Modeltf.keras.layers.Densefrom keras import optimizerstf.keras.preprocessing.image.ImageDataGeneratortf.keras.preprocessing.image.load_imgX= vggmodel.layers[-12].outputflatten = tf.keras.layers.Flatten()(X)out = vggmodel.layers(flatten)predictions = tf.keras.layers.Dense(num_classes, activation='softmax')model_final = Model(vggmodel.input, predictions)    model_final.compile(optimizer = optimizers.Adam(lr=0.0003), loss='categorical_crossentropy', metrics=["accuracy"])    for image_batch, labels_batch in train_data:  print(image_batch.shape)  print(labels_batch.shape)  breakfrom keras.callbacks import ModelCheckpoint, EarlyStoppingcheckpoint = ModelCheckpoint("vgg16_1.h5", monitor='val_acc', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)early = EarlyStopping(monitor='val_acc',patience=40, verbose=1, mode='auto')model_final.fit_generator(generator= train_data, steps_per_epoch= 2, epochs= 100, validation_data= valid_data, validation_steps=1, callbacks=[checkpoint,early])model_final.save_weights("vgg16_1.h5")

错误: ValueError: Shapes (None, None) and (None, 28, 28, 12) are incompatible[![enter image description here]

错误详情:

ValueError                                Traceback (most recent call last)<ipython-input-39-938295cc34c4> in <module>()      2 checkpoint = ModelCheckpoint("vgg16_1.h5", monitor='val_acc', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)      3 early = EarlyStopping(monitor='val_acc', min_delta=0, patience=40, verbose=1, mode='auto')----> 4 model_final.fit_generator(generator= train_images , steps_per_epoch= 2, epochs= 100, validation_data= val_images , validation_steps=1, callbacks=[checkpoint,early])      5 model_final.save_weights("vgg16_1.h5")10 frames/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)    984           except Exception as e:  # pylint:disable=broad-except    985             if hasattr(e, "ag_error_metadata"):--> 986               raise e.ag_error_metadata.to_exception(e)    987             else:    988               raiseValueError: in user code:    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:830 train_function  *        return step_function(self, iterator)    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:813 run_step  *        outputs = model.train_step(data)    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:771 train_step  *        loss = self.compiled_loss(    /usr/local/lib/python3.7/dist-packages/keras/engine/compile_utils.py:201 __call__  *        loss_value = loss_obj(y_t, y_p, sample_weight=sw)    /usr/local/lib/python3.7/dist-packages/keras/losses.py:142 __call__  *        losses = call_fn(y_true, y_pred)    /usr/local/lib/python3.7/dist-packages/keras/losses.py:246 call  *        return ag_fn(y_true, y_pred, **self._fn_kwargs)    /usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py:206 wrapper  **        return target(*args, **kwargs)    /usr/local/lib/python3.7/dist-packages/keras/losses.py:1631 categorical_crossentropy        y_true, y_pred, from_logits=from_logits)    /usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py:206 wrapper        return target(*args, **kwargs)    /usr/local/lib/python3.7/dist-packages/keras/backend.py:4827 categorical_crossentropy        target.shape.assert_is_compatible_with(output.shape)    /usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/tensor_shape.py:1161 assert_is_compatible_with        raise ValueError("Shapes %s and %s are incompatible" % (self, other))    ValueError: Shapes (None, None) and (None, 28, 28, 12) are incompatible

1]1

enter image description here

更新后的代码:

image_dir = Path('../content/dataset')# 获取文件路径和标签filepaths = list(image_dir.glob(r'**/*.png'))labels = list(map(lambda x: os.path.split(os.path.split(x)[0])[1], filepaths))def create_gen():    # 使用生成器和数据增强加载图像    train_generator = tf.keras.preprocessing.image.ImageDataGenerator(        preprocessing_function=tf.keras.applications.vgg16.preprocess_input,        validation_split=0.1    )    test_generator = tf.keras.preprocessing.image.ImageDataGenerator(        preprocessing_function=tf.keras.applications.vgg16.preprocess_input    )    train_images = train_generator.flow_from_dataframe(        dataframe=train_df,        x_col='Filepath',        y_col='Label',        target_size=(224, 224),        color_mode='rgb',        class_mode='categorical',        batch_size=32,        shuffle=True,        seed=0,        subset='training',        rotation_range=30, # 取消注释以使用数据增强        zoom_range=0.15,        width_shift_range=0.2,        height_shift_range=0.2,        shear_range=0.15,        horizontal_flip=True,        fill_mode="nearest"    )    val_images = train_generator.flow_from_dataframe(        dataframe=train_df,        x_col='Filepath',        y_col='Label',        target_size=(224, 224),        color_mode='rgb',        class_mode='categorical',        batch_size=32,        shuffle=True,        seed=0,        subset='validation',        rotation_range=30, # 取消注释以使用数据增强        zoom_range=0.15,        width_shift_range=0.2,        height_shift_range=0.2,        shear_range=0.15,        horizontal_flip=True,        fill_mode="nearest"    )    test_images = test_generator.flow_from_dataframe(        dataframe=test_df,        x_col='Filepath',        y_col='Label',        target_size=(224, 224),        color_mode='rgb',        class_mode='categorical',        batch_size=32,        shuffle=False    )        return train_generator,test_generator,train_images,val_images,test_imagesfrom keras.applications.vgg16 import VGG16vggmodel = VGG16(weights='imagenet', include_top=True)for layers in (vggmodel.layers)[:256]:    print(layers)    layers.trainable = FalseX= vggmodel.layers[-12].outputpredictions = Dense(12, activation="softmax")(X)model_final = Model(vggmodel.input, predictions)model_final.compile(optimizer = optimizers.Adam(lr=0.0003), loss='categorical_crossentropy', metrics=["accuracy"])# 分离训练和测试数据train_df, test_df = train_test_split(image_df, train_size=0.9, shuffle=True, random_state=1)# 创建生成器strain_generator,test_generator,train_images,val_images,test_images = create_gen()from keras.callbacks import ModelCheckpoint, EarlyStoppingcheckpoint = ModelCheckpoint("vgg16_1.h5", monitor='val_acc', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)early = EarlyStopping(monitor='val_acc', min_delta=0, patience=40, verbose=1, mode='auto')model_final.fit_generator(generator= train_images, steps_per_epoch= 2, epochs= 100, validation_data= val_images, validation_steps=1, callbacks=[checkpoint,early])model_final.save_weights("vgg16_1.h5")

回答:

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注