如何将.ckpt移植到.pb以用于Tensorflow for Mobile Poets

时间:2017-07-11 18:03:57

标签: python ios tensorflow

我正在尝试将预先训练的InceptionV3模型(.ckpt)从Open Images Dataset转换为.pb文件,以便在Tensorflow for Mobile Poets示例中使用。我搜索了网站以及GitHub存储库,但没有找到任何确凿的答案。

(OpenImages Inception Model:https://github.com/openimages/dataset

感谢您的回复。

1 个答案:

答案 0 :(得分:1)

下面我已经提到了一些我可能会提供帮助的草稿文档。需要注意的另一件事是,如果您正在使用Slim,那么您最初需要运行export_inference_graph.py来获取.pb GraphDef文件。

在大多数情况下,使用TensorFlow训练模型将为您提供包含GraphDef文件(通常以.pb或.pbtxt扩展名结尾)和一组检查点文件的文件夹。移动或嵌入式部署所需的是单个GraphDef文件,该文件已被“冻结”,或者将其变量转换为内联常量,因此所有内容都在一个文件中。 要处理转换,您需要freeze_graph.py脚本,该脚本保存在tensorflow / pythons / tools / freeze_graph.py中。你会像这样运行它:

bazel build tensorflow/tools:freeze_graph bazel-bin/tensorflow/tools/freeze_graph \ --input_graph=/tmp/model/my_graph.pb \ --input_checkpoint=/tmp/model/model.ckpt-1000 \ --output_graph=/tmp/frozen_graph.pb \ --input_node_names=input_node \ --output_node_names=output_node \

input_graph参数应指向包含模型体系结构的GraphDef文件。您的GraphDef可能已经以文本格式存储在磁盘上,在这种情况下,它可能以'.pbtxt'而不是'.pb'结尾,您应该在命令中添加额外的--input_binary=false标志。 input_checkpoint应该是最近保存的检查点。如检查点部分所述,您需要在此处为​​检查点集提供公共前缀,而不是完整文件名。 output_graph定义将保存生成的冻结GraphDef的位置。因为它可能包含很多以文本格式占用大量空间的权重值,所以它总是保存为二进制protobuf。 output_node_names是要从中提取图表结果的节点名称列表。这是必要的,因为冻结过程需要了解图形的哪些部分实际需要,以及哪些是培训过程的工件,如摘要操作。仅保留有助于计算给定输出节点的操作。如果您知道如何使用图形,那么这些应该只是您传递到Session :: Run()作为获取目标的节点的名称。如果您没有这方面的信息,可以通过运行summarize_graph工具获得有关可能输出的一些建议。 由于TensorFlow的输出格式随着时间的推移而发生了变化,因此还有其他一些不太常用的标志,例如input_saver,但希望您不需要在使用现代版本的框架训练的图表上使用这些标志。 / p>