可视化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多进程分块读取超大文件的方法
Apr 13 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
May 17 Python
Python如何实现MySQL实例初始化详解
Nov 06 Python
利用信号如何监控Django模型对象字段值的变化详解
Nov 27 Python
python通过elixir包操作mysql数据库实例代码
Jan 31 Python
python numpy 按行归一化的实例
Jan 21 Python
python递归法解决棋盘分割问题
Jul 17 Python
python实现根据文件格式分类
Oct 31 Python
通过实例解析Python调用json模块
Dec 11 Python
Pytorch 多块GPU的使用详解
Dec 31 Python
Django QuerySet查询集原理及代码实例
Jun 13 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 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五种设计模式小结
2011/03/23 PHP
YII路径的用法总结
2014/07/09 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
PHP开发注意事项总结
2015/02/04 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
2016/05/26 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
javascript编程起步(第六课)
2007/01/10 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
Sea.JS知识总结
2016/05/05 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
微信小程序 登录实例详解
2017/01/16 Javascript
js 作用域和变量详解
2017/02/16 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
使用Vue组件实现一个简单弹窗效果
2018/04/23 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
django 控制页面跳转的例子
2019/08/06 Python
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
python的slice notation的特殊用法详解
2019/12/27 Python
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
2014年情人节活动方案
2014/02/16 职场文书
军训感想500字
2014/02/20 职场文书
停车场管理协议书范本
2014/10/08 职场文书
雷峰塔导游词
2015/02/09 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
基层党支部承诺书
2015/04/30 职场文书
党支部创先争优公开承诺书
2015/04/30 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
python实现简单区块链结构
2021/04/25 Python