【发布时间】:2017-05-09 22:18:46
【问题描述】:
我是 TensorFlow 新手。我正在尝试使用检查点文件导入经过训练的 TensorFlow 网络。我正在使用的网络有一个自定义操作,当我在 Python 中使用它时可以正常工作。但是,我必须冻结图表,因为我必须使用 C++ API。我正在使用 TensorFlow 基本目录中的以下命令调用 freeze_graph:
bazel-bin/tensorflow/python/tools/freeze_graph --input_graph=<local path>/data/graph_vgg.pb --input_checkpoint=<local path>/data/VGGnet_fast_rcnn_iter_70000.ckpt --output_node_names="cls_prob,bbox_pred" --output_graph=<local path>/graph_frozen.pb
但是,当我尝试冻结图表时出现以下错误。
Traceback (most recent call last):
File "<local path>/tensorflow/bazel-bin/tensorflow/python/tools/freeze_graph.runfiles/org_tensorflow/tensorflow/python/tools/freeze_graph.py", line 202, in <module>
app.run(main=main, argv=[sys.argv[0]] + unparsed)
File "<local path>/tensorflow/bazel-bin/tensorflow/python/tools/freeze_graph.runfiles/org_tensorflow/tensorflow/python/platform/app.py", line 44, in run
_sys.exit(main(_sys.argv[:1] + flags_passthrough))
File "<local path>/tensorflow/bazel-bin/tensorflow/python/tools/freeze_graph.runfiles/org_tensorflow/tensorflow/python/tools/freeze_graph.py", line 134, in main
FLAGS.variable_names_blacklist)
File "<local path>/tensorflow/bazel-bin/tensorflow/python/tools/freeze_graph.runfiles/org_tensorflow/tensorflow/python/tools/freeze_graph.py", line 99, in freeze_graph
_ = importer.import_graph_def(input_graph_def, name="")
File "<local path>/tensorflow/bazel-bin/tensorflow/python/tools/freeze_graph.runfiles/org_tensorflow/tensorflow/python/framework/importer.py", line 260, in import_graph_def
raise ValueError('No op named %s in defined operations.' % node.op)
ValueError: No op named RoiPool in defined operations.
输入图有一个节点,其操作类型为 RoiPool,TensorFlow 无法识别该节点。我调查了引发此错误的代码,它看起来像是操作未在 TensorFlow 中注册。我有内置的.so 文件。我应该把它复制到某个地方吗?我在网上找不到类似的东西。任何帮助或指示都会很棒。我在这个问题上花了很多时间。该代码在 python 中运行良好,使用 op 的层位于项目目录中。请帮助我了解我需要做什么才能使其正常工作。
编辑:这是网络中使用的code of custom op。
【问题讨论】:
-
您需要将自定义操作链接到冻结图二进制文件中。您当然可以通过编辑 freeze_graph 二进制文件的构建文件并使用自定义操作作为额外依赖项进行重建来做到这一点。您可能还想在 github 上提交功能请求,要求在 freeze_graph 中提供一些更易于使用的自定义操作支持。
-
@PeterHawkins 感谢您的回复。我还有一个问题:存储
user_ops的首选位置是:<tensorflow_base>/tensorflow/user_ops或<tensorflow_base>/tensorflow/core/user_ops。 -
我尝试了建议并使用我的 user_op 作为依赖项构建了 freeze_graph。 Freeze_graph 仍然给出同样的错误。还有其他建议或建议吗?
标签: python c++ tensorflow