Tensorflow ValueError:形状(无,无)和(无,28,28,12)不兼容

Tensorflow ValueError:形状(无,无)和(无,28,28,12)不兼容,tensorflow,machine-learning,keras,deep-learning,transfer-learning,Tensorflow,Machine Learning,Keras,Deep Learning,Transfer Learning,İ我正在处理一个分类为12类的图像数据集。İam使用VGG16的迁移学习。然而,İ遇到了一个错误:形状(无,无)和(无,28,28,12)不兼容。 我的代码: 错误:ValueError:形状(无,无)和(无,28,28,12)不兼容[![在此处输入图像描述] 错误详细信息: ValueError Traceback (most recent call last) <ipython-input-39-938295cc34c4&g

İ我正在处理一个分类为12类的图像数据集。İam使用VGG16的迁移学习。然而,İ遇到了一个错误:形状(无,无)和(无,28,28,12)不兼容。 我的代码:

错误:
ValueError:形状(无,无)和(无,28,28,12)不兼容
[![在此处输入图像描述]

错误详细信息:

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               raise

ValueError: 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
详细信息错误:

valueError                                Traceback (most recent call last)
<ipython-input-56-5210d7f2da32> 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               raise

ValueError: 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
valueError回溯(最近一次调用)
在()
2检查点=模型检查点(“vgg16_1.h5”,监视器=”val_acc',verbose=1,save_best_only=True,save_weights_only=False,mode='auto',period=1)
3早到=早到(监视器='val_acc',最小增量=0,耐心=40,冗余=1,模式='auto')
---->4模型最终拟合生成器(生成器=训练映像,每个历元的步骤=2,历元=100,验证数据=val映像,验证步骤=1,回调=[检查点,早期])
5型号最终保存重量(“vgg16型号1.h5”)
10帧
/包装器中的usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py(*args,**kwargs)
984例外情况为e:#pylint:disable=broad Exception
985如果hasattr(e,“ag错误元数据”):
-->986将e.ag\u错误\u元数据引发到\u异常(e)
987其他:
988提高
ValueError:在用户代码中:
/usr/local/lib/python3.7/dist包/keras/engine/training.py:830列车功能*
返回步骤_函数(self、迭代器)
/usr/local/lib/python3.7/dist包/keras/engine/training.py:813运行步骤*
输出=型号列车步进(数据)
/usr/local/lib/python3.7/dist包/keras/engine/training.py:771训练步骤*
损耗=自编的损耗(
/usr/local/lib/python3.7/dist-packages/keras/engine/compile\u-utils.py:201\u\u-call\u*
损耗值=损耗对象(y\u t,y\u p,样品重量=sw)
/usr/local/lib/python3.7/dist-packages/keras/loss.py:142调用*
损失=催缴股款fn(y_真,y_pred)
/usr/local/lib/python3.7/dist-packages/keras/loss.py:246调用*
返回ag_fn(y_true,y_pred,**self.\u fn_kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py:206包装器**
返回目标(*args,**kwargs)
/usr/local/lib/python3.7/dist-packages/keras/loss.py:1631-categorical\u
y_true,y_pred,from_logits=from_logits)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py:206包装器
返回目标(*args,**kwargs)
/usr/local/lib/python3.7/dist-packages/keras/backend.py:4827 category\u
target.shape.assert\u与(output.shape)兼容
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/tensor\u-shape.py:1161-assert\u与
raise VALUERROR(“形状%s和%s不兼容”%(自身、其他))
ValueError:形状(无,无)和(无,28,28,12)不兼容

您的代码中有许多小错误:

  • 在使用生成器时,您使用的是字符串
    path
    而不是变量
    path
  • 此外,列车路径、验证路径和测试路径也应不同
  • 您尚未为VGG19型号指定输入张量
您的代码应该如下所示:

#train_dir_path is path to your training images
train_data = train_generator.flow_from_directory(directory=train_dir_path,target_size=IMAGE_SHAPE , color_mode="rgb" , class_mode='categorical', batch_size=BATCH_SIZE , shuffle = True )
#valid_dir_path is path to your validation images
valid_data = validation_generator.flow_from_directory(directory=valid_dir_path, target_size=IMAGE_SHAPE , color_mode="rgb" , class_mode='categorical' , batch_size=BATCH_SIZE , shuffle = True )

  • VGG模型的输出在进入稠密层之前应该是平坦的
完整代码:

IMAGE\u SHAPE=(224224224)
批量大小=32
列车=图像数据生成器()
train_generator=tf.keras.preprocessing.image.ImageDataGenerator(重缩放=1./255,填充模式=‘最近’)
#train_dir_path是指向训练图像的路径
列车数据=列车生成器。来自列车目录的流程(目录=列车目录路径,目标尺寸=图像形状,颜色模式=“rgb”,类模式=“分类”,批次尺寸=批次尺寸,随机播放=真)
valid=ImageDataGenerator()
验证_生成器=tf.keras.preprocessing.image.ImageDataGenerator(重缩放=1./255)
#valid_dir_path是验证图像的路径
有效的\u数据=验证\u生成器。来自\u目录的流(目录=有效的\u目录\u路径,目标\u大小=图像\u形状,颜色\u mode=“rgb”,class\u mode='classifical',批次\u大小=批次\u大小,随机播放=True)
测试=ImageDataGenerator()
test_generator=tf.keras.preprocessing.image.ImageDataGenerator(重缩放=1./255)
#test_dir_path是指向测试映像的路径
test\u data=test\u generator.flow\u from\u directory(directory=test\u dir\u path,target\u size=IMAGE\u SHAPE,color\u mode=“rgb”,class\u mode='classifical',batch\u size=1,shuffle=False)
测试数据重置()
从keras.applications.vgg19导入vgg19
vggmodel=VGG19(weights='imagenet',include_top=True,input_tensor=tensorflow.keras.layers.input(shape=(224224,3)))
对于(vggmodel.layers)[:32]中的层:
打印(层)
layers.trainable=False
X=vggmodel.layers[-12]。输出
X=tensorflow.keras.layers.Flatten()(X)
预测=密集(12,activation=“softmax”)(X)
模型\最终=模型(vggmodel.input,预测)
模型_final.compile(优化器=优化器.Adam(lr=0.0003),loss='classifical_crossentropy',metrics=[“准确性”])
对于图像批次,在列数据中标记批次:
打印(图像\批处理形状)
打印(标签和批处理形状)
打破
从keras.callbacks导入模型检查点,EarlyStopping
检查点=模型检查点(“vgg16\u 1.h5”,监视器=”val\u acc',详细=1,保存最佳值仅=真,保存权重仅=假,模式=”自动',周期=1)
早期=早期停止(监视器='val_acc',耐心=40,详细=1,模式='auto')
模型最终拟合生成器(生成器=训练数据,每个历元的步骤=2,历元=100,验证数据=有效数据,验证步骤=1,回调=[检查点,早期])
模型最终保存重量(“vgg16\U 1.h5”)

您的代码中有许多小错误:

  • 在使用生成器时,您使用的是字符串
    path
    而不是变量
    path
  • 此外,列车路径、验证路径和测试路径也应不同
  • 您没有指定
    valueError                                Traceback (most recent call last)
    <ipython-input-56-5210d7f2da32> 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               raise
    
    ValueError: 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
    
    #train_dir_path is path to your training images
    train_data = train_generator.flow_from_directory(directory=train_dir_path,target_size=IMAGE_SHAPE , color_mode="rgb" , class_mode='categorical', batch_size=BATCH_SIZE , shuffle = True )
    #valid_dir_path is path to your validation images
    valid_data = validation_generator.flow_from_directory(directory=valid_dir_path, target_size=IMAGE_SHAPE , color_mode="rgb" , class_mode='categorical' , batch_size=BATCH_SIZE , shuffle = True )