可视化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实现获取网站PR及百度权重
Jan 21 Python
10种检测Python程序运行时间、CPU和内存占用的方法
Apr 01 Python
Django框架中处理URLconf中特定的URL的方法
Jul 20 Python
使用python爬虫实现网络股票信息爬取的demo
Jan 05 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
Python实现对文件进行单词划分并去重排序操作示例
Jul 10 Python
numpy给array增加维度np.newaxis的实例
Nov 01 Python
python无限生成不重复(字母,数字,字符)组合的方法
Dec 04 Python
django 实现编写控制登录和访问权限控制的中间件方法
Jan 15 Python
手把手教你pycharm专业版安装破解教程(linux版)
Sep 26 Python
利用Python实现Excel的文件间的数据匹配功能
Jun 16 Python
Python使用tkinter实现小时钟效果
Feb 22 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版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
权威JavaScript 中的内存泄露模式
2007/08/13 Javascript
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
2019/06/04 Python
python数据归一化及三种方法详解
2019/08/06 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
2019/10/11 Python
Python如何存储数据到json文件
2020/03/09 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
python实现自动清理重复文件
2020/08/24 Python
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
求职简历的自我评价怎样写好
2013/10/07 职场文书
护理不良事件检讨书
2014/02/06 职场文书
开业典礼主持词
2014/03/21 职场文书
入党积极分子评语
2014/05/04 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
国庆节标语大全
2014/10/08 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android