Tensorflow ValueError:形状(无,无)和(无,28,28,12)不兼容
İ我正在处理一个分类为12类的图像数据集。İam使用VGG16的迁移学习。然而,İ遇到了一个错误:形状(无,无)和(无,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
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 )