从model.ckpt.meta中提取图def

时间:2018-07-08 14:37:20

标签: python tensorflow

如何从类似graph.pbtxt的metagraphdef文件生成model.ckpt.meta,即包含图def的protobuf?

我猜想graph.pbtxtmodel.ckpt.meta这两个文件都是在训练期间生成的。但是,我想使用一种分析工具,该工具在经过预先训练的NN上需要graph.pbtxt,而我只能访问model.ckpt.*文件。这可能吗?

1 个答案:

答案 0 :(得分:2)

要生成原生动物,您需要做两件事:

  • 元数据,您提到的.meta
  • 与之同时生成的检查点.ckpt

本质上,.meta文件包含图形定义,而.ckpt文件包含训练模型的权重。 protobuf格式将两者合并为一个文件。

您必须先加载元图,然后再加载检查点,如下所示:

sess = tf.Session()
saver = tf.train.import_meta_graph(meta_file)
saver.restore(save_path=ckpt_file, sess=sess)

最后,您必须先定义图形的输出节点,然后再将其导出为protobuf格式。输出节点包含您希望能够检索的输出层的名称列表。例如,它可能是['myModel/fc12/BiasAdd']

from tensorflow.python.framework import graph_util

output_graph = graph_util.convert_variables_to_constants(
    sess,
    sess.graph.as_graph_def(),
    output_node_names)

with tf.gfile.GFile('output.pb', 'wb') as f:
    f.write(output_graph.SerializeToString())