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

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

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

  • 在有model的情况下,使用tf.train.Saver进行restore

  • 使用tf.train.NewCheckpointReader直接读取ckpt文件,这种方法不需要model。

  • 使用tools里的freeze_graph来读取ckpt

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

1.首先建立model
2.从ckpt中恢复变量

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里的东西

#使用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))
#使用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

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进行合并。

猜你喜欢

转载自blog.csdn.net/u014061630/article/details/80461044