可视化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 相关文章推荐
Cpy和Python的效率对比
Mar 20 Python
用Python解析XML的几种常见方法的介绍
Apr 09 Python
在Python下使用Txt2Html实现网页过滤代理的教程
Apr 11 Python
python+selenium+autoit实现文件上传功能
Aug 23 Python
python绘制圆柱体的方法
Jul 02 Python
Windows 64位下python3安装nltk模块
Sep 19 Python
用python求一个数组的和与平均值的实现方法
Jun 29 Python
Window10下python3.7 安装与卸载教程图解
Sep 30 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
Oct 14 Python
python如何判断IP地址合法性
Apr 05 Python
使用python+poco+夜神模拟器进行自动化测试实例
Apr 23 Python
Python实现列表索引批量删除的5种方法
Nov 16 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
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
javascript 特殊字符串
2009/02/25 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
Python简单计算文件夹大小的方法
2015/07/14 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
pycharm设置注释颜色的方法
2018/05/23 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
java关于string最常出现的面试题整理
2021/01/18 Python
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
欧洲最大的预定车位市场:JustPark
2020/01/06 全球购物
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
汉语言文学毕业生求职信
2013/10/01 职场文书
总经理秘书的岗位职责
2013/12/27 职场文书
大学生自我评价范文分享
2014/02/21 职场文书
白莲教口号
2014/06/18 职场文书
银行奉献演讲稿
2014/09/16 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
消防演习通知
2015/04/25 职场文书
2019教师的学习计划
2019/06/25 职场文书
导游词之上海豫园
2019/10/24 职场文书