Pytorch常用权重初始化方法

PyTorch 在 torch.nn.init 中提供了常用的初始化方法函数,在这里简单介绍,同时也方便自己以后查询使
用。

初始化方法分为两个部分:

1.Xavier,kaiming 系列;
2.其他方法分布

Xavier 初始化方法,论文在《Understanding the difficulty of training deep feedforward neural
networks》公式推导是从“方差一致性”出发,初始化的分布有均匀分布和正态分布两种。

1.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

1.2 Xavier 正态分布
torch.nn.init.xavier_normal_(tensor, gain=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 这一类激活函数表现不佳而提出的改进,详细可以参看论文。

1.3 kaiming 均匀分布
torch.nn.init.kaiming_uniform_(tensor, a=0, mode='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’)

1.4 kaiming 正态分布
torch.nn.init.kaiming_normal_(tensor, a=0, mode='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')
2.1 均匀分布初始化
torch.nn.init.uniform_(tensor, a=0, b=1) # 使值服从均匀分布 U(a,b)
2.2 正态分布初始化
torch.nn.init.normal_(tensor, mean=0, std=1)#使值服从正态分布 N(mean, std),默认值为 0,1
2.3 常数初始化
torch.nn.init.constant_(tensor, val)#使值为常数 val nn.init.constant_(w, 0.3)
2.4 单位矩阵初始化
torch.nn.init.eye_(tensor)#将二维 tensor 初始化为单位矩阵(the identity matrix)
2.5 正交初始化
torch.nn.init.orthogonal_(tensor, gain=1)#使得 tensor 是正交的,论文:Exact solutions to the nonlinear dynamics of learning in deep linear neural networks” - Saxe, A. et al. (2013)
2.6 稀疏初始化
torch.nn.init.sparse_(tensor, sparsity, std=0.01)

从正态分布 N~(0. std)中进行稀疏化,使每一个 column 有一部分为 0 sparsity- 每一个 column 稀疏的比例,即为 0 的比例 nn.init.sparse_(w, sparsity=0.1)

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liiiiiiiiiiiiike

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值