对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 datetime时间格式化去掉前导0
Jul 31 Python
使用Python程序抓取新浪在国内的所有IP的教程
May 04 Python
python字符类型的一些方法小结
May 16 Python
Python 安装setuptools和pip工具操作方法(必看)
May 22 Python
python中pika模块问题的深入探究
Oct 13 Python
Python中字符串与编码示例代码
May 20 Python
python实现各种插值法(数值分析)
Jul 30 Python
Python编程快速上手——选择性拷贝操作案例分析
Feb 28 Python
Python 实现简单的客户端认证
Jul 29 Python
python 实现控制鼠标键盘
Nov 27 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 Python
Django中celery的使用项目实例
Jul 07 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导出csv文件,可导出前导0实例代码
2016/11/16 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
2014/05/08 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
2017/07/24 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
Angularjs中的$apply及优化使用详解
2018/07/02 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
Python 关于反射和类的特殊成员方法
2017/09/14 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
Django工程的分层结构详解
2019/07/18 Python
Django学习之文件上传与下载
2019/10/06 Python
python实现名片管理器的示例代码
2019/12/17 Python
python_array[0][0]与array[0,0]的区别详解
2020/02/18 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
园林设计师自荐信
2013/11/18 职场文书
最新茶叶店创业计划书
2014/01/14 职场文书
战友聚会邀请函
2014/01/18 职场文书
身边的榜样活动方案
2014/08/20 职场文书
办公室行政主管岗位职责
2015/04/09 职场文书
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL
使用goaccess分析nginx日志的详细方法
2021/07/09 Servers