代码之家  ›  专栏  ›  技术社区  ›  nickponline

冻结推理图pb和保存模型pb的区别是什么?

  •  2
  • nickponline  · 技术社区  · 6 年前

    我有一个经过训练的模型(更快的r-cnn),我用 export_inference_graph.py 用于推理。我试着去理解 frozen_inference_graph.pb saved_model.pb 还有 model.ckpt* 文件夹。我也见过 .pbtxt 陈述。

    我试着通读了一遍,但找不到答案: https://www.tensorflow.org/extend/tool_developers/

    这些文件都包含什么? 哪些可以转换成其他的? 每个人的理想目的是什么?

    2 回复  |  直到 6 年前
        1
  •  3
  •   T. Kelher    6 年前

    fronted_inference_graph.pb是一个不能再训练的冻结图,它定义了graphdef,实际上是一个序列化图,可以用以下代码加载:

    def load_graph(frozen_graph_filename):
        with tf.gfile.GFile(frozen_graph_filename, "rb") as f:
            graph_def = tf.GraphDef()
            graph_def.ParseFromString(f.read())
            return graph_def
    tf.import_graph_def(load_graph("frozen_inference_graph.pb"))
    

    保存的模型是由tf.saved_model.builder生成的模型,必须导入到会话中,此文件包含具有所有训练权重的完整图(就像冻结的图一样),但在此可以进行训练,并且此图未序列化,需要由此代码段加载。[]是标记常量,可以由 saved_model_cli . 这个模型也经常用于预测,比如google ml engine par示例:

    with tf.Session() as sess:
        tf.saved_model.loader.load(sess, [], "foldername to saved_model.pb, only folder")
    

    ckpt文件是在培训期间生成的检查点,用于恢复培训或在培训后出现问题时进行备份。如果您有一个保存的模型和一个冻结的图,那么您可以忽略它。

    .pbtxt文件基本上与前面讨论的模型相同,但随后是可读的,而不是二进制的。这些也可以忽略。

    要回答转换问题: 保存的模型可以转换为冻结图,反之亦然,尽管从冻结图中提取的保存的模型也不可训练,但其存储方式为保存的模型格式。检查点可以读入并加载到会话中,在那里您可以从它们构建保存的模型。

    希望我能帮忙,任何问题,请尽管问!

        2
  •  0
  •   vipin bansal    6 年前

    如前所述,freezed_graph.pb包括两项内容: 1。图形定义 2。训练参数

    而save_model.pb,只有图形定义。

    这就是为什么如果您检查两个.pb文件的大小,freezed_graph.pb的大小总是更大。