【细聊】torch.nn.init 初始化
文章目錄
- 1、init.uniform
- 2、nn.init.normal
- 3、nn.init.constant
- 4、nn.init.eye
- 5、nn.init.dirac
- 6、nn.init.xavier_uniform
- 7、nn.init.xavier_normal
- 8、nn.init.kaiming_uniform
- 9、nn.init.kaiming_normal
- 10、nn.init.orthogonal
- 11、nn.init.sparse
1、init.uniform
init.uniform(tensor, a=0, b=1)>>> w = torch.Tensor(3, 5) >>> nn.init.uniform(w)從均勻分布 U(a,b)\mathcal{U}(a, b)U(a,b)中生成值,填充輸入的張量或變量
Parameters:
- tensor - n維的torch.Tensor
- a - 均勻分布的下界
- b - 均勻分布的上界
2、nn.init.normal
nn.init.normal(tensor, mean=0, std=1)>>> w = torch.Tensor(3, 5) >>> nn.init.normal(w)從給定均值和標準差的正態分布 N(mean,std)\mathcal{N}(mean, std)N(mean,std)中生成值,填充輸入的張量或變量
Parameters:
- tensor – n維的torch.Tensor
- mean – 正態分布的均值
- std – 正態分布的標準差
3、nn.init.constant
nn.init.constant(tensor, val)>>> w = torch.Tensor(3, 5) >>> nn.init.constant(w)用val的值填充輸入的張量或變量
Parameters:
- tensor – n維的torch.Tensor 或 autograd.Variable
- val – 用來填充張量的值
4、nn.init.eye
nn.init.eye(tensor)>>> w = torch.Tensor(3, 5) >>> nn.init.eye(w)用單位矩陣來填充2維輸入張量或變量。在線性層盡可能多的保存輸入特性
Parameters:
- tensor – 2維的torch.Tensor 或 autograd.Variable
5、nn.init.dirac
nn.init.dirac(tensor)>>> w = torch.Tensor(3, 16, 5, 5) >>> nn.init.dirac(w)用Dirac δ\deltaδ 函數來填充{3, 4, 5}維輸入張量或變量。在卷積層盡可能多的保存輸入通道特性
Parameters:
- tensor – {3, 4, 5}維的torch.Tensor 或 autograd.Variable
6、nn.init.xavier_uniform
nn.init.xavier_uniform(tensor, gain=1)>>> w = torch.Tensor(3, 5) >>> nn.init.xavier_uniform(w, gain=math.sqrt(2.0))用一個均勻分布生成值,填充輸入的張量或變量。結果張量中的值采樣自U(-a, a),其中 a=gain?6fan_in+fan_outa= gain * \sqrt{ \frac{6}{fan\_in + fan\_out}}a=gain?fan_in+fan_out6??,該方法也被稱為Glorot initialisation
參考:Glorot, X.和Bengio, Y.等“Understanding the difficulty of training deep feedforward neural networks”
Parameters:
- tensor – n維的torch.Tensor
- gain - 可選的縮放因子
7、nn.init.xavier_normal
nn.init.xavier_normal(tensor, gain=1)>>> w = torch.Tensor(3, 5) >>> nn.init.xavier_normal(w)用一個正態分布生成值,填充輸入的張量或變量。結果張量中的值采樣自均值為0,標準差為 gain?2fan_in+fan_outgain * \sqrt{\frac{2}{fan\_in + fan\_out}}gain?fan_in+fan_out2?? 的正態分布。也被稱為Glorot initialisation
參考:Glorot, X.和Bengio, Y. 等“Understanding the difficulty of training deep feedforward neural networks”
Parameters:
- tensor – n維的torch.Tensor
- gain - 可選的縮放因子
8、nn.init.kaiming_uniform
nn.init.kaiming_uniform(tensor, a=0, mode='fan_in',nonlinearity='leaky_relu')>>> w = torch.Tensor(3, 5) >>> nn.init.kaiming_uniform(w, mode='fan_in')用一個均勻分布生成值,填充輸入的張量或變量。結果張量中的值采樣自U(-bound, bound),其中 bound=gain×3fan_modebound = gain \times \sqrt{\frac{3}{fan\_mode}}bound=gain×fan_mode3??,也被稱為He initialisation
參考:He, K等“Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification”
Parameters:
- tensor – n維的torch.Tensor或autograd.Variable
- a -這層之后使用的rectifier的斜率系數(ReLU的默認值為0)
- mode -可以為“fan_in”(默認)或 “fan_out”
“fan_in”保留前向傳播時權值方差的量級
“fan_out”保留反向傳播時的量級 - nonlinearity=‘leaky_relu’ - 非線性函數 建議“relu”或“leaky_relu”(默認值)使用。
9、nn.init.kaiming_normal
nn.init.kaiming_normal(tensor, a=0, mode='fan_in')>>> w = torch.Tensor(3, 5) >>> nn.init.kaiming_normal(w, mode='fan_out')用一個正態分布生成值,填充輸入的張量或變量。結果張量中的值采樣自均值為0,標準差為 std=2(1+a2)?faninstd=\sqrt{\frac{2}{(1 + a^2) * fan_in}}std=(1+a2)?fani?n2?? 的正態分布
參考:He, K 在 “Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification”
Parameters:
- tensor – n維的torch.Tensor或 autograd.Variable
- a -這層之后使用的rectifier的斜率系數(ReLU的默認值為0)
- mode -可以為“fan_in”(默認)或 “fan_out”
“fan_in”保留前向傳播時權值方差的量級
“fan_out”保留反向傳播時的量級
10、nn.init.orthogonal
nn.init.orthogonal(tensor, gain=1)>>> w = torch.Tensor(3, 5) >>> nn.init.orthogonal(w)用(半)正交矩陣填充輸入的張量或變量。輸入張量必須至少是2維的,對于更高維度的張量,超出的維度會被展平,視作行等于第一個維度,列等于稀疏矩陣乘積的2維表示
【其中非零元素生成自均值為0,標準差為std的正態分布】
參考:Saxe, A等人(2013)的“Exact solutions to the nonlinear dynamics of learning in deep linear neural networks”
Parameters:
- tensor – n維的torch.Tensor 或 autograd.Variable,其中n>=2
- gain -可選
11、nn.init.sparse
nn.init.sparse(tensor, sparsity, std=0.01)>>> w = torch.Tensor(3, 5) >>> nn.init.sparse(w, sparsity=0.1)將2維的輸入張量或變量當做 稀疏矩陣填充,其中非零元素根據一個均值為0,標準差為std的正態分布生成
參考:Martens, J.(2010)的 “Deep learning via Hessian-free optimization”
Parameters:
- tensor – n維的torch.Tensor或autograd.Variable
- sparsity - 每列中需要被設置成零的元素比例
- std - 用于生成非零值的正態分布的標準差
總結
以上是生活随笔為你收集整理的【细聊】torch.nn.init 初始化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [渝粤教育] 四川大学 简明大学化学·物
- 下一篇: 查询自己电脑的IP地址