给定张量流模型图,如何查找输入节点和输出节点名称
tensorflow
6
0

我在Tensor Flow Camera Demo中使用自定义模型进行分类。我生成了一个.pb文件(序列化的protobuf文件),并且可以显示其中包含的巨大图形。要将此图转换为优化图,如[ https://www.oreilly.com/learning/tensorflow-on-android]中所述 ,可以使用以下过程:

$ bazel-bin/tensorflow/python/tools/optimize_for_inference  \
--input=tf_files/retrained_graph.pb \
--output=tensorflow/examples/android/assets/retrained_graph.pb
--input_names=Mul \
--output_names=final_result

在这里,如何从图形显示中找到input_names和output_names。当我不使用专有名称时,设备崩溃:

E/TensorFlowInferenceInterface(16821): Failed to run TensorFlow inference 
with inputs:[AvgPool], outputs:[predictions]

E/AndroidRuntime(16821): FATAL EXCEPTION: inference

E/AndroidRuntime(16821): java.lang.IllegalArgumentException: Incompatible 
shapes: [1,224,224,3] vs. [32,1,1,2048]

E/AndroidRuntime(16821):     [[Node: dropout/dropout/mul = Mul[T=DT_FLOAT, 
_device="/job:localhost/replica:0/task:0/cpu:0"](dropout/dropout/div, 
dropout/dropout/Floor)]]
参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

尝试这个:

运行python

>>> import tensorflow as tf
>>> gf = tf.GraphDef()
>>> gf.ParseFromString(open('/your/path/to/graphname.pb','rb').read())

然后

>>> [n.name + '=>' +  n.op for n in gf.node if n.op in ( 'Softmax','Placeholder')]

然后,您可以获得类似于以下内容的结果:

['Mul=>Placeholder', 'final_result=>Softmax']

但是我不确定这是关于错误消息的节点名称的问题。我猜您在加载图形文件时提供了错误的论据,或者您生成的图形文件有问题吗?

检查这部分:

E/AndroidRuntime(16821): java.lang.IllegalArgumentException: Incompatible 
shapes: [1,224,224,3] vs. [32,1,1,2048]

更新:对不起,如果您使用的是(重新)训练图,请尝试以下操作:

[n.name + '=>' +  n.op for n in gf.node if n.op in ( 'Softmax','Mul')]

似乎(重新)训练过的图将输入/输出操作名称保存为“ Mul”和“ Softmax”,而优化和/或量化的图将它们保存为“占位符”和“ Softmax”。

顺便说一句,根据彼得·沃登(Peter Warden)的文章,不建议在移动环境中使用经过重新训练的图形: https//petewarden.com/2016/09/27/tensorflow-for-mobile-poets/ 。由于性能和文件大小的问题,最好使用量化图或映射图,但我无法找到如何在android中加载映射图的方法...:((在android中加载优化/量化图没有问题)

收藏
评论

最近我直接从tensorflow遇到了这个选项:

bazel build tensorflow/tools/graph_transforms:summarize_graph    
bazel-bin/tensorflow/tools/graph_transforms/summarize_graph
--in_graph=custom_graph_name.pb
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号