基于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 相关文章推荐
Django中实现点击图片链接强制直接下载的方法
May 14 Python
Python实现优先级队列结构的方法详解
Jun 02 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
Jan 04 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 Python
使用Pyhton集合set()实现成果查漏的例子
Nov 24 Python
Python 实现黑客帝国中的字符雨的示例代码
Feb 20 Python
如何真正的了解python装饰器
Aug 14 Python
Python 3.9的到来到底是意味着什么
Oct 14 Python
python 如何设置守护进程
Oct 29 Python
Pycharm常用快捷键总结及配置方法
Nov 14 Python
pytorch中的torch.nn.Conv2d()函数图文详解
Feb 28 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
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
php使用codebase生成随机数
2014/03/25 PHP
php实现36进制与10进制转换功能示例
2017/01/10 PHP
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
微信小程序实现图片上传放大预览删除代码
2020/06/28 Javascript
layui 优化button按钮和弹出框的方法
2018/08/15 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
详解Python核心对象类型字符串
2018/02/11 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
python os用法总结
2018/06/08 Python
python 自动去除空行的实例
2018/07/24 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
Python箱型图处理离群点的例子
2019/12/09 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
银行实习生的自我评价
2014/01/13 职场文书
初中英语教学反思
2014/01/25 职场文书
岗位竞聘书范文
2014/03/31 职场文书
小学六年级学生评语
2014/04/22 职场文书
同学聚会邀请函
2015/01/30 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
检察院起诉意见书
2015/05/20 职场文书
2015年暑期见闻
2015/07/14 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫