对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 相关文章推荐
使用pdb模块调试Python程序实例
Jun 02 Python
Python数据类型详解(一)字符串
May 08 Python
Django的信号机制详解
May 05 Python
python图像处理入门(一)
Apr 04 Python
解决python3中的requests解析中文页面出现乱码问题
Apr 19 Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 Python
Python 元组操作总结
Sep 18 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
Python实现括号匹配方法详解
Feb 10 Python
大数据分析用java还是Python
Jul 06 Python
python 实现学生信息管理系统的示例
Nov 28 Python
教你用python实现12306余票查询
Jun 30 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
Zend Framework路由器用法实例详解
2016/12/11 PHP
海量经典的jQuery插件集合
2010/01/12 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
2017/03/22 jQuery
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
[20:57]Ti4主赛事第三天开幕式
2014/07/21 DOTA
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
Python中私有属性的定义方式
2020/03/05 Python
详解Python中的文件操作
2021/01/14 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
《口技》教学反思
2014/02/21 职场文书
《春笋》教学反思
2014/04/15 职场文书
项目建议书怎么写
2014/05/15 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
公务员年度考核评语
2014/12/31 职场文书
党员读书活动心得体会
2016/01/14 职场文书
JavaScript流程控制(循环)
2021/12/06 Javascript
win11如何查看端口是否被占用? Win11查看端口是否占用的技巧
2022/04/05 数码科技