我使用tensorflows script optimize_for_inderence.py在ssd_mobilenet_v1_coco model上使用以下命令:
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它工作正常,但是如果我想要为Tensorboard或Inference使用创建的Tensorboard文件,它会给出以下错误:
ValueError: graph_def在节点u‘’ToFloat‘处无效:输入张量'image_tensor:0’不能将float32类型的张量转换为uint8类型的输入。
请参阅Tensorbaord可视化的原始图形:

如您所见,节点ToFloat直接出现在image_tensor输入之后。
所以很明显优化出了问题。但是什么呢?
发布于 2018-02-06 08:32:21
在加载由ExpandDims_6工具生成的模型文件时,我看到了一个类似的错误,即“节点input_feed:0的输入0从与预期的int64不兼容的input_feed:0中传递浮点”。
Pete在https://github.com/tensorflow/tensorflow/issues/8242上的评论“删除未使用节点的新图形转换方法可能更健壮?”似乎建议我们使用新的transform_graph工具。
在更新的optimize_for_inference移动文档https://www.tensorflow.org/mobile中没有提到TensorFlow工具,这也建议使用transform_graph工具。
就在我怀疑罪魁祸首在优化工具中时,我看到了你的问题。谢谢你..。刚刚试用了transform_graph工具,它既适用于转换后的模型,也适用于转换后进一步映射的模型。下面是我使用的三个冻结-转换-模映射命令:
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.pbhttps://stackoverflow.com/questions/48212068
复制相似问题