本文截取自《PyTorch 模型訓練實用教程》,獲取全文pdf請點擊:https://github.com/tensor-yu/PyTorch_Tutorial
PyTorch在torch.nn.init中提供了常用的初始化方法函數,這裏簡單介紹,方便查詢使用。
介紹分兩部分:
Xavier,kaiming系列;
其他方法分佈
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)
nonlinearity | gain |
---|---|
Linear / Identity | 1 |
Conv{1,2,3}D | 1 |
Sigmoid | 1 |
Tanh | 5/3 |
ReLU | sqrt(2) |
Leaky Relu | sqrt(2/1+neg_slop^2) |
轉載請註明出處:https://blog.csdn.net/u011995719/article/details/85107122