Tensorflow:如何将.meta、.data和.index模型文件转换为一个graph.pb文件
在tensorflow中,从头开始的培训产生了以下6个文件:Tensorflow:如何将.meta、.data和.index模型文件转换为一个graph.pb文件,graph,tensorflow,model,meta,checkpoint,Graph,Tensorflow,Model,Meta,Checkpoint,在tensorflow中,从头开始的培训产生了以下6个文件: events.out.tfevents.1503494436.06L7-BRM738 model.ckpt-22480.meta 检查站 型号.ckpt-22480.data-00000-of-00001 model.ckpt-22480.index graph.pbtxt 我想将它们(或仅将所需的)转换为一个文件graph.pb,以便能够将其传输到我的Android应用程序 我尝试了脚本freeze\u graph.py,但它已经需
我尝试了脚本
freeze\u graph.py
,但它已经需要input.pb文件作为输入,而我没有该文件。(我只有前面提到的这6个文件)。如何继续获取此冻结图.pb文件?我看到了几个线程,但没有一个线程对我有效。您可以使用这个简单的脚本来实现这一点。但必须指定输出节点的名称
import tensorflow as tf
meta_path = 'model.ckpt-22480.meta' # Your .meta file
output_node_names = ['output:0'] # Output nodes
with tf.Session() as sess:
# Restore the graph
saver = tf.train.import_meta_graph(meta_path)
# Load weights
saver.restore(sess,tf.train.latest_checkpoint('path/of/your/.meta/file'))
# Freeze the graph
frozen_graph_def = tf.graph_util.convert_variables_to_constants(
sess,
sess.graph_def,
output_node_names)
# Save the frozen graph
with open('output_graph.pb', 'wb') as f:
f.write(frozen_graph_def.SerializeToString())
如果您不知道输出节点的名称,有两种方法
output_node_names=[tf.get_default_graph().as_graph_def().node中n的n.name]
(请注意,您必须在convert_variables_to_constants
call前面加上这一行。)
但我认为这是一种不寻常的情况,因为如果您不知道输出节点,就不能实际使用图形。因为它可能对其他人有帮助,我也在github上的答案后面回答;-)。 我认为您可以尝试类似的方法(使用tensorflow/python/tools中的freeze_graph脚本): 这里的重要标志是--input_binary=false,因为文件graph.pbtxt是文本格式的。我认为它对应于所需的graph.pb,它在二进制格式中是等效的 关于输出节点名称,这让我很困惑,因为我在这一部分仍然有一些问题,但是您可以使用tensorflow中的Summary\u graph脚本,它可以将pb或pbtxt作为输入 问候,
Steph我尝试了冻结的\u graph.py脚本,但output\u node\u name参数完全令人困惑。作业失败 所以我尝试了另一个:导出推理图.py。 这一切都如期而至
python -u /tfPath/models/object_detection/export_inference_graph.py \
--input_type=image_tensor \
--pipeline_config_path=/your/config/path/ssd_mobilenet_v1_pets.config \
--trained_checkpoint_prefix=/your/checkpoint/path/model.ckpt-50000 \
--output_directory=/output/path
我使用的tensorflow安装包来自于:
首先,使用以下代码生成graph.pb文件。 使用tf.Session()作为sess: 然后,使用汇总图获取输出节点名称。 最后,使用
python freeze_graph.py --input_graph=/path/to/graph.pbtxt --input_checkpoint=/path/to/model.ckpt-22480 --input_binary=false --output_graph=/path/to/frozen_graph.pb --output_node_names="the nodes that you want to output e.g. InceptionV3/Predictions/Reshape_1 for Inception V3 "
生成冻结图。请参见此处:如何获得
graph.pbtxt
?如果它是模型的图形,则可以使用freeze.py
将其冻结.pbtxt
。完成培训后,我在培训日志中找到的graph.pbtxt。然而,在训练结束之前,它被保存了下来。在图形的先前保存状态中检查它。对于从头开始的培训,我使用了脚本:train\u image\u classifier.py。对于培训,我使用了自己的图片(.jpg),在使用脚本build_image_data.py之前,我必须将其转换为.tfrecord文件。是否有一种简单的方法获取输出节点名称?我遇到此错误,可能是因为我不确定我的输出节点名称是否正确<代码>文件“/path/to/saver.py”,第1796行,在restore raise VALUERROR(“无保存路径时无法加载保存路径”)@craq在当前目录中似乎找不到任何检查点(路径名为
),请尝试明确设置检查点的路径:saver.restore(sess,'path/to/model.ckpt'))
。如果有人来到这里,遇到与我相同的问题,即尝试冻结图形时遇到的问题,“尝试使用未初始化值”将失败,只需在加载权重后添加init=tf.global\u variables\u initializer()sess.run(init)
。@通常并非所有可训练变量都是您需要的输出节点。此外,输出节点可能根本不是变量。例如,在表达式a*x+1
的图形中,输出节点是add
。hi@kennynut这是什么--管道配置路径
?这种文件写的是什么,你能给我举个例子吗?我已经使用tensorflow一段时间了,但从来没有需要使用这样的配置文件。pipeline_config_路径为冻结的图形提供了基本配置,以使其正常工作。说,它通常带有默认名称-pipeline.config--位于google git hub存储库中模型缩放间压缩包的默认根路径下。ssd\u mobilnet\u v1\u coco替代-out\u节点应该使用什么_name@PratikKhadloya你能回答我上面的评论吗?示例用法:python freeze\u graph.py--input_graph=some_graph_def.pb--input_checkpoint=model.ckpt-8361242--output_graph=/tmp/freezed_graph.pb--output_node_names=softmax
# Restore the graph
_ = tf.train.import_meta_graph(args.input)
# save graph file
g = sess.graph
gdef = g.as_graph_def()
tf.train.write_graph(gdef, ".", args.output, True)
python freeze_graph.py --input_graph=/path/to/graph.pbtxt --input_checkpoint=/path/to/model.ckpt-22480 --input_binary=false --output_graph=/path/to/frozen_graph.pb --output_node_names="the nodes that you want to output e.g. InceptionV3/Predictions/Reshape_1 for Inception V3 "