对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操作字符串之rindex()方法的使用
May 19 Python
Python 爬虫学习笔记之正则表达式
Sep 21 Python
python利用MethodType绑定方法到类示例代码
Aug 27 Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 Python
Python多进程入门、分布式进程数据共享实例详解
Jun 03 Python
如何实现Django Rest framework版本控制
Jul 25 Python
使用python批量修改文件名的方法(视频合并时)
Mar 24 Python
python 解决flask 图片在线浏览或者直接下载的问题
Jan 09 Python
Python类super()及私有属性原理解析
Jun 15 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
PyQt5通过信号实现MVC的示例
Feb 06 Python
Python Matplotlib库实现画局部图
Nov 17 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
php 代码优化的42条建议 推荐
2009/09/25 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
在VS2008中使用jQuery智能感应的方法
2010/12/30 Javascript
JS 控件事件小结
2012/10/31 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
2014/07/18 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
Javascript闭包用法实例分析
2015/01/23 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
超级简单实现JavaScript MVC 样式框架
2015/03/24 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
JS实现可用滑块滑动的缓动图代码
2019/09/01 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
Python中的模块和包概念介绍
2015/04/13 Python
python pandas生成时间列表
2019/06/29 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
美国亚洲时尚和美容产品的一站式网上商店:Stylevana
2019/09/05 全球购物
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
爱护公共设施标语
2014/06/24 职场文书
好的促销活动方案
2014/08/21 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
2015年考研复习计划
2015/01/19 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
导游词之蜀山胜景瓦屋山
2019/11/29 职场文书
Python实现老照片修复之上色小技巧
2021/10/16 Python