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_(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')

2.其他

 

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)

 

轉載至:https://www.cnblogs.com/jfdwd/p/11269622.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM