可视化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开发的小球完全弹性碰撞游戏代码
Oct 15 Python
python超简单解决约瑟夫环问题
May 12 Python
Python中的getopt函数使用详解
Jul 28 Python
python实战之实现excel读取、统计、写入的示例讲解
May 02 Python
Python查找第n个子串的技巧分享
Jun 27 Python
Python多进程与服务器并发原理及用法实例分析
Aug 21 Python
Python实现鼠标自动在屏幕上随机移动功能
Mar 14 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
python exit出错原因整理
Aug 31 Python
Django路由层URLconf作用及原理解析
Sep 24 Python
pytorch 如何把图像数据集进行划分成train,test和val
May 31 Python
Python 数据可视化工具 Pyecharts 安装及应用
Apr 20 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
yii2超好用的日期组件和时间组件
2016/05/05 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
详解PHP5.6.30与Apache2.4.x配置
2017/06/02 PHP
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
jQuery $.each的用法说明
2010/03/22 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
webpack4 从零学习常用配置(小结)
2019/05/28 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
python字符串连接方式汇总
2014/08/21 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
对python中Json与object转化的方法详解
2018/12/31 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
python 爬虫请求模块requests详解
2020/12/04 Python
如何使用localstorage代替cookie实现跨域共享数据问题
2018/04/18 HTML / CSS
体育教育毕业生自荐信
2013/11/21 职场文书
园林施工员岗位职责
2013/12/11 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
详细的本科生职业生涯规划范文
2014/09/16 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
Python借助with语句实现代码段只执行有限次
2022/03/23 Python
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技