对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中的urllib2模块
Nov 13 Python
Python聊天室实例程序分享
Jan 05 Python
Linux下为不同版本python安装第三方库
Aug 31 Python
python正则表达式的使用
Jun 12 Python
浅谈python中的数字类型与处理工具
Aug 02 Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 Python
python线程中的同步问题及解决方法
Aug 29 Python
Jupyter打开图形界面并画出正弦函数图像实例
Apr 24 Python
python中使用input()函数获取用户输入值方式
May 03 Python
Python如何把十进制数转换成ip地址
May 25 Python
python 基于DDT实现数据驱动测试
Feb 18 Python
tensorflow+k-means聚类简单实现猫狗图像分类的方法
Apr 28 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图片合成方法(多张图片合成一张)
2017/11/25 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
js修改table中Td的值(定义td的双击事件)
2013/01/10 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
js图片轮播效果实现代码
2020/04/18 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
JavaScript仿网易选项卡制作代码
2016/10/06 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
jQuery实现动态向上滚动
2020/12/21 jQuery
详解Python 模拟实现生产者消费者模式的实例
2017/08/10 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
Python常用特殊方法实例总结
2019/03/22 Python
Python单元和文档测试实例详解
2019/04/11 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
Linux的文件类型
2012/03/07 面试题
入党申请人的自我鉴定
2013/12/01 职场文书
周年庆典邀请函范文
2014/01/23 职场文书
医学类个人求职信范文
2014/02/05 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
初中班主任心得体会
2016/01/07 职场文书
《蟋蟀的住宅》教学反思
2016/02/17 职场文书
如何计划开一家便利店?
2019/07/31 职场文书
Python预测分词的实现
2021/06/18 Python