python – 在冻结图上使用optimize_for_inference.py后使用Model时出错

我使用以下命令在ssd_mobilenet_v1_coco模型上使用tensorflows脚本optimize_for_inderence.py:

python -m tensorflow.python.tools.optimize_for_inference \
    --input /path/to/frozen_inference_graph.pb \
    --output /path/to/optimized_inference_graph.pb \
    --input_names=image_tensor \
    --output_names=detection_boxes,detection_scores,num_detections,detection_classes

它工作没有错误,但如果我想使用创建的Model .pb文件Tensorboard或推理,它会给我以下错误:

ValueError: graph_def is invalid at node u’ToFloat’: Input tensor ‘image_tensor:0’ Cannot convert a tensor of type float32 to an input of type uint8.

查看Tensorbaord可视化的原始图表:

正如您所看到的,节点ToFloat直接来自image_tensor输入

因此,优化显然出现了问题.但是什么?

解决方法:

我在加载optimize_for_inference工具生成的模型文件时看到了类似的错误“节点ExpandDims_6的输入0从input_feed传递浮点数:0与预期的int64不兼容”.

Pete的评论“删除未使用节点的新图变换方法可能更强大?
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms/#optimizing-for-deploymenthttps://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms/#optimizing-for-deployment”似乎建议我们应该使用新的transform_graph工具.

在更新的TensorFlow Mobile文档https://www.tensorflow.org/mobile中没有提及optimize_for_inference工具也建议使用transform_graph工具.

就在我怀疑罪魁祸首是在优化工具中时,我看到了你的问题.谢谢你.只是尝试了transform_graph工具,它既可以使用转换后的模型,也可以在转换后进一步记忆模型.下面是我使用的3个命令freeze-transform-memmapped:

python tensorflow/python/tools/freeze_graph.py  \
--input_meta_graph=/tmp/ckpt4.meta \
--input_checkpoint=/tmp/ckpt4 \
--output_graph=/tmp/ckpt4_frozen.pb \
--output_node_names="softmax,lstm/initial_state,lstm/state" \
--input_binary=true

bazel-bin/tensorflow/tools/graph_transforms/transform_graph \
--in_graph=/tmp/ckpt4_frozen.pb \
--out_graph=/tmp/ckpt4_frozen_transformed.pb \
--inputs="convert_image/Cast,input_feed,lstm/state_feed" \
--outputs="softmax,lstm/initial_state,lstm/state" \
--transforms='
      strip_unused_nodes(type=float, shape="1,299,299,3")
      fold_constants(ignore_errors=true) 
      fold_batch_norms
      fold_old_batch_norms'  


bazel-bin/tensorflow/contrib/util/convert_graphdef_memmapped_format \
--in_graph=/tmp/ckpt4_frozen_transformed.pb \
--out_graph=/tmp/ckpt4_frozen_transformed_memmapped.pb
上一篇:C#-MySQL预处理程序优化


下一篇:c#-Visual Studio 2017中的高级代码格式