对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 相关文章推荐
Windows8下安装Python的BeautifulSoup
Jan 22 Python
Python魔术方法详解
Feb 14 Python
构建Python包的五个简单准则简介
Jun 15 Python
Python与R语言的简要对比
Nov 14 Python
python实现csv格式文件转为asc格式文件的方法
Mar 23 Python
浅析python打包工具distutils、setuptools
Apr 20 Python
Python批处理更改文件名os.rename的方法
Oct 26 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
python之线程通过信号pyqtSignal刷新ui的方法
Jan 11 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
Pytorch释放显存占用方式
Jan 13 Python
使用pyplot.matshow()函数添加绘图标题
Jun 16 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的分页功能
2007/03/21 PHP
PHP获取文件后缀名的三个函数
2012/10/15 PHP
如何使用Strace调试工具
2013/06/03 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
2016/07/06 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
Laravel6.18.19如何优雅的切换发件账户
2020/06/14 PHP
Yii中特殊行为ActionFilter的使用方法示例
2020/10/18 PHP
JS 文件传参及处理技巧分析
2010/05/13 Javascript
原生js实现shift/ctrl/alt按键的获取
2013/04/08 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
2020/09/04 Javascript
Python功能键的读取方法
2015/05/28 Python
Python实现简单http服务器
2018/04/12 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
python实现桌面托盘气泡提示
2019/07/29 Python
python实现的生成word文档功能示例
2019/08/23 Python
pycharm的python_stubs问题
2020/04/08 Python
通过Python实现一个简单的html页面
2020/05/16 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
python定时截屏实现
2020/11/02 Python
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
Quiksilver美国官网:始于1969年的优质冲浪服和滑雪板外套
2020/04/20 全球购物
AOP的定义以及作用
2013/09/08 面试题
总经理文秘岗位职责
2014/02/03 职场文书
物理系毕业生自荐书
2014/06/13 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
村党组织公开承诺书
2015/04/30 职场文书
中学推普周活动总结
2015/05/07 职场文书
紫日观后感
2015/06/05 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
python超详细实现完整学生成绩管理系统
2022/03/17 Python