torch.nn.init¶
警告
此模組中的所有函式都旨在用於初始化神經網路參數,因此它們都在 torch.no_grad() 模式下運行,並且不會被自動微分考慮在內。
- torch.nn.init.calculate_gain(nonlinearity, param=None)[原始碼]¶
返回給定非線性函數的建議增益值。
值如下
非線性
增益
線性 / 恆等
Conv{1,2,3}D
Sigmoid
Tanh
ReLU
Leaky Relu
SELU
警告
為了實作 自我正規化神經網路,您應該使用
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]¶
使用從均勻分佈中提取的值填充輸入張量。
.
- 參數
- 返回類型
範例
>>> w = torch.empty(3, 5) >>> nn.init.uniform_(w)
- torch.nn.init.normal_(tensor, mean=0.0, std=1.0, generator=None)[source]¶
使用從正態分佈中提取的值填充輸入張量。
.
- 參數
- 返回類型
範例
>>> w = torch.empty(3, 5) >>> nn.init.normal_(w)
- torch.nn.init.constant_(tensor, val)[source]¶
使用值 填充輸入張量。
範例
>>> w = torch.empty(3, 5) >>> nn.init.constant_(w, 0.3)
- torch.nn.init.ones_(tensor)[source]¶
使用純量值 1 填充輸入張量。
範例
>>> w = torch.empty(3, 5) >>> nn.init.ones_(w)
- torch.nn.init.zeros_(tensor)[source]¶
使用純量值 0 填充輸入張量。
範例
>>> w = torch.empty(3, 5) >>> nn.init.zeros_(w)
- torch.nn.init.eye_(tensor)[source]¶
使用單位矩陣填充二維輸入 Tensor。
在 Linear 層中保留輸入的身份,盡可能保留盡可能多的輸入。
- 參數
tensor - 一個二維的 torch.Tensor
範例
>>> w = torch.empty(3, 5) >>> nn.init.eye_(w)
- torch.nn.init.dirac_(tensor, groups=1)[source]¶
使用狄拉克 δ 函數填充 {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]¶
使用 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'))
- torch.nn.init.xavier_normal_(tensor, gain=1.0, generator=None)[原始碼]¶
使用 Xavier 常態分佈的值填入輸入 張量。
該方法在 理解訓練深度前饋神經網路的難度 - Glorot、X. 和 Bengio、Y. (2010) 中有所描述。產生的張量將具有從 中採樣的值,其中
也稱為 Glorot 初始化。
- 參數
- 返回類型
範例
>>> w = torch.empty(3, 5) >>> nn.init.xavier_normal_(w)
- torch.nn.init.kaiming_uniform_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu', generator=None)[原始碼]¶
使用 Kaiming 均勻分佈的值填入輸入 張量。
該方法在 深入研究整流器:在 ImageNet 分類上超越人類水平的表現 - He、K. 等人 (2015) 中有所描述。產生的張量將具有從 中採樣的值,其中
也稱為 He 初始化。
- 參數
範例
>>> w = torch.empty(3, 5) >>> nn.init.kaiming_uniform_(w, mode='fan_in', nonlinearity='relu')
- torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu', generator=None)[原始碼]¶
使用 Kaiming 常態分佈的值填入輸入 張量。
此方法在 Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification - He, K. et al. (2015) 中有所描述。產生的張量將具有從 取樣的數值,其中
也稱為 He 初始化。
- 參數
範例
>>> w = torch.empty(3, 5) >>> nn.init.kaiming_normal_(w, mode='fan_out', nonlinearity='relu')
- torch.nn.init.trunc_normal_(tensor, mean=0.0, std=1.0, a=-2.0, b=2.0, generator=None)[source]¶
使用從截斷常態分佈中提取的值填充輸入張量。
這些值實際上是從常態分佈 中提取的,其中超出 的值會被重新提取,直到它們在邊界內為止。當 時,用於生成隨機值的方法效果最佳。
- 參數
- 返回類型
範例
>>> w = torch.empty(3, 5) >>> nn.init.trunc_normal_(w)
- torch.nn.init.orthogonal_(tensor, gain=1, generator=None)[source]¶
使用(半)正交矩陣填充輸入 張量。
在 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)