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

Fra*_*Fan 23 python tensorflow

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

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

并且文件名为:

  • 检查站

.ckpt文件的连接是什么?

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

gde*_*lab 35

  • .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)
    
    Run Code Online (Sandbox Code Playgroud)
  • 我不知道究竟是什么意思.ckpt-index,我想这是内部需要某种索引才能正确映射前两个文件.无论如何,它通常不是必需的,你可以只用.ckpt-meta和恢复一个模型.ckpt-data.

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

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

编辑:看起来你现在也可以在c ++中使用.ckpt文件,所以我猜你不一定需要.pb文件了.

  • 您可以在这里查看问题和答案:/sf/answers/3073697861/ 这个想法是使用`saver = tf.train.import_meta_graph(path_to_ckpt_meta) saver.restore(sess, path_to_ckpt_data)`,然后使用集合或变量名称来获取重要输入和输出张量的句柄,然后运行推理,就像没有保存和加载一样,使用诸如 `sess.run([prediction_class],feed_dict={x_input: data })` (2认同)