torch.nn.init¶
警告
本模块中的所有函数都旨在用于初始化神经网络参数,因此它们都在 torch.no_grad()
模式下运行,不会被 autograd 考虑。
- torch.nn.init.calculate_gain(nonlinearity, param=None)[source][source]¶
返回给定非线性函数的推荐增益值。
值如下所示:
非线性
获得
线性/恒等
卷积{1,2,3}D
Sigmoid
双曲正切函数
ReLU 激活函数
漏波 ReLU
SELU
警告
为了实现自归一化神经网络,应使用
nonlinearity='linear'
代替nonlinearity='selu'
。这将为初始权重赋予1 / N
的方差,这在正向传播中诱导稳定的固定点是必要的。相比之下,SELU
的默认增益牺牲了归一化效果,以换取矩形层中更稳定的梯度流。- 参数:
非线性 – 非线性函数(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)- 一个 n 维 torch.Tensor
a(浮点数)- 均匀分布的下界
b(浮点数)- 均匀分布的上界
生成器(Optional[Generator])- 从中采样的 torch 生成器(默认:None)
- 返回类型:
示例
>>> 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 维 torch.Tensor
mean (均值) – 正态分布的均值
std(float)- 正态分布的标准差
generator(可选[Generator])- 从中采样的 torch Generator(默认:None)
- 返回类型:
示例
>>> w = torch.empty(3, 5) >>> nn.init.normal_(w)
- torch.nn.init.constant_(tensor, val)[source][source]
将输入张量填充为值 。
- 参数:
张量(Tensor)- 一个 n 维 torch.Tensor
val(浮点数)- 用此值填充张量
- 返回类型:
示例
>>> w = torch.empty(3, 5) >>> nn.init.constant_(w, 0.3)
- torch.nn.init.ones_(tensor)[source][source]
将输入张量填充为标量值 1。
- 参数:
张量(Tensor)- 一个 n 维 torch.Tensor
- 返回类型:
示例
>>> w = torch.empty(3, 5) >>> nn.init.ones_(w)
- torch.nn.init.zeros_(tensor)[source][source]¶
将输入张量填充为标量值 0。
- 参数:
张量(Tensor)- 一个 n 维 torch.Tensor
- 返回类型:
示例
>>> w = torch.empty(3, 5) >>> nn.init.zeros_(w)
- torch.nn.init.eye_(tensor)[source][source]¶
用单位矩阵填充二维输入张量。
在线性层中保持输入的恒等性,尽可能多地保留输入。
- 参数:
tensor – 一个二维的 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}-维输入张量。
在卷积层中保持输入的恒等性,尽可能保留与输入通道相同数量的通道。如果 groups>1,则每个通道组保持恒等性
- 参数:
tensor – 一个{3, 4, 5}-维 torch.Tensor
groups(int,可选)- 卷积层中的组数(默认: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 均匀分布填充输入张量。
该方法在《理解深度前馈神经网络的训练难度》一文中进行描述 - Glorot, X. & Bengio, Y. (2010)。生成的张量将具有从 中采样的值。
也称为 Glorot 初始化。
- 参数:
张量(Tensor)- 一个 n 维 torch.Tensor
增益(浮点数)- 一个可选的缩放因子
生成器(Optional[Generator])- 从中采样的 torch Generator(默认:None)
- 返回类型:
示例
>>> w = torch.empty(3, 5) >>> nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain('relu'))
注意
注意,
fan_in
和fan_out
的计算假设权重矩阵以转置方式使用(即x @ w.T
在Linear
层中,其中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 正态分布填充输入张量。
该方法在《理解深度前馈神经网络的训练难度》一文中进行描述 - Glorot, X. & Bengio, Y. (2010)。生成的张量将具有从 中采样的值。
也称为 Glorot 初始化。
- 参数:
张量(Tensor)- 一个 n 维 torch.Tensor
增益(float)- 一个可选的缩放因子
生成器(Optional[Generator])- 从中采样的 torch 生成器(默认:None)
- 返回类型:
示例
>>> w = torch.empty(3, 5) >>> nn.init.xavier_normal_(w)
注意
注意,
fan_in
和fan_out
的计算假设权重矩阵以转置方式使用(即x @ w.T
在Linear
层中,其中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 均匀分布填充输入张量。
该方法在《Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification - He, K. et al. (2015)》中描述。生成的张量将具有从 中采样的值。
也称为 He 初始化。
- 参数:
张量(Tensor)- 一个 n 维 torch.Tensor
a(浮点数)- 此层之后使用的整流器的负斜率(仅用于
'leaky_relu'
)模式(字符串)- 要么是
'fan_in'
(默认)或'fan_out'
。选择'fan_in'
将保留权重在正向传递中的方差幅度。选择'fan_out'
将保留反向传递中的幅度。非线性(str)- 非线性函数(nn.functional 名称),建议仅与
'relu'
或'leaky_relu'
(默认)一起使用。生成器(Optional[Generator])- 从中采样的 torch 生成器(默认:None)
示例
>>> w = torch.empty(3, 5) >>> nn.init.kaiming_uniform_(w, mode='fan_in', nonlinearity='relu')
注意
注意,
fan_in
和fan_out
的计算假设权重矩阵以转置方式使用,(即x @ w.T
在Linear
层中,其中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)- 一个 n 维 torch.Tensor
一个(浮点数)- 此层之后使用的整流器的负斜率(仅与
'leaky_relu'
一起使用)模式(字符串)- 要么是
'fan_in'
(默认)或'fan_out'
。选择'fan_in'
将保留前向传递中权重的方差幅度。选择'fan_out'
将保留反向传递中的幅度。非线性函数(字符串)- 非线性函数(nn.functional 名称),建议仅与
'relu'
或'leaky_relu'
(默认)一起使用。生成器(Optional[Generator])- 从中采样的 torch 生成器(默认:None)
示例
>>> w = torch.empty(3, 5) >>> nn.init.kaiming_normal_(w, mode='fan_out', nonlinearity='relu')
注意
注意,
fan_in
和fan_out
的计算假设权重矩阵以转置方式使用(即,x @ w.T
在Linear
层中,其中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 维 torch.Tensor
均值(浮点数)- 正态分布的均值
标准差(浮点数)- 正态分布的标准差
a(浮点数)- 最小截止值
b (浮点数) – 最大截止值
generator (可选[Generator]) – 从中采样的 torch Generator(默认:None)
- 返回类型:
示例
>>> w = torch.empty(3, 5) >>> nn.init.trunc_normal_(w)
- torch.nn.init.orthogonal_(tensor, gain=1, generator=None)[source][source]¶
将输入张量填充为(半)正交矩阵。
详细描述见《深度线性神经网络中学习非线性动力学的精确解》- Saxe, A. 等人(2013)。输入张量必须至少有 2 个维度,对于维度超过 2 的张量,尾部维度将被展平。
- 参数:
张量 - 一个 n 维 torch.Tensor,其中 为张量的第一个维度。
增益 - 可选的缩放因子。
generator (Optional[Generator]) – 从中采样的 torch 生成器(默认: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 填充为稀疏矩阵。
非零元素将从正态分布中抽取,如 Deep learning via Hessian-free optimization - Martens, J. (2010) 中所述。
- 参数:
张量 - 一个多维度的 torch.Tensor
稀疏性 - 每列中设置为 0 的元素比例
std - 生成非零值所使用的正态分布的标准差
生成器(可选[Generator])- 从中抽取样本的 torch 生成器(默认:None)
示例
>>> w = torch.empty(3, 5) >>> nn.init.sparse_(w, sparsity=0.1)