前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解TensorFlow查看ckpt中变量的几种方法

详解TensorFlow查看ckpt中变量的几种方法

作者头像
狼啸风云
修改2022-09-03 21:18:15
4.6K0
修改2022-09-03 21:18:15
举报

’查看TensorFlow中checkpoint内变量的几种方法:

查看ckpt中变量的方法有三种:

  1. 在有model的情况下,使用tf.train.Saver进行restore
  2. 使用tf.train.NewCheckpointReader直接读取ckpt文件,这种方法不需要model。
  3. 使用tools里的freeze_graph来读取ckpt

注意:

  1. 如果模型保存为.ckpt的文件,则使用该文件就可以查看.ckpt文件里的变量。ckpt路径为 model.ckpt
  2. 如果模型保存为.ckpt-xxx-data (图结构)、.ckpt-xxx.index (参数名)、.ckpt-xxx-meta (参数值)文件,则需要同时拥有这三个文件才行。并且ckpt的路径为 model.ckpt-xxx

1. 基于model来读取ckpt文件里的变量

  1. 首先建立model
  2. 从ckpt中恢复变量
代码语言:javascript
复制
with tf.Graph().as_default() as g:

  #建立model

  images, labels = cifar10.inputs(eval_data=eval_data)

  logits = cifar10.inference(images)

  top_k_op = tf.nn.in_top_k(logits, labels, 1)

  #从ckpt中恢复变量

  sess = tf.Session()

  saver = tf.train.Saver() #saver = tf.train.Saver(...variables...) # 恢复部分变量时,只需要在Saver里指定要恢复的变量

  save_path = 'ckpt的路径'

  saver.restore(sess, save_path) # 从ckpt中恢复变量

注意:基于model来读取ckpt中变量时,model和ckpt必须匹配。

2. 使用tf.train.NewCheckpointReader直接读取ckpt文件里的变量,使用tools.inspect_checkpoint里的print_tensors_in_checkpoint_file函数打印ckpt里的东西

代码语言:javascript
复制
#使用NewCheckpointReader来读取ckpt里的变量

from tensorflow.python import pywrap_tensorflow

checkpoint_path = os.path.join(model_dir, "model.ckpt")

reader = pywrap_tensorflow.NewCheckpointReader(checkpoint_path) #tf.train.NewCheckpointReader

var_to_shape_map = reader.get_variable_to_shape_map()

for key in var_to_shape_map:

  print("tensor_name: ", key)

  #print(reader.get_tensor(key))
代码语言:javascript
复制
#使用print_tensors_in_checkpoint_file打印ckpt里的内容

from tensorflow.python.tools.inspect_checkpoint import print_tensors_in_checkpoint_file


print_tensors_in_checkpoint_file(file_name, #ckpt文件名字

                 tensor_name, # 如果为None,则默认为ckpt里的所有变量

                 all_tensors, # bool 是否打印所有的tensor,这里打印出的是tensor的值,一般不推荐这里设置为False

                 all_tensor_names) # bool 是否打印所有的tensor的name

#上面的打印ckpt的内部使用的是pywrap_tensorflow.NewCheckpointReader所以,掌握NewCheckpointReader才是王道

3.使用tools里的freeze_graph来读取ckpt

代码语言:javascript
复制
from tensorflow.python.tools import freeze_graph


freeze_graph(input_graph, #=some_graph_def.pb

       input_saver,

       input_binary,

       input_checkpoint, #=model.ckpt

       output_node_names, #=softmax

       restore_op_name,

       filename_tensor_name,

       output_graph, #='./tmp/frozen_graph.pb'

       clear_devices,

       initializer_nodes,

       variable_names_whitelist='',

       variable_names_blacklist='',

       input_meta_graph=None,

       input_saved_model_dir=None,

       saved_model_tags='serve',

       checkpoint_version=2)

#freeze_graph_test.py讲述了怎么使用freeze_grapg。

使用freeze_graph可以将图和ckpt进行合并。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档