torch.nn.init¶
-
torch.nn.init.calculate_gain(nonlinearity, param=None)[source]¶ 返回给定非线性函数的推荐增益值。 值如下:
非线性
获得
线性 / 恒等
Conv{1,2,3}D
Sigmoid
双曲正切
ReLU
Leaky Relu
SELU
警告
为了实现自归一化神经网络, 你应该使用
nonlinearity='linear'而不是nonlinearity='selu'。 这使得初始权重的方差为1 / N, 这是在前向传播中诱导稳定固定点所必需的。 相比之下,SELU的默认增益牺牲了归一化效果, 以获得矩形层中更稳定的梯度流。- Parameters
非线性函数 – 非线性函数 (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)[source]¶ 用从均匀分布 中抽取的值填充输入 Tensor。
- Parameters
张量 – 一个n维的 torch.Tensor
a – 均匀分布的下界
b – 均匀分布的上限
示例
>>> w = torch.empty(3, 5) >>> nn.init.uniform_(w)
-
torch.nn.init.normal_(tensor, mean=0.0, std=1.0)[source]¶ 用从正态分布 中抽取的值填充输入 Tensor。
- Parameters
张量 – 一个n维的 torch.Tensor
均值 – 正态分布的均值
std – 正态分布的标准差
示例
>>> w = torch.empty(3, 5) >>> nn.init.normal_(w)
-
torch.nn.init.constant_(tensor, val)[source]¶ 用值 填充输入 Tensor。
- Parameters
张量 – 一个n维的 torch.Tensor
val – 用于填充张量的值
示例
>>> w = torch.empty(3, 5) >>> nn.init.constant_(w, 0.3)
-
torch.nn.init.ones_(tensor)[source]¶ 用标量值 1 填充输入 Tensor。
- Parameters
张量 – 一个n维的 torch.Tensor
示例
>>> w = torch.empty(3, 5) >>> nn.init.ones_(w)
-
torch.nn.init.zeros_(tensor)[source]¶ 用标量值 0 填充输入 Tensor。
- Parameters
张量 – 一个n维的 torch.Tensor
示例
>>> w = torch.empty(3, 5) >>> nn.init.zeros_(w)
-
torch.nn.init.eye_(tensor)[source]¶ 用单位矩阵填充二维输入 Tensor。在 Linear 层中保留输入的恒等性,尽可能多地保留输入。
- Parameters
tensor – 一个2维的 torch.Tensor
示例
>>> w = torch.empty(3, 5) >>> nn.init.eye_(w)
-
torch.nn.init.dirac_(tensor, groups=1)[source]¶ 用Dirac delta函数填充{3, 4, 5}维输入 Tensor。在 Convolutional 层中保留输入的身份,尽可能多地保留输入通道。当groups>1时,每个通道组都保留身份
- Parameters
tensor – 一个 {3, 4, 5} 维的 torch.Tensor
groups (可选) – 卷积层中的组数 (默认值: 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)[source]¶ 用根据 Tensor 中描述的方法填充输入,该方法 在 Understanding the difficulty of training deep feedforward neural networks - Glorot, X. & Bengio, Y. (2010) 中有说明,使用均匀 分布。生成的张量将从 中采样值
也称为 Glorot 初始化。
- Parameters
张量 – 一个n维的 torch.Tensor
增益 – 一个可选的缩放因子
示例
>>> 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)[source]¶ 用根据 Tensor 中描述的方法填充输入,该方法 在 Understanding the difficulty of training deep feedforward neural networks - Glorot, X. & Bengio, Y. (2010) 中有说明,使用正态分布。 生成的张量将从 中采样值
也称为 Glorot 初始化。
- Parameters
张量 – 一个n维的 torch.Tensor
增益 – 一个可选的缩放因子
示例
>>> w = torch.empty(3, 5) >>> nn.init.xavier_normal_(w)
-
torch.nn.init.kaiming_uniform_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')[source]¶ 使用 Tensor 中描述的方法,根据均匀分布填充输入值 ,其中
也称为 He 初始化。
- Parameters
张量 – 一个n维的 torch.Tensor
a – 该层之后使用的整流器的负斜率(仅与
'leaky_relu'一起使用)mode – 要么是
'fan_in'(默认)要么是'fan_out'。选择'fan_in'可以保留前向传播中权重方差的幅度。选择'fan_out'可以保留反向传播中的幅度。非线性函数 – 非线性函数 (nn.functional 名称), 建议仅与
'relu'或'leaky_relu'一起使用 (默认值)。
示例
>>> 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')[source]¶ 用根据 Tensor 中描述的方法填充输入,该方法 在 Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification - He, K. 等人(2015)中有所说明,使用 正态分布。生成的张量将从 中采样值
也称为 He 初始化。
- Parameters
张量 – 一个n维的 torch.Tensor
a – 该层之后使用的整流器的负斜率(仅与
'leaky_relu'一起使用)mode – 要么是
'fan_in'(默认)要么是'fan_out'。选择'fan_in'可以保留前向传播中权重方差的幅度。选择'fan_out'可以保留反向传播中的幅度。非线性函数 – 非线性函数 (nn.functional 名称), 建议仅与
'relu'或'leaky_relu'一起使用 (默认值)。
示例
>>> 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)[source]¶ 用截断正态分布的值填充输入张量。这些值实际上是从正态分布中抽取的,超出范围的值会被重新抽取,直到它们落在范围内。用于生成随机值的方法在时效果最佳。
- Parameters
张量 – 一个n维的 torch.Tensor
均值 – 正态分布的均值
std – 正态分布的标准差
a – 最小截断值
b – 最大截断值
示例
>>> w = torch.empty(3, 5) >>> nn.init.trunc_normal_(w)
-
torch.nn.init.orthogonal_(tensor, gain=1)[source]¶ 用(半)正交矩阵填充输入 Tensor,如 在 Exact solutions to the nonlinear dynamics of learning in deep linear neural networks - Saxe, A. 等人(2013)中所述。输入张量必须有 至少 2 个维度,对于具有多于 2 个维度的张量, 后面的维度将被展平。
- Parameters
tensor – 一个n维的torch.Tensor,其中
gain – 可选的缩放因子
示例
>>> w = torch.empty(3, 5) >>> nn.init.orthogonal_(w)
-
torch.nn.init.sparse_(tensor, sparsity, std=0.01)[source]¶ 将2D输入 Tensor 作为稀疏矩阵进行填充,其中 非零元素将从正态分布 中抽取,如 Deep learning via Hessian-free optimization - Martens, J. (2010) 中所述。
- Parameters
张量 – 一个n维的 torch.Tensor
稀疏性 – 每一列中设置为零的元素比例
std – 用于生成非零值的正态分布的标准差
示例
>>> w = torch.empty(3, 5) >>> nn.init.sparse_(w, sparsity=0.1)