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

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

  • 还有一个文件叫做:
  • 检查点

  • .ckpt 文件有什么关系?

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

    最佳答案

  • .ckpt文件是saver.save(sess)的旧版本输出,它等效于.ckpt-data(请参见下文)
  • “检查点”文件仅在这里告诉一些TF函数,这是最新的检查点文件。
  • .ckpt-meta包含元图,即计算图的结构,但不包含变量的值(基本上是在张量板/图中可以看到的值)。
  • .ckpt-data包含所有变量的值,而没有结构。要在python中还原模型,通常会使用meta和data文件(但也可以使用.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 创建的图形,该图形由metat和data创建.pb文件。请小心(至少在以前的TF版本中,并且对于某些人而言),freeze_graph提供的py函数无法正常工作,因此您必须使用脚本版本。 Tensorflow还提供了tf.train.Saver.to_proto()方法,但我不知道它的确切作用。

  • 这里有很多有关如何保存和恢复图形的问题。例如,参见答案here,但是要注意,引用的两个教程虽然确实很有帮助,但远非完美,而且许多人似乎仍在努力地用c++导入模型。

    编辑:
    它看起来像you can also use the .ckpt files in c++ now,,所以我想您不再需要.pb文件。

    10-07 12:08