可视化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实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 Python
python异常和文件处理机制详解
Jul 19 Python
python实现实时监控文件的方法
Aug 26 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
Jul 30 Python
Python网络编程详解
Oct 31 Python
终端命令查看TensorFlow版本号及路径的方法
Jun 13 Python
Django 多环境配置详解
May 14 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
May 27 Python
Django 源码WSGI剖析过程详解
Aug 05 Python
深入浅析Python 中的sklearn模型选择
Oct 12 Python
Python socket连接中的粘包、精确传输问题实例分析
Mar 24 Python
Python Serial串口基本操作(收发数据)
Nov 06 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
PHP第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
纯js简单日历实现代码
2013/10/05 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
2014/05/04 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
2016/05/16 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
2016/12/30 Javascript
JS和Canvas实现图片的预览压缩和上传功能
2018/03/30 Javascript
Less 安装及基本用法
2018/05/05 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
2019/02/21 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
vue实现防抖的实例代码
2021/01/11 Vue.js
python中List的sort方法指南
2014/09/01 Python
python使用append合并两个数组的方法
2015/04/28 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
10个Python小技巧你值得拥有
2018/09/29 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
python 字典的打印实现
2019/09/26 Python
Python线程指南分享
2019/11/19 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
Python如何实现FTP功能
2020/05/28 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
英国游戏机和游戏购物网站:365games.co.uk
2018/06/18 全球购物
乌克兰在线商店的价格比较:Price.ua
2019/07/26 全球购物
Fanatics官网:运动服装、球衣、运动装备
2020/10/12 全球购物
财务学生的职业生涯发展
2014/02/11 职场文书
校园歌咏比赛主持词
2014/03/18 职场文书
党员四风自我剖析材料思想汇报
2014/09/13 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
python 实现的截屏工具
2021/05/08 Python