无法挤压 dim[1],预期维度为 1,得到 2 [[{{node Predict/feature_vector/SpatialSqueeze}}]] [Op:__inference_train_function_253305]

发布于 2025-01-14 18:02:54 字数 5242 浏览 3 评论 0原文

我发现使用“Mobilenet_tranferLearning”时很难训练以下模型。我使用 ImageDataGenerator 和 flow_from_directory 方法从目录中扩充和加载文件。有趣的是,我的代码在使用 InceptionV3 时不会抛出任何错误,但在使用“Mobilenet_tranferLearning”时会抛出任何错误。 我希望得到一些指示,因为我相信我正在使用正确的损失函数“categorical_crossentropy”,我也在 train_generator (class_mode='categorical') 中定义了该函数。

train_datagen = ImageDataGenerator(
rescale= 1./255,
shear_range= 0.2,
zoom_range= 0.2,
horizontal_flip= True,
rotation_range= 20,
width_shift_range= 0.2,
height_shift_range= 0.2,   
validation_split=0.2,)


valid_datagen = ImageDataGenerator(
rescale= 1./255, 
validation_split=0.2,)

train_generator = train_datagen.flow_from_directory(  
'/content/fold/images/Images',  
target_size= (243, 243), 
color_mode= 'rgb',
batch_size= 64,  
class_mode= 'categorical',
subset='training',
shuffle= True, 
seed= 1337) 

valid_generator = valid_datagen.flow_from_directory(
'/content/fold/images/Images',
target_size= (243, 243),
color_mode= 'rgb',
batch_size= 64,  
class_mode= 'categorical',
subset='validation',
shuffle= True, 
seed= 1337)

`import tensorflow_hub as hub 
# from tensorflow.keras import Activations
classifier_url ="https://hub.tensorflow.google.cn/google/tf2- 
 preview/mobilenet_v2/feature_vector/4"
 baseModel = hub.KerasLayer(classifier_url, input_shape=(224,224,3), output_shape=[1280], 
 name="Mobilenet")
 baseModel.trainable = False # freeze mobilenet weights
 myModel = Sequential(name="Mobilenet_tranferLearning")
 myModel.add(baseModel)
 myModel.add(Flatten())
 myModel.add(Dropout(0.2))
 myModel.add(Dense(120,activation='softmax'))
 myModel.summary()`
 
 myModel.compile(optimizer= 'adam', loss= 'categorical_crossentropy', metrics= ['accuracy'])


  history = myModel.fit(train_generator,
                epochs=25,
                validation_data=valid_generator)`

我收到以下错误:

InvalidArgumentError:图形执行错误:

在定义于(最近一次调用最后)的节点“predict/feature_vector/SpatialSqueeze”处检测到: 文件“/usr/lib/python3.7/runpy.py”,第 193 行,在 _run_module_as_main 中 “主要”,mod_spec) 文件“/usr/lib/python3.7/runpy.py”,第 85 行,在 _run_code 中 执行(代码,run_globals) 文件“/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py”,第 16 行,位于 app.launch_new_instance() 文件“/usr/local/lib/python3.7/dist-packages/traitlets/config/application.py”,第 846 行,在 launch_instance 中 应用程序.start() 文件“/usr/local/lib/python3.7/dist-packages/ipykernel/kernelapp.py”,第 499 行,在开始处 self.io_loop.start() 文件“/usr/local/lib/python3.7/dist-packages/tornado/platform/asyncio.py”,第 132 行,在 start 中 self.asyncio_loop.run_forever() 文件“/usr/lib/python3.7/asyncio/base_events.py”,第 541 行,在 run_forever 中 self._run_once() 文件“/usr/lib/python3.7/asyncio/base_events.py”,第 1786 行,在 _run_once 中 句柄._run() 文件“/usr/lib/python3.7/asyncio/events.py”,第 88 行,在 _run 中 self._context.run(self._callback, *self._args) 文件“/usr/local/lib/python3.7/dist-packages/tornado/platform/asyncio.py”,第 122 行,在 _handle_events 中 handler_func(fileobj, 事件) 文件“/usr/local/lib/python3.7/dist-packages/tornado/stack_context.py”,第 300 行,在 null_wrapper 中 返回 fn(*args, **kwargs) 文件“/usr/local/lib/python3.7/dist-packages/zmq/eventloop/zmqstream.py”,第 452 行,在 _handle_events 中 self._handle_recv() 文件“/usr/local/lib/python3.7/dist-packages/zmq/eventloop/zmqstream.py”,第 481 行,在 _handle_recv 中 self._run_callback(回调,消息) 文件“/usr/local/lib/python3.7/dist-packages/zmq/eventloop/zmqstream.py”,第 431 行,在 _run_callback 中 回调(*args,**kwargs) 文件“/usr/local/lib/python3.7/dist-packages/tornado/stack_context.py”,第 300 行,在 null_wrapper 中 返回 fn(*args, **kwargs) 文件“/usr/local/lib/python3.7/dist-packages/ipykernel/kernelbase.py”,第 283 行,在调度程序中 返回 self.dispatch_shell(流, 消息) 文件“/usr/local/lib/python3.7/dist-packages/ipykernel/kernelbase.py”,第 233 行,dispatch_shell 处理程序(流、标识、消息) 文件“/usr/local/lib/python3.7/dist-packages/ipykernel/kernelbase.py”,第399行,在execute_request中 用户表达式、允许标准输入) 文件“/usr/local/lib/python3.7/dist-packages/ipykernel/ipkernel.py”,第 208 行,在 do_execute 中 res = shell.run_cell(代码,store_history=store_history,silent=silent) 文件“/usr/local/lib/python3.7/dist-packages/ipykernel/zmqshell.py”,第 537 行,在 run_cell 中 返回 super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) 文件“/usr/local/lib/python3.7/dist-packages/IPython/core/interactiveshell.py”,第 2718 行,在 run_cell 中 交互性=交互性,编译器=编译器,结果=结果) 文件“/usr/local/lib/python3.7/dist-packages/IPython/core/interactiveshell.py”,第 2822 行,在 run_ast_nodes 中 if self.run_code(代码, 结果): 文件“/usr/local/lib/python3.7/dist-packages/IPython/core/interactiveshell.py”,第 2882 行,在 run_code 中 exec(code_obj, self.user_global_ns, self.user_ns) 文件“”,第 4 行,位于 baseModel = hub.KerasLayer(classifier_url, input_shape=(224,224,3), output_shape=[1280], name="Mobilenet") 文件“/usr/local/lib/python3.7/dist-packages/tensorflow_hub/keras_layer.py”,第 153 行,init self._func = load_module(句柄、标签、self._load_options) 文件“/usr/local/lib/python3.7/dist-packages/tensorflow_hub/keras_layer.py”,第 449 行,在 load_module 中 返回 module_v2.load(句柄, 标签=标签, 选项=set_load_options) 文件“/usr/local/lib/python3.7/dist-packages/tensorflow_hub/module_v2.py”,第 106 行,加载中 obj = tf.compat.v1.saved_model.load_v2(模块路径,标签=标签) 节点:'预测/feature_vector/SpatialSqueeze' 无法挤压 dim[1],预期维度为 1,结果为 2 [[{{节点预测/feature_vector/SpatialSqueeze}}]] [操作:__inference_train_function_253305]

I am finding it difficult to train the following model when using the 'Mobilenet_tranferLearning'. I am augmenting and loading the files from the directory using ImageDataGenerator and flow_from_directory method. What is interesting is that my code does not throw any errors when using InceptionV3, but does when I use 'Mobilenet_tranferLearning'.
I would appreciate some pointers as I believe I am using the correct loss function 'categorical_crossentropy' which I have also defined in train_generator (class_mode='categorical').

train_datagen = ImageDataGenerator(
rescale= 1./255,
shear_range= 0.2,
zoom_range= 0.2,
horizontal_flip= True,
rotation_range= 20,
width_shift_range= 0.2,
height_shift_range= 0.2,   
validation_split=0.2,)


valid_datagen = ImageDataGenerator(
rescale= 1./255, 
validation_split=0.2,)

train_generator = train_datagen.flow_from_directory(  
'/content/fold/images/Images',  
target_size= (243, 243), 
color_mode= 'rgb',
batch_size= 64,  
class_mode= 'categorical',
subset='training',
shuffle= True, 
seed= 1337) 

valid_generator = valid_datagen.flow_from_directory(
'/content/fold/images/Images',
target_size= (243, 243),
color_mode= 'rgb',
batch_size= 64,  
class_mode= 'categorical',
subset='validation',
shuffle= True, 
seed= 1337)

`import tensorflow_hub as hub 
# from tensorflow.keras import Activations
classifier_url ="https://hub.tensorflow.google.cn/google/tf2- 
 preview/mobilenet_v2/feature_vector/4"
 baseModel = hub.KerasLayer(classifier_url, input_shape=(224,224,3), output_shape=[1280], 
 name="Mobilenet")
 baseModel.trainable = False # freeze mobilenet weights
 myModel = Sequential(name="Mobilenet_tranferLearning")
 myModel.add(baseModel)
 myModel.add(Flatten())
 myModel.add(Dropout(0.2))
 myModel.add(Dense(120,activation='softmax'))
 myModel.summary()`
 
 myModel.compile(optimizer= 'adam', loss= 'categorical_crossentropy', metrics= ['accuracy'])


  history = myModel.fit(train_generator,
                epochs=25,
                validation_data=valid_generator)`

I am receiving the following error:

InvalidArgumentError: Graph execution error:

Detected at node 'predict/feature_vector/SpatialSqueeze' defined at (most recent call last):
File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"main", mod_spec)
File "/usr/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py", line 16, in
app.launch_new_instance()
File "/usr/local/lib/python3.7/dist-packages/traitlets/config/application.py", line 846, in launch_instance
app.start()
File "/usr/local/lib/python3.7/dist-packages/ipykernel/kernelapp.py", line 499, in start
self.io_loop.start()
File "/usr/local/lib/python3.7/dist-packages/tornado/platform/asyncio.py", line 132, in start
self.asyncio_loop.run_forever()
File "/usr/lib/python3.7/asyncio/base_events.py", line 541, in run_forever
self._run_once()
File "/usr/lib/python3.7/asyncio/base_events.py", line 1786, in _run_once
handle._run()
File "/usr/lib/python3.7/asyncio/events.py", line 88, in _run
self._context.run(self._callback, *self._args)
File "/usr/local/lib/python3.7/dist-packages/tornado/platform/asyncio.py", line 122, in _handle_events
handler_func(fileobj, events)
File "/usr/local/lib/python3.7/dist-packages/tornado/stack_context.py", line 300, in null_wrapper
return fn(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/zmq/eventloop/zmqstream.py", line 452, in _handle_events
self._handle_recv()
File "/usr/local/lib/python3.7/dist-packages/zmq/eventloop/zmqstream.py", line 481, in _handle_recv
self._run_callback(callback, msg)
File "/usr/local/lib/python3.7/dist-packages/zmq/eventloop/zmqstream.py", line 431, in _run_callback
callback(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/tornado/stack_context.py", line 300, in null_wrapper
return fn(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/ipykernel/kernelbase.py", line 283, in dispatcher
return self.dispatch_shell(stream, msg)
File "/usr/local/lib/python3.7/dist-packages/ipykernel/kernelbase.py", line 233, in dispatch_shell
handler(stream, idents, msg)
File "/usr/local/lib/python3.7/dist-packages/ipykernel/kernelbase.py", line 399, in execute_request
user_expressions, allow_stdin)
File "/usr/local/lib/python3.7/dist-packages/ipykernel/ipkernel.py", line 208, in do_execute
res = shell.run_cell(code, store_history=store_history, silent=silent)
File "/usr/local/lib/python3.7/dist-packages/ipykernel/zmqshell.py", line 537, in run_cell
return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/IPython/core/interactiveshell.py", line 2718, in run_cell
interactivity=interactivity, compiler=compiler, result=result)
File "/usr/local/lib/python3.7/dist-packages/IPython/core/interactiveshell.py", line 2822, in run_ast_nodes
if self.run_code(code, result):
File "/usr/local/lib/python3.7/dist-packages/IPython/core/interactiveshell.py", line 2882, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "", line 4, in
baseModel = hub.KerasLayer(classifier_url, input_shape=(224,224,3), output_shape=[1280], name="Mobilenet")
File "/usr/local/lib/python3.7/dist-packages/tensorflow_hub/keras_layer.py", line 153, in init
self._func = load_module(handle, tags, self._load_options)
File "/usr/local/lib/python3.7/dist-packages/tensorflow_hub/keras_layer.py", line 449, in load_module
return module_v2.load(handle, tags=tags, options=set_load_options)
File "/usr/local/lib/python3.7/dist-packages/tensorflow_hub/module_v2.py", line 106, in load
obj = tf.compat.v1.saved_model.load_v2(module_path, tags=tags)
Node: 'predict/feature_vector/SpatialSqueeze'
Can not squeeze dim[1], expected a dimension of 1, got 2
[[{{node predict/feature_vector/SpatialSqueeze}}]] [Op:__inference_train_function_253305]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

醉城メ夜风 2025-01-21 18:02:54

确保 flow_from_directoryhub.KerasLayer 中的图像大小(224, 224)相同。这是一个工作示例:

import tensorflow_hub as hub
import tensorflow as tf

img_gen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255, rotation_range=20)

flowers = tf.keras.utils.get_file(
    'flower_photos',
    'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
    untar=True)

train_ds = img_gen.flow_from_directory(flowers, target_size=(224, 224), batch_size=32, shuffle=True)
classifier_url ="https://hub.tensorflow.google.cn/google/tf2-preview/mobilenet_v2/feature_vector/4"
baseModel = hub.KerasLayer(classifier_url, input_shape=(224,224,3), output_shape=[1280], 
name="Mobilenet")
baseModel.trainable = False # freeze mobilenet weights
myModel = tf.keras.Sequential(name="Mobilenet_tranferLearning")
myModel.add(baseModel)
myModel.add(tf.keras.layers.Flatten())
myModel.add(tf.keras.layers.Dropout(0.2))
myModel.add(tf.keras.layers.Dense(5,activation='softmax'))
myModel.summary()

myModel.compile(optimizer= 'adam', loss= 'categorical_crossentropy', metrics= ['accuracy'])

history = myModel.fit(train_ds, epochs=25)

Make sure you have the same image size (224, 224) in flow_from_directory and in the hub.KerasLayer. Here is a working example:

import tensorflow_hub as hub
import tensorflow as tf

img_gen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255, rotation_range=20)

flowers = tf.keras.utils.get_file(
    'flower_photos',
    'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
    untar=True)

train_ds = img_gen.flow_from_directory(flowers, target_size=(224, 224), batch_size=32, shuffle=True)
classifier_url ="https://hub.tensorflow.google.cn/google/tf2-preview/mobilenet_v2/feature_vector/4"
baseModel = hub.KerasLayer(classifier_url, input_shape=(224,224,3), output_shape=[1280], 
name="Mobilenet")
baseModel.trainable = False # freeze mobilenet weights
myModel = tf.keras.Sequential(name="Mobilenet_tranferLearning")
myModel.add(baseModel)
myModel.add(tf.keras.layers.Flatten())
myModel.add(tf.keras.layers.Dropout(0.2))
myModel.add(tf.keras.layers.Dense(5,activation='softmax'))
myModel.summary()

myModel.compile(optimizer= 'adam', loss= 'categorical_crossentropy', metrics= ['accuracy'])

history = myModel.fit(train_ds, epochs=25)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文