PyTorch 学习笔记(四):权值初始化的十种方法
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_(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這一類激活函數表現不佳而提出的改進,詳細可以參看論文。
?
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')
?
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.其他
?
5. 均勻分布初始化
torch.nn.init.uniform_(tensor,?a=0,?b=1)
使值服從均勻分布U(a,b)
?
6. 正態分布初始化
torch.nn.init.normal_(tensor,?mean=0,?std=1)
使值服從正態分布N(mean, std),默認值為0,1
?
7. 常數初始化
torch.nn.init.constant_(tensor,?val)
使值為常數val nn.init.constant_(w, 0.3)
?
8. 單位矩陣初始化
torch.nn.init.eye_(tensor)
將二維tensor初始化為單位矩陣(the identity matrix)
?
9. 正交初始化
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)
?
10. 稀疏初始化
torch.nn.init.sparse_(tensor,?sparsity,?std=0.01)
從正態分布N~(0. std)中進行稀疏化,使每一個column有一部分為0
sparsity- 每一個column稀疏的比例,即為0的比例
nn.init.sparse_(w, sparsity=0.1)
?
11. 計算增益
torch.nn.init.calculate_gain(nonlinearity,?param=None)
?
?
總結
以上是生活随笔為你收集整理的PyTorch 学习笔记(四):权值初始化的十种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pytorch的默认初始化分布 nn.E
- 下一篇: Pytorch源码与运行原理浅析--网络