torch.nn.init¶
警告
此模組中的所有函式都旨在用於初始化神經網路引數,因此它們都在 torch.no_grad() 模式下執行,並且不會被 autograd 記錄。
- torch.nn.init.calculate_gain(nonlinearity, param=None)[source][source]¶
返回給定非線性函式的推薦增益值。
值如下:
非線性
增益
線性 / 恆等
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]¶
用均勻分佈的值填充輸入 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。
.
- 引數
- 返回型別
示例
>>> 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]¶
用 Dirac 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) 中有所描述。結果 Tensor 的值將從 取樣,其中
也稱為 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) 中有所描述。結果 Tensor 的值將從 取樣,其中
也稱為 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. 等 (2015) 中有所描述。結果 Tensor 的值將從 取樣,其中
也稱為 He 初始化。
- 引數
tensor (Tensor) – 一個 n 維 torch.Tensor
a (float) – 此層之後使用的整流函式的負斜率(僅用於
'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 正態分佈填充輸入的 張量 的值。
該方法在 Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification - He, K. et al. (2015) 中有描述。得到的張量將具有從 取樣的值,其中
也稱為 He 初始化。
- 引數
tensor (Tensor) – 一個 n 維 torch.Tensor
a (float) – 此層之後使用的整流函式的負斜率(僅用於
'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]¶
使用截斷正態分佈填充輸入的張量。
值實際上是從正態分佈 中抽取的,超出範圍 的值會被重新抽取,直到它們在界限內。用於生成隨機值的方法在 時效果最佳。
- 引數
- 返回型別
示例
>>> w = torch.empty(3, 5) >>> nn.init.trunc_normal_(w)
- torch.nn.init.orthogonal_(tensor, gain=1, generator=None)[source][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)