使用 Tensorflow hub 时 SavedModel 文件不存在
SavedModel file does not exist when using Tensorflow hub
尝试使用 tensorflow_hub
中的 hub.load
函数时,出现 OSError: SavedModel file does not exist at:
错误。
奇怪的是几天前它还有效,所以我不太明白为什么我现在会收到这个错误。
重现代码:
import tensorflow as tf
import tensorflow_hub as hub
URL = 'https://tfhub.dev/google/universal-sentence-encoder/4'
embed = hub.load(URL)
收到特定错误:
OSError Traceback (most recent call last)
<ipython-input-11-dfb80f0299b2> in <module>
1 URL = 'https://tfhub.dev/google/universal-sentence-encoder/4'
----> 2 embed = hub.load(URL)
~/opt/anaconda3/lib/python3.7/site-packages/tensorflow_hub/module_v2.py in load(handle, tags)
100 if tags is None and is_hub_module_v1:
101 tags = []
--> 102 obj = tf_v1.saved_model.load_v2(module_path, tags=tags)
103 obj._is_hub_module_v1 = is_hub_module_v1 # pylint: disable=protected-access
104 return obj
~/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/saved_model/load.py in load(export_dir, tags)
576 ValueError: If `tags` don't match a MetaGraph in the SavedModel.
577 """
--> 578 return load_internal(export_dir, tags)
579
580
~/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/saved_model/load.py in load_internal(export_dir, tags, loader_cls)
586 tags = nest.flatten(tags)
587 saved_model_proto, debug_info = (
--> 588 loader_impl.parse_saved_model_with_debug_info(export_dir))
589
590 if (len(saved_model_proto.meta_graphs) == 1 and
~/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/saved_model/loader_impl.py in parse_saved_model_with_debug_info(export_dir)
54 parsed. Missing graph debug info file is fine.
55 """
---> 56 saved_model = _parse_saved_model(export_dir)
57
58 debug_info_path = os.path.join(
~/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/saved_model/loader_impl.py in parse_saved_model(export_dir)
111 (export_dir,
112 constants.SAVED_MODEL_FILENAME_PBTXT,
--> 113 constants.SAVED_MODEL_FILENAME_PB))
114
115
OSError: SavedModel file does not exist at: /var/folders/77/rvfl368x44s51r8dc3b6l2rh0000gn/T/tfhub_modules/063d866c06683311b44b4992fd46003be952409c/{saved_model.pbtxt|saved_model.pb}
因此,只需删除该文件夹并 运行 hub.load() 函数再次解决问题
我已经尝试过上述解决方案,但它对我不起作用...
这是有效的方法:
- 使用资产、变量和 .pb 检查点文件从 tfhub.dev 下载模型。
- 确保导入 tensorflow_text 模块!
import tensorflow_text
- 在hub.load()语句中指定下载的文件夹路径,如:
model =
hub.load("/Users/bilguun/Desktop/universal-sentence-encoder-multilingual-large_3/")
我使用的是 i3d = hub.load(https://tfhub.dev/deepmind/i3d-kinetics-400/1).signatures['default']
如图所示 here
这种加载模型的方法在那天有效,但几天后我得到了同样的错误:OSError: SavedModel file does not exist at: C:\Users\catal\AppData\Local\Temp\tfhub_modules2225fb776e28d6d64ac605ab6be03f18dd2027{saved_model.pbtxt|saved_model.pb}
经过一些研究,我了解到 saved_model 文件位置(在错误中指定)是临时的,因此即使该文件夹仍然存在,其中也不再有 saved_model.pb。所以我下载了这里链接的模型:https://tfhub.dev/deepmind/i3d-kinetics-400/1 并设置了 i3d = hub.load("C:\absolute_path_to_saved_model_folder").signatures['default']
并且它起作用了。
所以使用 Bilguun 的回答对我来说真的很有帮助。
出现这种错误是因为下载的模型保存在应用程序创建的临时文件夹中。
由于是临时文件夹,保存在其中的模型可能会被删除,甚至可以删除文件夹。
当调用hub.load()命令时,程序会检查临时文件夹,如果找不到该文件夹,程序将从互联网上下载数据。
但是如果找到文件夹但数据(或模型)不存在,则不会从 Internet 下载,而是会引发错误。
完全删除临时文件夹即可解决
在 Mac 中,可以通过终端上的命令“打开 $TMPDIR”访问临时文件夹(参考:https://osxdaily.com/2018/08/17/where-temp-folder-mac-access/)。
文件夹的名字可以从报错中得到,可以轻松删除。
尝试使用 tensorflow_hub
中的 hub.load
函数时,出现 OSError: SavedModel file does not exist at:
错误。
奇怪的是几天前它还有效,所以我不太明白为什么我现在会收到这个错误。
重现代码:
import tensorflow as tf
import tensorflow_hub as hub
URL = 'https://tfhub.dev/google/universal-sentence-encoder/4'
embed = hub.load(URL)
收到特定错误:
OSError Traceback (most recent call last)
<ipython-input-11-dfb80f0299b2> in <module>
1 URL = 'https://tfhub.dev/google/universal-sentence-encoder/4'
----> 2 embed = hub.load(URL)
~/opt/anaconda3/lib/python3.7/site-packages/tensorflow_hub/module_v2.py in load(handle, tags)
100 if tags is None and is_hub_module_v1:
101 tags = []
--> 102 obj = tf_v1.saved_model.load_v2(module_path, tags=tags)
103 obj._is_hub_module_v1 = is_hub_module_v1 # pylint: disable=protected-access
104 return obj
~/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/saved_model/load.py in load(export_dir, tags)
576 ValueError: If `tags` don't match a MetaGraph in the SavedModel.
577 """
--> 578 return load_internal(export_dir, tags)
579
580
~/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/saved_model/load.py in load_internal(export_dir, tags, loader_cls)
586 tags = nest.flatten(tags)
587 saved_model_proto, debug_info = (
--> 588 loader_impl.parse_saved_model_with_debug_info(export_dir))
589
590 if (len(saved_model_proto.meta_graphs) == 1 and
~/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/saved_model/loader_impl.py in parse_saved_model_with_debug_info(export_dir)
54 parsed. Missing graph debug info file is fine.
55 """
---> 56 saved_model = _parse_saved_model(export_dir)
57
58 debug_info_path = os.path.join(
~/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/saved_model/loader_impl.py in parse_saved_model(export_dir)
111 (export_dir,
112 constants.SAVED_MODEL_FILENAME_PBTXT,
--> 113 constants.SAVED_MODEL_FILENAME_PB))
114
115
OSError: SavedModel file does not exist at: /var/folders/77/rvfl368x44s51r8dc3b6l2rh0000gn/T/tfhub_modules/063d866c06683311b44b4992fd46003be952409c/{saved_model.pbtxt|saved_model.pb}
因此,只需删除该文件夹并 运行 hub.load() 函数再次解决问题
我已经尝试过上述解决方案,但它对我不起作用...
这是有效的方法:
- 使用资产、变量和 .pb 检查点文件从 tfhub.dev 下载模型。
- 确保导入 tensorflow_text 模块!
import tensorflow_text
- 在hub.load()语句中指定下载的文件夹路径,如:
model = hub.load("/Users/bilguun/Desktop/universal-sentence-encoder-multilingual-large_3/")
我使用的是 i3d = hub.load(https://tfhub.dev/deepmind/i3d-kinetics-400/1).signatures['default']
如图所示 here
这种加载模型的方法在那天有效,但几天后我得到了同样的错误:OSError: SavedModel file does not exist at: C:\Users\catal\AppData\Local\Temp\tfhub_modules2225fb776e28d6d64ac605ab6be03f18dd2027{saved_model.pbtxt|saved_model.pb}
经过一些研究,我了解到 saved_model 文件位置(在错误中指定)是临时的,因此即使该文件夹仍然存在,其中也不再有 saved_model.pb。所以我下载了这里链接的模型:https://tfhub.dev/deepmind/i3d-kinetics-400/1 并设置了 i3d = hub.load("C:\absolute_path_to_saved_model_folder").signatures['default']
并且它起作用了。
所以使用 Bilguun 的回答对我来说真的很有帮助。
出现这种错误是因为下载的模型保存在应用程序创建的临时文件夹中。
由于是临时文件夹,保存在其中的模型可能会被删除,甚至可以删除文件夹。
当调用hub.load()命令时,程序会检查临时文件夹,如果找不到该文件夹,程序将从互联网上下载数据。
但是如果找到文件夹但数据(或模型)不存在,则不会从 Internet 下载,而是会引发错误。
完全删除临时文件夹即可解决
在 Mac 中,可以通过终端上的命令“打开 $TMPDIR”访问临时文件夹(参考:https://osxdaily.com/2018/08/17/where-temp-folder-mac-access/)。 文件夹的名字可以从报错中得到,可以轻松删除。