如何在TensorFlow v1中使用freeze_graph.py工具

时间:2017-02-24 12:55:52

标签: tensorflow

是否可以将freeze_graph.py工具与通过saver.save在TensorFlow v1中保存的模型一起使用?如果是这样,怎么样?

我的代码大致如下:

supervisor = tf.train.Supervisor(logdir=output_directory_path)

with supervisor.managed_session() as session:
    # train the model here
    supervisor.saver.save(session, output_directory_path)

这会生成一个包含以下内容的目录:

checkpoint
output
output-16640.data-00000-of-00001
output-16640.index
output-16640.meta

其中output是包含中间培训步骤文件的目录。其余的是文件。

我的理解是这是一个以保护程序v2格式的元图(.meta文件)及其变量(.data*文件)。这些文件包含freeze_graph.py工具所需的数据,但不清楚如何告诉freeze_graph.py工具从这些文件加载​​数据。

所有这些尝试都会产生错误消息Input checkpoint '...' doesn't exist!

python freeze_graph.py --input_checkpoint checkpoint --output_graph /tmp/out
python freeze_graph.py --input_checkpoint . --output_graph /tmp/out
python freeze_graph.py --input_checkpoint output-16640 --output_graph /tmp/out

freeze_graph.py代码包含使用'input_checkpoint' may be a prefix if we're using Saver V2 format参数的旁边的注释--input_checkpoint所以我原以为上述尝试中的第三个会起作用,但是,唉,不。

1 个答案:

答案 0 :(得分:11)

正如@mrry在评论中指出的那样,这个特定问题的答案是在输出前缀前加上./。完成此操作后,我发现还必须为--input_graph--output_name_names参数提供值。

该命令现在看起来像

python freeze_graph.py \
    --input_graph output/graph.pbtxt \
    --input_checkpoint ./output-16640 \
    --output_graph /tmp/out \
    --output_node_names <name>

不幸的是,我的图表包含预加载数据的变量,导致freeze_graph.py失败并显示Attempting to use uninitialized value ...之类的消息;解决这个后续问题超出了这个问题的范围。