可视化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之用while来循环
Oct 02 Python
Python的装饰器模式与面向切面编程详解
Jun 21 Python
tensorflow 获取模型所有参数总和数量的方法
Jun 14 Python
浅谈django的render函数的参数问题
Oct 16 Python
python 移动图片到另外一个文件夹的实例
Jan 10 Python
把vgg-face.mat权重迁移到pytorch模型示例
Dec 27 Python
解决json中ensure_ascii=False的问题
Apr 03 Python
django正续或者倒序查库实例
May 19 Python
PyCharm上安装Package的实现(以pandas为例)
Sep 18 Python
Pycharm快捷键配置详细整理
Oct 13 Python
python实现图片九宫格分割的示例
Apr 25 Python
简单介绍Python的第三方库yaml
Jun 18 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的bbs设计(二)
2006/10/09 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
提升PHP性能的21种方法介绍
2013/06/25 PHP
微信公众平台天气预报功能开发
2014/07/06 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
php文件下载处理方法分析
2015/04/22 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
javascript入门·对象属性方法大总结
2007/10/01 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
2019/06/18 Javascript
layui实现数据表格隐藏列的示例
2019/10/25 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
[47:53]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#2COL VS Spirit
2016/03/02 DOTA
python入门教程之识别验证码
2017/03/04 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
2017/11/21 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
python利用小波分析进行特征提取的实例
2019/01/09 Python
Python中zip()函数的解释和可视化(实例详解)
2020/02/16 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
初中高效课堂实施方案
2014/02/26 职场文书
国窖1573广告词
2014/03/21 职场文书
作风建设年活动总结
2014/08/27 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
感恩节寄语2015
2015/03/24 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书