可视化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 相关文章推荐
Python过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
Python实现Windows上气泡提醒效果的方法
Jun 03 Python
Python中shutil模块的常用文件操作函数用法示例
Jul 05 Python
Python 经典面试题 21 道【不可错过】
Sep 21 Python
Python数据预处理之数据规范化(归一化)示例
Jan 08 Python
Django REST framework内置路由用法
Jul 26 Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 Python
python scrapy爬虫代码及填坑
Aug 12 Python
如何关掉pycharm中的python console(图解)
Oct 31 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
Mar 25 Python
Python使用正则表达式实现爬虫数据抽取
Aug 17 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 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
php判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
PHP生成器简单实例
2015/05/13 PHP
PHP实现移除数组中为空或为某值元素的方法
2017/01/07 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
php使用环形链表解决约瑟夫问题完整示例
2018/08/07 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
对vue v-if v-else-if v-else 的简单使用详解
2018/09/29 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
javascript 使用sleep函数的常见方法详解
2020/04/26 Javascript
pyv8学习python和javascript变量进行交互
2013/12/04 Python
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
python遍历类中所有成员的方法
2015/03/18 Python
Python模块的加载讲解
2019/01/15 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
Python环境下安装PyGame和PyOpenGL的方法
2020/03/25 Python
Python异常原理及异常捕捉实现过程解析
2020/03/25 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
综合素质自我评价怎么写
2014/09/14 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
2014年派出所工作总结
2014/11/21 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
遗愿清单观后感
2015/06/09 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
nginx服务器的下载安装与使用详解
2021/08/02 Servers