【问题标题】:SavedModel file does not exist when using Tensorflow hub使用 Tensorflow hub 时 SavedModel 文件不存在
【发布时间】:2020-11-14 14:55:52
【问题描述】:

在尝试使用 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}

【问题讨论】:

    标签: file tensorflow directory tensorflow-hub oserror


    【解决方案1】:

    因此,只需删除该文件夹并再次运行 hub.load() 函数即可解决问题

    【讨论】:

    • 需要删除哪个文件夹?我的错误:SavedModel文件不存在时:/tmp/tfhub_modules/063d866c06683311b44b4992fd46003be952409c/{saved_model.pbtxt|saved_model.pb}我看到2个空文件夹命名为“资产”和“变量”,在“/ tmp目录/ tfhub_modules / 063d866c06683311b44b4992fd46003be952409c”
    • 我认为他指的是删除整个文件夹“.../tfhub_modules/063d866c06683311b44b4992fd46003be952409c”。
    • 谢谢,这对我有用。我删除了像“063d866c06683311b44b4992fd46003be952409c”这样的文件夹
    【解决方案2】:

    我已经尝试了上述解决方案,但它对我不起作用......

    以下是有效的方法:

    1. 从 tfhub.dev 下载带有资产、变量和 .pb 检查点文件的模型。
    2. 确保导入 tensorflow_text 模块!

    导入张量流文本

    1. hub.load()语句中指定下载的文件夹路径,如下:

    型号 = hub.load("/Users/bilguun/Desktop/universal-sentence-encoder-multilingual-large_3/")

    【讨论】:

      【解决方案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_modules \092225fb776e28d6d64ac605ab6be03f18dd2027{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 的回答对我来说确实很有帮助。

      【讨论】:

        【解决方案4】:

        发生这种错误是因为下载的模型保存在应用程序创建的临时文件夹中。

        由于是临时文件夹,保存在里面的模型可能会被删除,甚至文件夹也可以删除。

        当调用 hub.load() 命令时,程序会检查临时文件夹,如果没有找到该文件夹​​,程序将从互联网下载数据。

        但是如果找到文件夹并且数据(或模型)不存在,而不是从互联网下载,则会引发错误。

        完全删除临时文件夹即可解决。

        在 Mac 中,可以通过终端上的命令“open $TMPDIR”访问临时文件夹(参考:https://osxdaily.com/2018/08/17/where-temp-folder-mac-access/)。 文件夹的名称可以从引发的错误中获取,并且可以轻松删除。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-05
          • 1970-01-01
          • 2021-01-07
          • 2019-09-06
          • 2020-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多