是否可以将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
所以我原以为上述尝试中的第三个会起作用,但是,唉,不。
答案 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 ...
之类的消息;解决这个后续问题超出了这个问题的范围。