基于tensorflow权重文件的解读


Posted in Python onMay 26, 2021

1.解读tensorflow权重文件,透过 tf.train.NewCheckpointReader函数。

2.reader.get_variable_to_shape_map()可以得到权重文件里面的tensor名称。

3.reader.get_tensor(key) 可以得到对应tensor的权重值。

基于tensorflow权重文件的解读

import tensorflow as tf
cpktFileName = r'.\models\resnet_v2_152.ckpt'
reader = tf.train.NewCheckpointReader(cpktFileName)
for key in sorted(reader.get_variable_to_shape_map()):
   
    if key.endswith('weights') or key.endswith('biases'):
        keySplits = key.split(r'/')
        print(key)
        print(reader.get_tensor(key))

resnet_v2_152权重 tensor name解读

第一,每个tensor name都以resnet_v2_152开头

第二,tensor name第二段为block,共有四个block。与网络架构有关。

第三,第三字段为unit,每个block里面unit数量不同。与网络架构有关。

第四,除了组后的平坦层,第四字段都为bottleneck_v2

第五,第五字段为‘conv1',‘conv2',‘conv3',‘shortcut'

第六,第六字段为‘weights' or ‘biases'

基于tensorflow权重文件的解读

补充:tensorflow模型的调用,权重查看

以vc版本的tensorpack说明

模型调用

每次运行,会有checkpoint、graph、model生成

1、其中,若文件夹已经有checkpoint,且写有自动掉用上次模型,可以在上次的基础上继续训练,否则重新生成,且不能调用之前的模型,即使已经存在

2、每次运行会重新生成graph,即使上次的已经存在,因此调用上次模型与文件夹中是否有graph无关

权重变量查看

import numpy as np
import tensorflow as tf
import sys
model = sys.argv[1]
tensor = sys.argv[2]
reader = tf.train.NewCheckpointReader(model)
all_variables = reader.get_variable_to_shape_map()
#reader = pywrap_tensorflow.NewCheckpointReader(ckpt_path)
#param_dict = reader.get_variable_to_shape_map()
for key, val in all_variables.items():
    try:
        print key, val
        #key是网络参数名,val是维度
    except:
        pass
w0 = reader.get_tensor(tensor)
np.save('con1d_w.npy',w0)
print(type(w0))
print(w0.shape)
print(w0[0])

文件内容

chekpoint—记录了保存的最新的checkpoint文件以及其它checkpoint文件列表。在inference时,可以通过修改这个文件,指定使用哪个model

基于tensorflow权重文件的解读

MyModel.meta文件保存的是图结构,meta文件是pb(protocol buffer)格式文件,包含变量、op、集合等。

ckpt文件是二进制文件,保存了所有的weights、biases、gradients等变量。在tensorflow 0.11之前,保存在.ckpt文件中。0.11后,通过两个文件保存,如:

MyModel.data-00000-of-00001
MyModel.index

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
推荐11个实用Python库
Jan 23 Python
Python中装饰器高级用法详解
Dec 25 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
Jan 24 Python
Anaconda下配置python+opencv+contribx的实例讲解
Aug 06 Python
python3实现网络爬虫之BeautifulSoup使用详解
Dec 19 Python
基于python plotly交互式图表大全
Dec 07 Python
修改Pandas的行或列的名字(重命名)
Dec 18 Python
python实现查找所有程序的安装信息
Feb 18 Python
最新2019Pycharm安装教程 亲测
Feb 28 Python
python代码如何注释
Jun 01 Python
通用的Django注册功能模块实现方法
Feb 05 Python
实战Python爬虫爬取酷我音乐
Apr 11 Python
解决Python字典查找报Keyerror的问题
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
tensorflow中的数据类型dtype用法说明
May 26 #Python
详解Python魔法方法之描述符类
May 26 #Python
使用tensorflow 实现反向传播求导
python基础学习之递归函数知识总结
TensorFlow的自动求导原理分析
You might like
基于PHP生成静态页的实现方法
2013/05/10 PHP
PHP中new static() 和 new self() 的区别介绍
2015/01/09 PHP
php制作的简单验证码识别代码
2016/01/26 PHP
js利用与或运算符优先级实现if else条件判断表达式
2010/04/15 Javascript
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
HTML颜色选择器实现代码
2010/11/23 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
jQuery html()方法使用不了无法显示内容的问题
2014/08/06 Javascript
jquery实现网站列表切换效果的2种方法
2016/08/12 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
JavaScript实现身份证验证代码实例
2019/08/26 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
python实现图片批量剪切示例
2014/03/25 Python
结合Python的SimpleHTTPServer源码来解析socket通信
2016/06/27 Python
Django实现快速分页的方法实例
2017/10/22 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
pycharm运行scrapy过程图解
2019/11/22 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
JAVA中的关键字有什么特点
2014/03/07 面试题
办公室保洁员岗位职责
2013/12/02 职场文书
部队领导证婚词
2014/01/12 职场文书
欢迎标语大全
2014/06/21 职场文书
对公司的意见和建议
2015/06/04 职场文书
三八妇女节致辞
2015/07/31 职场文书
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL