【发布时间】:2017-04-20 11:14:26
【问题描述】:
我在 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)]]
【问题讨论】:
-
嗨@Dr.SantleCamilus ,您找到解决方案了吗?
-
是的,提及正确的输入和输出节点名称对于 android TF 演示的工作至关重要。一些较旧的 TF 训练代码可能不会在模型中包含这些名称。 JP Kim 的以下回答可以找到节点名称的存在。如果名称不存在,则需要迁移到新的 TF 训练代码以包含正确的节点名称。
-
我得到这样的输出 *[u'image_tensor=>Placeholder'] *
-
[u'image_tensor=>Placeholder'] 表示你的输入节点名是 ''image_tensor" (/定义optimize_for_interface时可以使用--input_names=image_tensor)
-
请使用 JP Kim 的以下答案检查模型中是否存在 softmax 节点。如果返回任何内容,请使用相同的名称作为输出名称。输出名称是生成CNN网络输出的特定节点。
标签: android tensorflow bazel