可视化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中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
May 28 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
Sep 30 Python
Python使用pymongo模块操作MongoDB的方法示例
Jul 20 Python
Django添加feeds功能的示例
Aug 07 Python
解读python如何实现决策树算法
Oct 11 Python
pandas取出重复数据的方法
Jul 04 Python
numpy.linalg.eig() 计算矩阵特征向量方式
Nov 29 Python
Python 给下载文件显示进度条和下载时间的实现
Apr 02 Python
pandas数据拼接的实现示例
Apr 16 Python
如何更换python默认编辑器的背景色
Aug 10 Python
python+django+selenium搭建简易自动化测试
Aug 19 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实现HTML页面静态化的方法
2015/11/04 PHP
用JAVASCRIPT如何给<textarea></textarea>赋值
2007/04/20 Javascript
javascript实现二分查找法实现代码
2007/11/12 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
用Python进行TCP网络编程的教程
2015/04/29 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
Python 串口读写的实现方法
2019/06/12 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
详解pandas赋值失败问题解决
2020/11/29 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
项目经理的岗位职责
2013/11/23 职场文书
仓库保管员岗位职责
2013/12/20 职场文书
质量月活动总结
2014/08/26 职场文书
办公室主任岗位职责
2015/01/31 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
盲山观后感
2015/06/11 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书
不要在HTML中滥用div
2021/05/08 HTML / CSS
SQL IDENTITY_INSERT作用案例详解
2021/08/23 MySQL
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android