详解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的Django框架中编写编译函数
Jul 20 Python
Python 迭代器工具包【推荐】
May 06 Python
一个基于flask的web应用诞生 组织结构调整(7)
Apr 11 Python
python3 拼接字符串的7种方法
Sep 12 Python
python最小生成树kruskal与prim算法详解
Jan 17 Python
Python Web程序搭建简单的Web服务器
Jul 31 Python
一行Python代码过滤标点符号等特殊字符
Aug 12 Python
python实现单链表的方法示例
Sep 03 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
Dec 12 Python
Python TCPServer 多线程多客户端通信的实现
Dec 31 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
Mar 30 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
Nov 15 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
如何在PHP中使用Oracle数据库(1)
2006/10/09 PHP
一个简单的域名注册情况查询程序
2006/10/09 PHP
解析php中memcache的应用
2013/06/18 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
jQuery代码优化 选择符篇
2011/11/01 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
基于WebUploader的文件上传js插件
2016/08/19 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
Vue中"This dependency was not found"问题的解决方法
2018/06/19 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
vuex 中插件的编写案例解析
2019/06/10 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
2020/03/10 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
理解python多线程(python多线程简明教程)
2014/06/09 Python
深入解析Python中的WSGI接口
2015/05/11 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
中软国际Java程序员机试题
2012/08/19 面试题
医学专业个人求职自荐信格式
2013/09/23 职场文书
运输服务质量承诺书
2014/03/27 职场文书
学习雷锋演讲稿
2014/05/10 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js