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


Posted in Python onJune 19, 2018

查看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中恢复变量

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在漏洞利用Python代码真的很爽
Aug 26 Python
centos下更新Python版本的步骤
Feb 12 Python
玩转python爬虫之爬取糗事百科段子
Feb 17 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
Python爬虫动态ip代理防止被封的方法
Jul 07 Python
pytorch打印网络结构的实例
Aug 19 Python
python监控nginx端口和进程状态
Sep 06 Python
Python unittest如何生成HTMLTestRunner模块
Sep 08 Python
记一次Django响应超慢的解决过程
Sep 17 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
Oct 15 Python
Python中json.dumps()函数的使用解析
May 17 Python
自动在Windows中运行Python脚本并定时触发功能实现
Sep 04 Python
TensorFlow 滑动平均的示例代码
Jun 19 #Python
python3个性签名设计实现代码
Jun 19 #Python
TensorFlow 模型载入方法汇总(小结)
Jun 19 #Python
python3爬虫之设计签名小程序
Jun 19 #Python
Python GUI Tkinter简单实现个性签名设计
Jun 19 #Python
TensorFlow数据输入的方法示例
Jun 19 #Python
深入分析python中整型不会溢出问题
Jun 18 #Python
You might like
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
php 定义404页面的实现代码
2012/11/19 PHP
php stripslashes和addslashes的区别
2014/02/03 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
Yii数据库缓存实例分析
2016/03/29 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
AngularJS语法详解
2015/01/23 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
websocket+node.js实现实时聊天系统问题咨询
2017/05/17 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
vue axios用法教程详解
2017/07/23 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
详解TensorFlow查看ckpt中变量的几种方法
2018/06/19 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
python不使用for计算两组、多个矩形两两间的iou方式
2020/01/18 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
英文简历中的自我评价
2013/10/06 职场文书
高二美术教学反思
2014/01/14 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
群众路线学习心得体会范文
2014/11/05 职场文书
初中美术教学反思
2016/02/17 职场文书
解析Java异步之call future
2021/06/14 Java/Android
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python
Python图片验证码降噪和8邻域降噪
2021/08/30 Python