加载.pb Tensorflow模型时出错

时间:2020-09-27 16:54:42

标签: python tensorflow keras tf.keras

我在Windows 10计算机上创建了一个tensorflow模型并使用以下命令将其保存:

model.save('myfolder')

在文件夹myfolder中,我得到:

- saved_model.pb
- Variables folder
- Assets folder

现在我正尝试在Linux机器上加载模型,因此我将文件夹路径作为加载它的模型路径:

model = tf.keras.models.load_model('myfolder')

它实际上检测到了模型,但是抛出了这个巨大的错误:

2020-09-27 18:43:57.980054: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond/while' has 13 outputs but the _output_shapes attribute specifies shapes for 44 outputs. Output shapes may be inaccurate.
2020-09-27 18:44:02.211495: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond/while' has 13 outputs but the _output_shapes attribute specifies shapes for 44 outputs. Output shapes may be inaccurate.
2020-09-27 18:44:02.376792: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond' has 5 outputs but the _output_shapes attribute specifies shapes for 45 outputs. Output shapes may be inaccurate.
2020-09-27 18:44:16.361762: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond' has 5 outputs but the _output_shapes attribute specifies shapes for 45 outputs. Output shapes may be inaccurate.
2020-09-27 18:44:18.184022: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond/while' has 13 outputs but the _output_shapes attribute specifies shapes for 44 outputs. Output shapes may be inaccurate.
2020-09-27 18:44:18.331177: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond' has 5 outputs but the _output_shapes attribute specifies shapes for 45 outputs. Output shapes may be inaccurate.
2020-09-27 18:44:19.087747: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond/while' has 13 outputs but the _output_shapes attribute specifies shapes for 44 outputs. Output shapes may be inaccurate.
2020-09-27 18:44:22.933245: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond/while' has 13 outputs but the _output_shapes attribute specifies shapes for 44 outputs. Output shapes may be inaccurate.
2020-09-27 18:44:23.074951: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond' has 5 outputs but the _output_shapes attribute specifies shapes for 45 outputs. Output shapes may be inaccurate.
2020-09-27 18:44:28.451176: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond/while' has 13 outputs but the _output_shapes attribute specifies shapes for 44 outputs. Output shapes may be inaccurate.
2020-09-27 18:44:28.597107: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond' has 5 outputs but the _output_shapes attribute specifies shapes for 45 outputs. Output shapes may be inaccurate.
2020-09-27 18:44:33.579605: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond/while' has 13 outputs but the _output_shapes attribute specifies shapes for 44 outputs. Output shapes may be inaccurate.
2020-09-27 18:44:33.742273: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond' has 5 outputs but the _output_shapes attribute specifies shapes for 45 outputs. Output shapes may be inaccurate.
2020-09-27 18:44:51.043732: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond/while' has 13 outputs but the _output_shapes attribute specifies shapes for 44 outputs. Output shapes may be inaccurate.
2020-09-27 18:44:57.151346: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond' has 5 outputs but the _output_shapes attribute specifies shapes for 45 outputs. Output shapes may be inaccurate.
2020-09-27 18:45:00.168905: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond/while' has 13 outputs but the _output_shapes attribute specifies shapes for 44 outputs. Output shapes may be inaccurate.
2020-09-27 18:45:00.312153: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond' has 5 outputs but the _output_shapes attribute specifies shapes for 45 outputs. Output shapes may be inaccurate.
2020-09-27 18:45:01.051383: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond/while' has 13 outputs but the _output_shapes attribute specifies shapes for 44 outputs. Output shapes may be inaccurate.
2020-09-27 18:45:01.190471: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond' has 5 outputs but the _output_shapes attribute specifies shapes for 45 outputs. Output shapes may be inaccurate.
2020-09-27 18:45:01.395016: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond/while' has 13 outputs but the _output_shapes attribute specifies shapes for 44 outputs. Output shapes may be inaccurate.
2020-09-27 18:45:01.542457: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond' has 5 outputs but the _output_shapes attribute specifies shapes for 45 outputs. Output shapes may be inaccurate.
2020-09-27 18:45:05.023475: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond/while' has 13 outputs but the _output_shapes attribute specifies shapes for 44 outputs. Output shapes may be inaccurate.
2020-09-27 18:45:05.235829: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond' has 5 outputs but the _output_shapes attribute specifies shapes for 45 outputs. Output shapes may be inaccurate.
2020-09-27 18:45:05.568045: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond' has 5 outputs but the _output_shapes attribute specifies shapes for 45 outputs. Output shapes may be inaccurate.
2020-09-27 18:45:06.300144: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond/while' has 13 outputs but the _output_shapes attribute specifies shapes for 44 outputs. Output shapes may be inaccurate.
2020-09-27 18:45:06.439828: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond' has 5 outputs but the _output_shapes attribute specifies shapes for 45 outputs. Output shapes may be inaccurate.
2020-09-27 18:45:11.585829: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond/while' has 13 outputs but the _output_shapes attribute specifies shapes for 44 outputs. Output shapes may be inaccurate.
2020-09-27 18:45:11.729289: W tensorflow/core/graph/graph_constructor.cc:772] Node 'cond' has 5 outputs but the _output_shapes attribute specifies shapes for 45 outputs. Output shapes may be inaccurate.
Traceback (most recent call last):
  File "main.py", line 95, in <module>
    model = tf.keras.models.load_model('model')
  File "/home/.local/lib/python3.7/site-packages/tensorflow_core/python/keras/saving/save.py", line 150, in load_model
    return saved_model_load.load(filepath, compile)
  File "/home/.local/lib/python3.7/site-packages/tensorflow_core/python/keras/saving/saved_model/load.py", line 89, in load
    model = tf_load.load_internal(path, loader_cls=KerasObjectLoader)
  File "/home/.local/lib/python3.7/site-packages/tensorflow_core/python/saved_model/load.py", line 541, in load_internal
    export_dir)
  File "/home/.local/lib/python3.7/site-packages/tensorflow_core/python/keras/saving/saved_model/load.py", line 118, in __init__
    super(KerasObjectLoader, self).__init__(*args, **kwargs)
  File "/home/.local/lib/python3.7/site-packages/tensorflow_core/python/saved_model/load.py", line 121, in __init__
    self._load_all()
  File "/home/.local/lib/python3.7/site-packages/tensorflow_core/python/saved_model/load.py", line 239, in _load_all
    node, setter = self._recreate(proto)
  File "/home/.local/lib/python3.7/site-packages/tensorflow_core/python/saved_model/load.py", line 322, in _recreate
    return factory[kind]()
  File "/home/.local/lib/python3.7/site-packages/tensorflow_core/python/saved_model/load.py", line 309, in <lambda>
    "user_object": lambda: self._recreate_user_object(proto.user_object),
  File "/home/.local/lib/python3.7/site-packages/tensorflow_core/python/saved_model/load.py", line 328, in _recreate_user_object
    return self._recreate_base_user_object(proto)
  File "/home/.local/lib/python3.7/site-packages/tensorflow_core/python/keras/saving/saved_model/load.py", line 216, in _recreate_base_user_object
    return revived_cls._init_from_metadata(metadata)  # pylint: disable=protected-access
  File "/home/.local/lib/python3.7/site-packages/tensorflow_core/python/keras/saving/saved_model/load.py", line 297, in _init_from_metadata
    revived_obj = cls(**init_args)
  File "/home/.local/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/input_layer.py", line 86, in __init__
    batch_size = batch_input_shape[0]
KeyError: 0

我已经从GitHub搜索了Tensorflow问题,但是还没有发现任何有趣的东西。我看到SO answer推荐使用加载的模型的权重创建一个新模型,但我什至无法这样做,因为在加载过程中会出错。

1 个答案:

答案 0 :(得分:1)

我刚刚解决了同样的问题。

检查用于训练的Tensorflow的版本并保存模型以及用于加载模型的版本。它们必须相同,或至少为compatible versions