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

Dan*_*haw 9 tensorflow

是否可以将该freeze_graph.py工具与saver.saveTensorFlow 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)
Run Code Online (Sandbox Code Playgroud)

这会生成一个包含以下内容

checkpoint
output
output-16640.data-00000-of-00001
output-16640.index
output-16640.meta
Run Code Online (Sandbox Code Playgroud)

output包含中间培训步骤文件的目录在哪里.其余的是文件.

我的理解是这是一个元图(.meta文件)及其变量(.data*文件)的保护程序v2格式.这些文件包含该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
Run Code Online (Sandbox Code Playgroud)

freeze_graph.py代码包括注释'input_checkpoint' may be a prefix if we're using Saver V2 format的位置旁边的--input_checkpoint参数使用,因此我还以为上面的尝试的第三个会工作,但,唉,没有.

Dan*_*haw 12

正如@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>
Run Code Online (Sandbox Code Playgroud)

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