Tensorflow:.ckpt文件和.ckpt.meta和.ckpt.index以及.pb文件之间的关系是什么

时间:2017-06-13 08:50:57

标签: python tensorflow

我使用saver=tf.train.Saver()来保存我训练过的模型,我得到了三种名为的文件:

  • .ckpt.meta
  • .ckpt.index
  • .ckpt.data

一个名为:

的文件
  • 检查点

.ckpt 文件的连接是什么?

我看到有人用.ckpt文件保存模型,我不知道怎么做。 如何将模型保存为.pb文件?

1 个答案:

答案 0 :(得分:30)

  • .ckpt文件是saver.save(sess)的旧版本输出,相当于您的.ckpt-data(见下文)

  • “checkpoint”文件仅用于告知某些TF函数,这是最新的检查点文件。

  • .ckpt-meta包含元图,即计算图的结构,没有变量的值(基本上你可以在tensorboard / graph中看到)。

  • .ckpt-data包含所有变量的值,没有结构。要在python中恢复模型,通常会使用元数据和数据文件(但您也可以使用.pb文件):

    saver = tf.train.import_meta_graph(path_to_ckpt_meta)
    saver.restore(sess, path_to_ckpt_data)
    
  • 我不完全知道.ckpt-index,我想这是内部需要的某种索引才能正确映射前两个文件。无论如何,通常情况下并不是必需的,您可以仅使用.ckpt-meta.ckpt-data恢复模型。

  • .pb文件可以保存整个图表(元数据+数据)。要在c ++中加载和使用(但不训练)图形,您通常会使用freeze_graph创建的图形,它会从元数据和数据创建.pb文件。小心,(至少在之前的TF版本和某些人中)freeze_graph提供的py函数无法正常工作,因此您必须使用脚本版本。 Tensorflow还提供tf.train.Saver.to_proto()方法,但我不知道它到底做了什么。

这里有很多关于如何保存和恢复图表的问题。例如,请参阅答案here,但要注意两个引用的教程虽然真的很有用,但远非完美,很多人似乎仍然很难用c ++导入模型。

修改: 它看起来像you can also use the .ckpt files in c++ now,所以我猜你不一定需要.pb文件。