Tensorflow Graph Transform Tool quantize_nodes 引用了不存在的“帽子”节点名称?

Posted

技术标签:

【中文标题】Tensorflow Graph Transform Tool quantize_nodes 引用了不存在的“帽子”节点名称?【英文标题】:Tensorflow Graph Transform Tool quantize_nodes references nonexistant "hat" node names? 【发布时间】:2018-05-25 12:41:12 【问题描述】:

我一直在使用这个简单的脚本来转储一个 .pb 图形以加载到 tensorboard 中查看:

import sys
import os
import os.path
import tensorflow as tf
from tensorflow.python.platform import gfile

model_filename = sys.argv[1]
output_dirname = sys.argv[2]

if not os.path.exists(output_dirname):
    os.makedirs(output_dirname)
with tf.Session() as sess:
    with gfile.FastGFile(model_filename, 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        _ = tf.import_graph_def(graph_def, name='')
    writer = tf.summary.FileWriter(output_dirname, tf.get_default_graph())
    writer.close()

如果您使用图形转换工具至少 TF 1.2,这对于可视化图形中发生的情况非常有用。最近尝试master时,遇到以下问题(以https://storage.googleapis.com/download.tensorflow.org/models/inception_dec_2015.zip为例):

bazel-bin/tensorflow/tools/graph_transforms/transform_graph \
  --in_graph=tensorflow_inception_graph.pb \
  --out_graph=inception_v3_quantized.pb \
  --inputs="Mul" \
  --outputs='softmax' \
  --transforms='add_default_attributes 
    strip_unused_nodes(type=float, shape="1,299,299,3") 
    remove_nodes(op=Identity, op=CheckNumerics)  
    fold_constants(ignore_errors=true) 
    fold_batch_norms 
    fold_old_batch_norms 
    quantize_weights 
    quantize_nodes 
    strip_unused_nodes 
    sort_by_execution_order'
python dump_for_tensorboard.py inception_v3_quantized.pb /tmp/dump_logdir

在 TensorFlow 1.2 及更早版本上,这可以正常工作。我得到一个可以指向张量板的目录。但在主人我得到这个:

2017-12-11 15:56:39.159333: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
Traceback (most recent call last):
  File "../dump_for_tensorboard.py", line 16, in <module>
    _ = tf.import_graph_def(graph_def, name='')
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/importer.py", line 369, in import_graph_def
    'Control input %r not found in graph_def.' % (input_name,)))
ValueError: graph_def is invalid at node u'conv/Conv2D_eightbit/Mul__port__0/reshape_dims': Control input '^Mul:0' not found in graph_def..

这也发生在我使用图形转换工具后使用的其他脚本中。

由于这是在图表的开头,我不确定它是否与输入节点有关,或者我是否也会为图表中的其他节点得到这个。

在旧版本的 tensorflow 上,比如 1.2 分支,这个脚本可以正常工作。

看起来这可能与提交 d0a5d885 相关(因为这会在节点名称前插入“^”),但这是一个相当大的合并提交。

【问题讨论】:

【参考方案1】:

此问题似乎在此处被跟踪 https://github.com/tensorflow/tensorflow/pull/14527 并刚刚合并到master中。

如果你克隆 repo 并再次构建 transform_graph 工具,我相信这个问题现在会得到解决。

【讨论】:

以上是关于Tensorflow Graph Transform Tool quantize_nodes 引用了不存在的“帽子”节点名称?的主要内容,如果未能解决你的问题,请参考以下文章

TF 2 API 中的 tensorflow.contrib.graph_editor?

AttributeError:模块“tensorflow”没有属性“reset_default_graph”

如何修复“AttributeError:模块'tensorflow'没有属性'get_default_graph'”?

[tensorflow] 通过Class的形式实现网络的创建加深理解graph和session

Tensorflow Session&Graph学习笔记

简单记录Tensorflow中Graph和Session的关系