捷徑

torch.nn.init

警告

此模組中的所有函數都旨在用於初始化神經網路參數,因此它們都在 torch.no_grad() 模式下運行,並且不會被 autograd 考慮在內。

torch.nn.init.calculate_gain(nonlinearity, param=None)[來源][來源]

傳回給定非線性函數的建議增益值。

這些值如下

非線性

增益

線性 / 恆等

11

Conv{1,2,3}D

11

Sigmoid

11

Tanh

53\frac{5}{3}

ReLU

2\sqrt{2}

Leaky Relu

21+negative_slope2\sqrt{\frac{2}{1 + \text{negative\_slope}^2}}

SELU

34\frac{3}{4}

警告

為了實作 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]

使用從均勻分佈中提取的值填充輸入張量。

U(a,b)\mathcal{U}(a, b).

參數
  • tensor (Tensor) – n 維的 torch.Tensor

  • a (float) – 均勻分佈的下限

  • b (float) – 均勻分佈的上界

  • generator (Optional[Generator]) – 用於取樣的 torch Generator (預設: None)

回傳類型

Tensor

範例

>>> 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。

N(mean,std2)\mathcal{N}(\text{mean}, \text{std}^2).

參數
  • tensor (Tensor) – n 維的 torch.Tensor

  • mean (float) – 常態分佈的平均值

  • std (float) – 常態分佈的標準差

  • generator (Optional[Generator]) – 用於取樣的 torch Generator (預設: None)

回傳類型

Tensor

範例

>>> w = torch.empty(3, 5)
>>> nn.init.normal_(w)
torch.nn.init.constant_(tensor, val)[source][source]

使用數值 val\text{val} 填充輸入的 Tensor。

參數
  • tensor (Tensor) – n 維的 torch.Tensor

  • val (float) – 用於填充 tensor 的數值

回傳類型

Tensor

範例

>>> w = torch.empty(3, 5)
>>> nn.init.constant_(w, 0.3)
torch.nn.init.ones_(tensor)[source][source]

使用純量值 1 填充輸入的 Tensor。

參數

tensor (Tensor) – n 維的 torch.Tensor

回傳類型

Tensor

範例

>>> w = torch.empty(3, 5)
>>> nn.init.ones_(w)
torch.nn.init.zeros_(tensor)[source][source]

使用純量值 0 填充輸入的 Tensor。

參數

tensor (Tensor) – n 維的 torch.Tensor

回傳類型

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)。產生的張量的值將從 U(a,a)\mathcal{U}(-a, a) 取樣,其中

a=gain×6fan_in+fan_outa = \text{gain} \times \sqrt{\frac{6}{\text{fan\_in} + \text{fan\_out}}}

又稱為 Glorot 初始化。

參數
  • tensor (Tensor) – n 維的 torch.Tensor

  • gain (float) – 一個可選的縮放因子

  • generator (Optional[Generator]) – 用於取樣的 torch Generator (預設: None)

回傳類型

Tensor

範例

>>> w = torch.empty(3, 5)
>>> nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain('relu'))

注意

請注意, fan_infan_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)。產生的張量的值將從 N(0,std2)\mathcal{N}(0, \text{std}^2) 取樣,其中

std=gain×2fan_in+fan_out\text{std} = \text{gain} \times \sqrt{\frac{2}{\text{fan\_in} + \text{fan\_out}}}

又稱為 Glorot 初始化。

參數
  • tensor (Tensor) – n 維的 torch.Tensor

  • gain (float) – 一個可選的縮放因子

  • generator (Optional[Generator]) – 用於取樣的 torch Generator (預設: None)

回傳類型

Tensor

範例

>>> w = torch.empty(3, 5)
>>> nn.init.xavier_normal_(w)

注意

請注意,計算 fan_infan_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 將從 U(bound,bound)\mathcal{U}(-\text{bound}, \text{bound}) 中採樣值,其中

bound=gain×3fan_mode\text{bound} = \text{gain} \times \sqrt{\frac{3}{\text{fan\_mode}}}

也稱為 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_infan_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)。產生的張量將從 N(0,std2)\mathcal{N}(0, \text{std}^2) 中取樣。

std=gainfan_mode\text{std} = \frac{\text{gain}}{\sqrt{\text{fan\_mode}}}

也稱為 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_infan_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。

這些數值有效地取樣自分佈 N(mean,std2)\mathcal{N}(\text{mean}, \text{std}^2),且落在範圍 [a,b][a, b] 之外的值會被重新取樣,直到它們落在範圍內。 用於生成隨機數值的方法在 ameanba \leq \text{mean} \leq b 時效果最佳。

參數
  • tensor (Tensor) – n 維的 torch.Tensor

  • mean (float) – 常態分佈的平均值

  • std (float) – 常態分佈的標準差

  • a (float) – 最小截止值

  • b (float) – 最大截止值

  • generator (Optional[Generator]) – 用於取樣的 torch Generator (預設: None)

回傳類型

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 個維度的張量,則後面的維度將會被展平。

參數
  • tensor – 一個 n 維的 torch.Tensor,其中 n2n \geq 2

  • gain – 可選的縮放因子

  • generator (Optional[Generator]) – 用於取樣的 torch Generator (預設: None)

範例

>>> w = torch.empty(3, 5)
>>> nn.init.orthogonal_(w)
torch.nn.init.sparse_(tensor, sparsity, std=0.01, generator=None)[source][source]

將 2D 輸入 Tensor 填充為稀疏矩陣。

非零元素將取樣自分佈 N(0,0.01)\mathcal{N}(0, 0.01),如 Deep learning via Hessian-free optimization - Martens, J. (2010) 中所述。

參數
  • tensor – 一個 n 維的 torch.Tensor

  • sparsity – 每列中要設置為零的元素比例

  • std – 用於生成非零值的常態分佈的標準差

  • generator (Optional[Generator]) – 用於取樣的 torch Generator (預設: None)

範例

>>> w = torch.empty(3, 5)
>>> nn.init.sparse_(w, sparsity=0.1)

文件

存取 PyTorch 的完整開發者文件

查看文件

教學

取得適用於初學者和進階開發人員的深入教學

查看教學

資源

尋找開發資源並取得問題解答

查看資源