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)
轉載至:https://www.cnblogs.com/jfdwd/p/11269622.html