对Pytorch神经网络初始化kaiming分布详解


Posted in Python onAugust 18, 2019

函数的增益值

torch.nn.init.calculate_gain(nonlinearity, param=None)

提供了对非线性函数增益值的计算。

对Pytorch神经网络初始化kaiming分布详解

增益值gain是一个比例值,来调控输入数量级和输出数量级之间的关系。

fan_in和fan_out

pytorch计算fan_in和fan_out的源码


def _calculate_fan_in_and_fan_out(tensor):
 dimensions = tensor.ndimension()
 if dimensions < 2:
  raise ValueError("Fan in and fan out can not be computed 
  for tensor with fewer than 2 dimensions")

 if dimensions == 2: # Linear
  fan_in = tensor.size(1)
  fan_out = tensor.size(0)
 else:
  num_input_fmaps = tensor.size(1)
  num_output_fmaps = tensor.size(0)
  receptive_field_size = 1
  if tensor.dim() > 2:
   receptive_field_size = tensor[0][0].numel()
  fan_in = num_input_fmaps * receptive_field_size
  fan_out = num_output_fmaps * receptive_field_size

 return fan_in, fan_out

对Pytorch神经网络初始化kaiming分布详解

xavier分布

xavier分布解析:https://prateekvjoshi.com/2016/03/29/understanding-xavier-initialization-in-deep-neural-networks/

假设使用的是sigmoid函数。当权重值(值指的是绝对值)过小,输入值每经过网络层,方差都会减少,每一层的加权和很小,在sigmoid函数0附件的区域相当于线性函数,失去了DNN的非线性性。

当权重的值过大,输入值经过每一层后方差会迅速上升,每层的输出值将会很大,此时每层的梯度将会趋近于0.

xavier初始化可以使得输入值x x x<math><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math>x方差经过网络层后的输出值y y y<math><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math>y方差不变。

(1)xavier的均匀分布

torch.nn.init.xavier_uniform_(tensor, gain=1)

对Pytorch神经网络初始化kaiming分布详解

也称为Glorot initialization。

>>> w = torch.empty(3, 5)
>>> nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain('relu'))

(2) xavier正态分布

torch.nn.init.xavier_normal_(tensor, gain=1)

对Pytorch神经网络初始化kaiming分布详解

也称为Glorot initialization。

kaiming分布

Xavier在tanh中表现的很好,但在Relu激活函数中表现的很差,所何凯明提出了针对于relu的初始化方法。pytorch默认使用kaiming正态分布初始化卷积层参数。

(1) kaiming均匀分布

torch.nn.init.kaiming_uniform_
 (tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')

对Pytorch神经网络初始化kaiming分布详解

也被称为 He initialization。

a ? the negative slope of the rectifier used after this layer (0 for ReLU by default).激活函数的负斜率,

mode ? either ‘fan_in' (default) or ‘fan_out'. Choosing fan_in preserves the magnitude of the variance of the weights in the forward pass. Choosing fan_out preserves the magnitudes in the backwards

pass.默认为fan_in模式,fan_in可以保持前向传播的权重方差的数量级,fan_out可以保持反向传播的权重方差的数量级。

>>> w = torch.empty(3, 5)
>>> nn.init.kaiming_uniform_(w, mode='fan_in', nonlinearity='relu')

(2) kaiming正态分布

torch.nn.init.kaiming_normal_
 (tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')

对Pytorch神经网络初始化kaiming分布详解

也被称为 He initialization。

>>> w = torch.empty(3, 5)
>>> nn.init.kaiming_normal_(w, mode='fan_out', nonlinearity='relu')

以上这篇对Pytorch神经网络初始化kaiming分布详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
一波神奇的Python语句、函数与方法的使用技巧总结
Dec 08 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
对Python实现简单的API接口实例讲解
Dec 10 Python
python发送多人邮件没有展示收件人问题的解决方法
Jun 21 Python
浅谈python3中input输入的使用
Aug 02 Python
解析python实现Lasso回归
Sep 11 Python
python 采用paramiko 远程执行命令及报错解决
Oct 21 Python
python元组的概念知识点
Nov 19 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
python属于哪种语言
Aug 16 Python
Python如何识别银行卡卡号?
Jun 10 Python
pytorch中的embedding词向量的使用方法
Aug 18 #Python
Pytorch加载部分预训练模型的参数实例
Aug 18 #Python
在pytorch中查看可训练参数的例子
Aug 18 #Python
浅析PyTorch中nn.Module的使用
Aug 18 #Python
关于PyTorch 自动求导机制详解
Aug 18 #Python
pytorch神经网络之卷积层与全连接层参数的设置方法
Aug 18 #Python
pytorch numpy list类型之间的相互转换实例
Aug 18 #Python
You might like
网站加速 PHP 缓冲的免费实现方法
2006/10/09 PHP
PHP和XSS跨站攻击的防范
2007/04/17 PHP
php 获取全局变量的代码
2011/04/21 PHP
深入php self与$this的详解
2013/06/08 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
JS JQUERY实现滚动条自动滚到底的方法
2015/01/09 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
javascript中this的用法实践分析
2019/07/29 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
Python字符串处理函数简明总结
2015/04/13 Python
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
python实现图片转字符画
2021/02/19 Python
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
大学生水文观测实习自我鉴定
2013/09/29 职场文书
校庆活动策划方案
2014/06/05 职场文书
宣传口号大全
2014/06/16 职场文书
作文评语怎么写
2014/12/25 职场文书
信息技术课教学反思
2016/02/23 职场文书
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers
pd.DataFrame中的几种索引变换的实现
2022/06/16 Python