前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyTorch权值初始化的十种方法

PyTorch权值初始化的十种方法

作者头像
狼啸风云
修改2022-09-02 22:02:53
2.7K0
修改2022-09-02 22:02:53
举报

pytorch在torch.nn.init中提供了常用的初始化方法函数,这里简单介绍,方便查询使用。

介绍分两部分:

1. Xavier,kaiming系列;

2. 其他方法分布

Xavier初始化方法,论文在《Understanding the difficulty of training deep feedforward neural networks》

公式推导是从“方差一致性”出发,初始化的分布有均匀分布和正态分布两种。

1. Xavier均匀分布

torch.nn.init.xavier_uniform_(tensor, gain=1)

xavier初始化方法中服从均匀分布U(−a,a) ,分布的参数a = gain * sqrt(6/fan_in+fan_out),

这里有一个gain,增益的大小是依据激活函数类型来设定

eg:nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain('relu'))

PS:上述初始化方法,也称为Glorot initialization

2. Xavier正态分布

torch.nn.init.xavier_normal_(tensorgain=1)

xavier初始化方法中服从正态分布,

mean=0,std = gain * sqrt(2/fan_in + fan_out)

kaiming初始化方法,论文在《 Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification》,公式推导同样从“方差一致性”出法,kaiming是针对xavier初始化方法在relu这一类激活函数表现不佳而提出的改进,详细可以参看论文。

3. kaiming均匀分布

torch.nn.init.kaiming_uniform_(tensora=0mode='fan_in'nonlinearity='leaky_relu')

此为均匀分布,U~(-bound, bound), bound = sqrt(6/(1+a^2)*fan_in)

其中,a为激活函数的负半轴的斜率,relu是0

mode- 可选为fan_in 或 fan_out, fan_in使正向传播时,方差一致; fan_out使反向传播时,方差一致

nonlinearity- 可选 relu 和 leaky_relu ,默认值为 。 leaky_relu

nn.init.kaiming_uniform_(w, mode='fan_in', nonlinearity='relu')

4. kaiming正态分布

torch.nn.init.kaiming_normal_(tensora=0mode='fan_in'nonlinearity='leaky_relu')

此为0均值的正态分布,N~ (0,std),其中std = sqrt(2/(1+a^2)*fan_in)

其中,a为激活函数的负半轴的斜率,relu是0

mode- 可选为fan_in 或 fan_out, fan_in使正向传播时,方差一致;fan_out使反向传播时,方差一致

nonlinearity- 可选 relu 和 leaky_relu ,默认值为 。 leaky_relu

nn.init.kaiming_normal_(w, mode='fan_out', nonlinearity='relu')

5. 均匀分布初始化

torch.nn.init.uniform_(tensora=0b=1)

使值服从均匀分布U(a,b)

6. 正态分布初始化

torch.nn.init.normal_(tensormean=0std=1)

使值服从正态分布N(mean, std),默认值为0,1

7. 常数初始化

torch.nn.init.constant_(tensorval)

使值为常数val nn.init.constant_(w, 0.3)

8. 单位矩阵初始化

torch.nn.init.eye_(tensor)

将二维tensor初始化为单位矩阵(the identity matrix)

9. 正交初始化

torch.nn.init.orthogonal_(tensorgain=1)

使得tensor是正交的,论文:Exact solutions to the nonlinear dynamics of learning in deep linear neural networks” - Saxe, A. et al. (2013)

10. 稀疏初始化

torch.nn.init.sparse_(tensorsparsitystd=0.01)

从正态分布N~(0. std)中进行稀疏化,使每一个column有一部分为0

sparsity- 每一个column稀疏的比例,即为0的比例

nn.init.sparse_(w, sparsity=0.1)

11. 计算增益

torch.nn.init.calculate_gain(nonlinearityparam=None)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Xavier均匀分布
  • 2. Xavier正态分布
  • 3. kaiming均匀分布
  • 4. kaiming正态分布
  • 5. 均匀分布初始化
  • 6. 正态分布初始化
  • 7. 常数初始化
  • 8. 单位矩阵初始化
  • 9. 正交初始化
  • 10. 稀疏初始化
  • 11. 计算增益
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档