对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使用arp欺骗伪造网关的方法
Apr 24 Python
十个Python程序员易犯的错误
Dec 15 Python
python实现电脑自动关机
Jun 20 Python
tensorflow使用神经网络实现mnist分类
Sep 08 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
浅析Windows 嵌入python解释器的过程
Jul 26 Python
python Elasticsearch索引建立和数据的上传详解
Aug 04 Python
python写一个随机点名软件的实例
Nov 28 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
django ORM之values和annotate使用详解
May 19 Python
Python3内置函数chr和ord实现进制转换
Jun 05 Python
利用python中的matplotlib打印混淆矩阵实例
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
用函数读出数据表内容放入二维数组
2006/10/09 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python爬虫常用的模块分析
2014/08/29 Python
Python的Django框架中if标签的相关使用
2015/07/15 Python
python实现发送邮件功能代码
2017/12/14 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
python集合是否可变总结
2019/06/20 Python
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
环境建设实施方案
2014/03/14 职场文书
农民工讨薪标语
2014/06/26 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
简单租房协议书
2014/10/21 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
2015年药店工作总结
2015/04/20 职场文书
Python如何使用循环结构和分支结构
2022/04/13 Python