可视化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与shell的3种交互方式介绍
Apr 11 Python
Python进阶_关于命名空间与作用域(详解)
May 29 Python
python如何统计序列中元素
Jul 31 Python
对Python中的@classmethod用法详解
Apr 21 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
python在新的图片窗口显示图片(图像)的方法
Jul 11 Python
解析Python3中的Import
Oct 13 Python
python实现矩阵和array数组之间的转换
Nov 29 Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 Python
通过实例了解python__slots__使用方法
Sep 14 Python
python通过函数名调用函数的几种场景
Sep 23 Python
Python IO文件管理的具体使用
Mar 20 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 中的类
2006/10/09 PHP
多数据表共用一个页的新闻发布
2006/10/09 PHP
php实现的MySQL通用查询程序
2007/03/11 PHP
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
PHP中使用Imagick实现各种图片效果实例
2015/01/21 PHP
PHP查找与搜索数组元素方法总结
2015/06/12 PHP
javascript RadioButtonList获取选中值
2009/04/09 Javascript
Javascript 中介者模式实例
2009/12/16 Javascript
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
jQuery对象与DOM对象之间的相互转换
2015/03/03 Javascript
javascript动画算法实例分析
2015/07/31 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
基于JavaScript实现类名的添加与移除
2017/04/23 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
2018/12/14 Javascript
JS手写一个自定义Promise操作示例
2020/03/16 Javascript
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
python搭建虚拟环境的步骤详解
2016/09/27 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
Django框架封装外部函数示例
2019/05/28 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
如何利用python进行时间序列分析
2020/08/04 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
小学教师听课制度
2014/02/01 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
迎国庆演讲稿
2014/09/15 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
开业典礼致辞
2015/07/29 职场文书
少先大队干部竞选稿
2015/11/20 职场文书
go mod 安装依赖 unkown revision问题的解决方案
2021/05/06 Golang