torch.nn.init¶
警告
此模組中的所有函數都旨在用於初始化神經網路參數,因此它們都在 torch.no_grad()
模式下運行,並且不會被 autograd 考慮在內。
- torch.nn.init.calculate_gain(nonlinearity, param=None)[來源][來源]¶
傳回給定非線性函數的建議增益值。
這些值如下
非線性
增益
線性 / 恆等
Conv{1,2,3}D
Sigmoid
Tanh
ReLU
Leaky Relu
SELU
警告
為了實作 Self-Normalizing Neural Networks ,您應該使用
nonlinearity='linear'
而不是nonlinearity='selu'
。這會賦予初始權重1 / N
的變異數,這是在前向傳播中引導出穩定不動點所必需的。相反的,SELU
的預設增益犧牲了標準化效果,以在矩形層中獲得更穩定的梯度流。- 參數
nonlinearity – 非線性函數 ( nn.functional 名稱)
param – 非線性函數的可選參數
範例
>>> gain = nn.init.calculate_gain('leaky_relu', 0.2) # leaky_relu with negative_slope=0.2
- torch.nn.init.uniform_(tensor, a=0.0, b=1.0, generator=None)[source][source]¶
使用從均勻分佈中提取的值填充輸入張量。
.
- 參數
- 回傳類型
範例
>>> w = torch.empty(3, 5) >>> nn.init.uniform_(w)
- torch.nn.init.normal_(tensor, mean=0.0, std=1.0, generator=None)[source][source]¶
用常態分佈中取樣的值填充輸入的 Tensor。
.
- 參數
- 回傳類型
範例
>>> w = torch.empty(3, 5) >>> nn.init.normal_(w)
- torch.nn.init.constant_(tensor, val)[source][source]¶
使用數值 填充輸入的 Tensor。
範例
>>> w = torch.empty(3, 5) >>> nn.init.constant_(w, 0.3)
- torch.nn.init.ones_(tensor)[source][source]¶
使用純量值 1 填充輸入的 Tensor。
範例
>>> w = torch.empty(3, 5) >>> nn.init.ones_(w)
- torch.nn.init.zeros_(tensor)[source][source]¶
使用純量值 0 填充輸入的 Tensor。
範例
>>> w = torch.empty(3, 5) >>> nn.init.zeros_(w)
- torch.nn.init.eye_(tensor)[source][source]¶
使用單位矩陣填充 2 維輸入的 Tensor 。
在 Linear 層中保留輸入的恆等性,並盡可能保留更多的輸入。
- 參數
tensor – 一個 2 維的 torch.Tensor
範例
>>> w = torch.empty(3, 5) >>> nn.init.eye_(w)
- torch.nn.init.dirac_(tensor, groups=1)[source][source]¶
使用狄拉克 delta 函數填充 {3, 4, 5} 維輸入的 Tensor。
在 Convolutional 層中保留輸入的恆等性,並盡可能保留更多的輸入通道。 如果 groups>1,則每組通道都會保留恆等性
- 參數
tensor – 一個 {3, 4, 5} 維的 torch.Tensor
groups (int, optional) – 卷積層中的組數 (預設: 1)
範例
>>> w = torch.empty(3, 16, 5, 5) >>> nn.init.dirac_(w) >>> w = torch.empty(3, 24, 5, 5) >>> nn.init.dirac_(w, 3)
- torch.nn.init.xavier_uniform_(tensor, gain=1.0, generator=None)[source][source]¶
使用 Xavier 均勻分佈中的數值填充輸入的 Tensor 。
此方法描述於 Understanding the difficulty of training deep feedforward neural networks - Glorot, X. & Bengio, Y. (2010)。產生的張量的值將從 取樣,其中
又稱為 Glorot 初始化。
- 參數
- 回傳類型
範例
>>> w = torch.empty(3, 5) >>> nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain('relu'))
注意
請注意,
fan_in
和fan_out
的計算是假設權重矩陣以轉置方式使用(例如,Linear
層中的x @ w.T
,其中w.shape = [fan_out, fan_in]
)。這對於正確的初始化非常重要。 如果您計劃使用x @ w
,其中w.shape = [fan_in, fan_out]
,請傳入轉置的權重矩陣,即nn.init.xavier_uniform_(w.T, ...)
。
- torch.nn.init.xavier_normal_(tensor, gain=1.0, generator=None)[source][source]¶
使用 Xavier 常態分佈填充輸入 Tensor 的值。
此方法描述於 Understanding the difficulty of training deep feedforward neural networks - Glorot, X. & Bengio, Y. (2010)。產生的張量的值將從 取樣,其中
又稱為 Glorot 初始化。
- 參數
- 回傳類型
範例
>>> w = torch.empty(3, 5) >>> nn.init.xavier_normal_(w)
注意
請注意,計算
fan_in
和fan_out
時,假設權重矩陣是以轉置的方式使用(即在Linear
層中,使用x @ w.T
,其中w.shape = [fan_out, fan_in]
)。這對於正確的初始化很重要。如果您計劃使用x @ w
,其中w.shape = [fan_in, fan_out]
,請傳入轉置的權重矩陣,例如nn.init.xavier_normal_(w.T, ...)
。
- torch.nn.init.kaiming_uniform_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu', generator=None)[source][source]¶
使用 Kaiming 均勻分布的值填充輸入 Tensor。
此方法描述於 Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification - He, K. et al. (2015)。產生的 tensor 將從 中採樣值,其中
也稱為 He 初始化。
- 參數
tensor (Tensor) – n 維的 torch.Tensor
a (float) – 此層之後使用的 rectifier 的負斜率 (僅適用於
'leaky_relu'
)mode (str) – 可以是
'fan_in'
(預設) 或是'fan_out'
。選擇'fan_in'
會保留前向傳播中權重變異數的大小。選擇'fan_out'
則會保留反向傳播中的量級。nonlinearity (str) – 非線性函數的名稱 (nn.functional 中的名稱),建議僅與
'relu'
或'leaky_relu'
(預設) 一起使用。generator (Optional[Generator]) – 用於取樣的 torch Generator (預設: None)
範例
>>> w = torch.empty(3, 5) >>> nn.init.kaiming_uniform_(w, mode='fan_in', nonlinearity='relu')
注意
請注意,
fan_in
和fan_out
的計算假設權重矩陣是以轉置方式使用 (例如,Linear
層中的x @ w.T
,其中w.shape = [fan_out, fan_in]
)。這對於正確的初始化非常重要。如果您計劃使用x @ w
,其中w.shape = [fan_in, fan_out]
,請傳入一個轉置的權重矩陣,例如nn.init.kaiming_uniform_(w.T, ...)
。
- torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu', generator=None)[source][source]¶
使用 Kaiming 常態分布填充輸入的 Tensor。
此方法描述於 Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification - He, K. et al. (2015)。產生的張量將從 中取樣。
也稱為 He 初始化。
- 參數
tensor (Tensor) – n 維的 torch.Tensor
a (float) – 此層之後使用的 rectifier 的負斜率 (僅適用於
'leaky_relu'
)mode (str) – 可以是
'fan_in'
(預設) 或是'fan_out'
。選擇'fan_in'
會保留前向傳播中權重變異數的大小。選擇'fan_out'
則會保留反向傳播中的量級。nonlinearity (str) – 非線性函數的名稱 (nn.functional 中的名稱),建議僅與
'relu'
或'leaky_relu'
(預設) 一起使用。generator (Optional[Generator]) – 用於取樣的 torch Generator (預設: None)
範例
>>> w = torch.empty(3, 5) >>> nn.init.kaiming_normal_(w, mode='fan_out', nonlinearity='relu')
注意
請注意,
fan_in
和fan_out
的計算假設權重矩陣是以轉置方式使用 (例如,Linear
層中的x @ w.T
,其中w.shape = [fan_out, fan_in]
)。這對於正確的初始化非常重要。如果您計劃使用x @ w
,其中w.shape = [fan_in, fan_out]
,請傳入一個轉置的權重矩陣,例如nn.init.kaiming_normal_(w.T, ...)
。
- torch.nn.init.trunc_normal_(tensor, mean=0.0, std=1.0, a=-2.0, b=2.0, generator=None)[source][source]¶
使用截斷常態分布填充輸入的 Tensor。
這些數值有效地取樣自分佈 ,且落在範圍 之外的值會被重新取樣,直到它們落在範圍內。 用於生成隨機數值的方法在 時效果最佳。
- 參數
- 回傳類型
範例
>>> w = torch.empty(3, 5) >>> nn.init.trunc_normal_(w)
- torch.nn.init.orthogonal_(tensor, gain=1, generator=None)[source][source]¶
用 (半) 正交矩陣填充輸入 Tensor。
描述於 Exact solutions to the nonlinear dynamics of learning in deep linear neural networks - Saxe, A. et al. (2013)。 輸入張量必須至少有 2 個維度,對於具有超過 2 個維度的張量,則後面的維度將會被展平。
- 參數
範例
>>> w = torch.empty(3, 5) >>> nn.init.orthogonal_(w)