对Pytorch神经网络初始化kaiming分布详解

 更新时间:2019年08月18日 12:22:38   作者:winycg  
今天小编就为大家分享一篇对Pytorch神经网络初始化kaiming分布详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

函数的增益值

torch.nn.init.calculate_gain(nonlinearity, param=None)

提供了对非线性函数增益值的计算。

增益值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

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)

也称为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)

也称为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')

也被称为 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')

也被称为 He initialization。

 >>> w = torch.empty(3, 5)
>>> nn.init.kaiming_normal_(w, mode='fan_out', nonlinearity='relu')

以上这篇对Pytorch神经网络初始化kaiming分布详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 用python实现爬取奥特曼图片实例

    用python实现爬取奥特曼图片实例

    大家好,本篇文章主要讲的是用python实现爬取奥特曼图片实例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Python实现自动化邮件发送过程详解

    Python实现自动化邮件发送过程详解

    这篇文章主要介绍了如何利用Python实现自动化邮件发送,可以让你摆脱繁琐的重复性业务,可以节省非常多的时间。感兴趣的小伙伴可以试一试
    2022-01-01
  • Python单元测试入门到精通讲解

    Python单元测试入门到精通讲解

    单元测试是软件开发中不可或缺的一部分,有助于确保代码的正确性、可维护性和可扩展性,在Python中,有丰富的工具和库可用于进行单元测试,本文将为你提供一个全面的指南,从入门到精通,轻松掌握Python单元测试的方方面面
    2023-11-11
  • Python编程把二叉树打印成多行代码

    Python编程把二叉树打印成多行代码

    这篇文章主要介绍了Python编程把二叉树打印成多行代码,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • python2.7实现邮件发送功能

    python2.7实现邮件发送功能

    这篇文章主要为大家详细介绍了python2.7实现邮件发送功能包,含文本、附件、正文图片等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Python的组合模式与责任链模式编程示例

    Python的组合模式与责任链模式编程示例

    这篇文章主要介绍了Python的组合模式与责任链模式编程示例,组合模式与责任链模式都属于Python的设计模式,需要的朋友可以参考下
    2016-02-02
  • Python unittest生成测试报告过程解析

    Python unittest生成测试报告过程解析

    这篇文章主要介绍了Python unittest生成测试报告过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 将python程序打包成DLL的三种方式

    将python程序打包成DLL的三种方式

    这篇文章主要介绍了将python程序打包成DLL的三种方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python(TensorFlow框架)实现手写数字识别系统的方法

    Python(TensorFlow框架)实现手写数字识别系统的方法

    这篇文章主要介绍了Python(TensorFlow框架)实现手写数字识别系统的方法。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • python实现提取jira bug列表的方法示例

    python实现提取jira bug列表的方法示例

    公司要求内部每日整理jira bug发邮件,手动执行了一段时间,想着用自动化的方式实现,所以本文主要介绍了python实现提取jira bug列表,感兴趣的可以了解一下
    2021-05-05

最新评论