对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将html转成PDF的实现代码(包含中文)
Mar 04 Python
python基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 Python
python中的内置函数getattr()介绍及示例
Jul 20 Python
wxpython中利用线程防止假死的实现方法
Aug 11 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
May 22 Python
python获取文件路径、文件名、后缀名的实例
Apr 23 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
Python 从subprocess运行的子进程中实时获取输出的例子
Aug 14 Python
Django发送邮件功能实例详解
Sep 02 Python
Python3使用xlrd、xlwt处理Excel方法数据
Feb 28 Python
Python面向对象程序设计之继承、多态原理与用法详解
Mar 23 Python
如何用Python提取10000份log中的产品信息
Jan 14 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
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
PHP开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
PHP中串行化用法示例
2016/11/16 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
重载toString实现JS HashMap分析
2011/03/13 Javascript
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
2011/03/30 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
jquery图片切换实例分析
2015/04/15 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
javascript运算符——位运算符全面介绍
2016/07/14 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
你有必要知道的10个JavaScript难点
2017/07/25 Javascript
图片加载完成再执行事件的实例
2017/11/16 Javascript
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
python实现贪吃蛇游戏
2020/03/21 Python
python实现根据文件格式分类
2019/10/31 Python
tensorflow 实现数据类型转换
2020/02/17 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
党课知识竞赛主持词
2014/04/01 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
纪委立案决定书
2015/06/24 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
Python语言内置数据类型
2022/02/24 Python
delete in子查询不走索引问题分析
2022/07/07 MySQL