可视化pytorch 模型中不同BN层的running mean曲线实例


Posted in Python onJune 24, 2020

加载模型字典

逐一判断每一层,如果该层是bn 的 running mean,就取出参数并取平均作为该层的代表

对保存的每个BN层的数值进行曲线可视化

from functools import partial
import pickle
import torch
import matplotlib.pyplot as plt

pth_path = 'checkpoint.pth'

pickle.load = partial(pickle.load, encoding="latin1")
pickle.Unpickler = partial(pickle.Unpickler, encoding="latin1")
pretrained_dict = torch.load(pth_path, map_location=lambda storage, loc: storage, pickle_module=pickle)
pretrained_dict = pretrained_dict['state_dict']

means = []
for name, param in pretrained_dict.items():
 print(name)
 if 'running_mean' in name:
  means.append(mean.numpy())

layers = [i for i in range(len(means))]

plt.plot(layers, means, color='blue')
plt.legend()
plt.xticks(layers)
plt.xlabel('layers')
plt.show()

可视化pytorch 模型中不同BN层的running mean曲线实例

补充知识:关于pytorch中BN层(具体实现)的一些小细节

最近在做目标检测,需要把训好的模型放到嵌入式设备上跑前向,因此得把各种层的实现都用C手撸一遍,,,此为背景。

其他层没什么好说的,但是BN层这有个小坑。pytorch在打印网络参数的时候,只打出weight和bias这两个参数。咦,说好的BN层有四个参数running_mean、running_var 、gamma 、beta的呢?一开始我以为是pytorch把BN层的计算简化成weight * X + bias,但马上反应过来应该没这么简单,因为pytorch中只有可学习的参数才称为parameter。上网找了一些资料但都没有说到这么细的,毕竟大部分用户使用时只要模型能跑起来就行了,,,于是开始看BN层有哪些属性,果然发现了熟悉的running_mean和running_var,原来pytorch的BN层实现并没有不同。这里吐个槽:为啥要把gamma和beta改叫weight、bias啊,很有迷惑性的好不好,,,

扯了这么多,干脆捋一遍pytorch里BN层的具体实现过程,帮自己理清思路,也可以给大家提供参考。再吐槽一下,在网上搜“pytorch bn层”出来的全是关于这一层怎么用的、初始化时要输入哪些参数,没找到一个pytorch中BN层是怎么实现的,,,

众所周知,BN层的输出Y与输入X之间的关系是:Y = (X - running_mean) / sqrt(running_var + eps) * gamma + beta,此不赘言。其中gamma、beta为可学习参数(在pytorch中分别改叫weight和bias),训练时通过反向传播更新;而running_mean、running_var则是在前向时先由X计算出mean和var,再由mean和var以动量momentum来更新running_mean和running_var。所以在训练阶段,running_mean和running_var在每次前向时更新一次;在测试阶段,则通过net.eval()固定该BN层的running_mean和running_var,此时这两个值即为训练阶段最后一次前向时确定的值,并在整个测试阶段保持不变。

以上这篇可视化pytorch 模型中不同BN层的running mean曲线实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pymongo实现控制mongodb中数字字段做加法的方法
Mar 26 Python
在Python程序中操作MySQL的基本方法
Jul 29 Python
Python for Informatics 第11章之正则表达式(四)
Apr 21 Python
python编程嵌套函数实例代码
Feb 11 Python
python实现泊松图像融合
Jul 26 Python
Python使用LDAP做用户认证的方法
Jun 20 Python
Python Tensor FLow简单使用方法实例详解
Jan 14 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
完美解决keras保存好的model不能成功加载问题
Jun 11 Python
Python爬虫与反爬虫大战
Jul 30 Python
python爬虫中url管理器去重操作实例
Nov 30 Python
Python中for后接else的语法使用
May 18 Python
python3.x中安装web.py步骤方法
Jun 23 #Python
python如何删除文件、目录
Jun 23 #Python
TensorFlow保存TensorBoard图像操作
Jun 23 #Python
python和js交互调用的方法
Jun 23 #Python
virtualenv介绍及简明教程
Jun 23 #Python
python不同系统中打开方法
Jun 23 #Python
自学python用什么系统好
Jun 23 #Python
You might like
截获网站title标签之家内容的例子
2006/10/09 PHP
逐步提升php框架的性能
2008/01/10 PHP
五款常用mysql slow log分析工具的比较分析
2011/05/22 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
php权重计算方法代码分享
2014/01/09 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
js中实现字符串和数组的相互转化详解
2016/01/24 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
python实现定制交互式命令行的方法
2014/07/03 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
Python引用计数操作示例
2018/08/23 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
Django中使用极验Geetest滑动验证码过程解析
2019/07/31 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
零基础小白多久能学会python
2020/06/22 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
工业设计专业推荐信
2013/10/29 职场文书
事业单位考核材料
2014/05/21 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
自荐信大全
2019/03/21 职场文书
Pandas 稀疏数据结构的实现
2021/07/25 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
2022/12/24 Python