torch.nn.init¶
警告
本模块中的所有函数都旨在用于初始化神经网络参数,因此它们都在torch.no_grad()
模式下运行,并且不会被autograd记录。
- torch.nn.init.calculate_gain(nonlinearity, param=None)[源代码]¶
返回给定非线性函数的推荐增益值。
这些值如下:
非线性
增益
线性 / 恒等
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,负斜率=0.2
- torch.nn.init.uniform_(tensor, a=0.0, b=1.0, generator=None)[源代码]¶
用从均匀分布中抽取的值填充输入张量。
.
- Parameters
- Return type
示例
>>> w = torch.empty(3, 5) >>> nn.init.uniform_(w)
- torch.nn.init.normal_(tensor, mean=0.0, std=1.0, generator=None)[源代码]¶
用从正态分布中抽取的值填充输入张量。
.
- Parameters
- Return type
示例
>>> w = torch.empty(3, 5) >>> nn.init.normal_(w)
- torch.nn.init.constant_(tensor, val)[源码]¶
用值 填充输入张量。
示例
>>> w = torch.empty(3, 5) >>> nn.init.constant_(w, 0.3)
- torch.nn.init.zeros_(tensor)[源代码]¶
将输入张量填充为标量值 0。
示例
>>> w = torch.empty(3, 5) >>> nn.init.zeros_(w)
- torch.nn.init.eye_(tensor)[源代码]¶
用单位矩阵填充二维输入张量。
保留线性层中输入的标识,尽可能多地保留输入。
- Parameters
张量 – 一个二维的 torch.Tensor
示例
>>> w = torch.empty(3, 5) >>> nn.init.eye_(w)
- torch.nn.init.dirac_(tensor, groups=1)[源代码]¶
填充{3, 4, 5}维输入张量为狄拉克δ函数。
在卷积层中保留输入的特征,尽可能多地保留输入通道。在groups>1的情况下,每个通道组保留其特征。
- Parameters
张量 – 一个 {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)[源代码]¶
使用Xavier均匀分布填充输入的张量。
该方法在《理解训练深度前馈神经网络的困难》(Glorot, X. & Bengio, Y. (2010))中有描述。生成的张量将包含从中采样的值,其中
也称为Glorot初始化。
- Parameters
- Return type
示例
>>> 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初始化。
- Parameters
- Return type
示例
>>> 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初始化。
- Parameters
示例
>>> 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. 等,2015)中有所描述。生成的张量将包含从中采样的值,其中
也称为He初始化。
- Parameters
示例
>>> 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)[源代码]¶
用从截断正态分布中抽取的值填充输入张量。
这些值实际上是从正态分布 中抽取的,超出 范围的值会被重新抽取,直到它们在边界内。用于生成随机值的方法在 时效果最佳。
- Parameters
- Return type
示例
>>> w = torch.empty(3, 5) >>> nn.init.trunc_normal_(w)
- torch.nn.init.orthogonal_(tensor, gain=1, generator=None)[源代码]¶
用一个(半)正交矩阵填充输入的 Tensor。
描述于 深度线性神经网络中学习的非线性动力学的精确解 - Saxe, A. 等 (2013)。输入张量必须至少有 2 个维度,对于超过 2 个维度的张量,尾随维度将被展平。
示例
>>> w = torch.empty(3, 5) >>> nn.init.orthogonal_(w)