Tensorflow:如何将.meta、.data和.index模型文件转换为一个graph.pb文件

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,但它已经需

在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
    ,但它已经需要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())
    
    如果您不知道输出节点的名称,有两种方法

  • 您可以使用console实用程序或使用console实用程序浏览图形并查找名称

  • 您可以使用所有节点作为输出节点,如下所示

  • 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 "