Shortcuts

torch.nn.init

警告

本模块中的所有函数都旨在用于初始化神经网络参数,因此它们都在torch.no_grad()模式下运行,并且不会被autograd记录。

torch.nn.init.calculate_gain(nonlinearity, param=None)[源代码]

返回给定非线性函数的推荐增益值。

这些值如下:

非线性

增益

线性 / 恒等

11

Conv{1,2,3}D

11

Sigmoid

11

双曲正切函数

53\frac{5}{3}

ReLU

2\sqrt{2}

泄露修正线性单元(Leaky Relu)

21+negative_slope2\sqrt{\frac{2}{1 + \text{negative\_slope}^2}}

SELU

34\frac{3}{4}

警告

为了实现自归一化神经网络, 你应该使用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)[源代码]

用从均匀分布中抽取的值填充输入张量。

U(a,b)\mathcal{U}(a, b).

Parameters
  • 张量 (张量) – 一个n维的torch.Tensor

  • a (float) – 均匀分布的下界

  • b (float) – 均匀分布的上界

  • 生成器 (可选[生成器]) – 用于采样的 torch 生成器(默认值:无)

Return type

张量

示例

>>> w = torch.empty(3, 5)
>>> nn.init.uniform_(w)
torch.nn.init.normal_(tensor, mean=0.0, std=1.0, generator=None)[源代码]

用从正态分布中抽取的值填充输入张量。

N(均值,标准差2)\mathcal{N}(\text{均值}, \text{标准差}^2).

Parameters
  • 张量 (张量) – 一个n维的torch.Tensor

  • 均值 (float) – 正态分布的均值

  • std (float) – 正态分布的标准差

  • 生成器 (可选[生成器]) – 用于采样的 torch 生成器(默认值:无)

Return type

张量

示例

>>> w = torch.empty(3, 5)
>>> nn.init.normal_(w)
torch.nn.init.constant_(tensor, val)[源码]

用值 val\text{val} 填充输入张量。

Parameters
  • 张量 (张量) – 一个n维的torch.Tensor

  • val (float) – 用于填充张量的值

Return type

张量

示例

>>> w = torch.empty(3, 5)
>>> nn.init.constant_(w, 0.3)
torch.nn.init.ones_(tensor)[源代码]

用标量值 1 填充输入张量。

Parameters

张量 (张量) – 一个n维的torch.Tensor

Return type

张量

示例

>>> w = torch.empty(3, 5)
>>> nn.init.ones_(w)
torch.nn.init.zeros_(tensor)[源代码]

将输入张量填充为标量值 0

Parameters

张量 (张量) – 一个n维的torch.Tensor

Return type

张量

示例

>>> 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

  • groupsint可选)– 卷积层中的组数(默认值: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))中有描述。生成的张量将包含从U(a,a)\mathcal{U}(-a, a)中采样的值,其中

a=gain×6fan_in+fan_outa = \text{gain} \times \sqrt{\frac{6}{\text{fan\_in} + \text{fan\_out}}}

也称为Glorot初始化。

Parameters
  • 张量 (张量) – 一个n维的torch.Tensor

  • 增益 (float) – 一个可选的缩放因子

  • 生成器 (可选[生成器]) – 用于采样的 torch 生成器(默认值:无)

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))中有所描述。生成的张量将具有从N(0,std2)\mathcal{N}(0, \text{std}^2)中采样的值,其中

std=gain×2fan_in+fan_out\text{std} = \text{gain} \times \sqrt{\frac{2}{\text{fan\_in} + \text{fan\_out}}}

也称为Glorot初始化。

Parameters
  • 张量 (张量) – 一个n维的torch.Tensor

  • 增益 (浮点数) – 一个可选的缩放因子

  • 生成器 (可选[生成器]) – 用于采样的 torch 生成器(默认值:无)

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) 中进行了描述。生成的张量的值将从 U(bound,bound)\mathcal{U}(-\text{bound}, \text{bound}) 中采样,其中

bound=gain×3fan_mode\text{bound} = \text{gain} \times \sqrt{\frac{3}{\text{fan\_mode}}}

也称为He初始化。

Parameters
  • 张量 (张量) – 一个n维的torch.Tensor

  • a (float) – 在此层之后使用的整流器的负斜率(仅在使用 'leaky_relu' 时使用)

  • 模式 (字符串) – 可以是 'fan_in'(默认)或 'fan_out'。选择 'fan_in' 保留前向传播中权重的方差大小。选择 'fan_out' 保留反向传播中的大小。

  • 非线性 (str) – 非线性函数(nn.functional 名称),建议仅与 'relu''leaky_relu'(默认)一起使用。

  • 生成器 (可选[生成器]) – 用于采样的 torch 生成器(默认值:无)

示例

>>> 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)中有所描述。生成的张量将包含从N(0,std2)\mathcal{N}(0, \text{std}^2)中采样的值,其中

std=gainfan_mode\text{std} = \frac{\text{gain}}{\sqrt{\text{fan\_mode}}}

也称为He初始化。

Parameters
  • 张量 (张量) – 一个n维的torch.Tensor

  • a (float) – 在此层之后使用的整流器的负斜率(仅在使用 'leaky_relu' 时使用)

  • 模式 (字符串) – 可以是 'fan_in'(默认)或 'fan_out'。选择 'fan_in' 保留前向传播中权重的方差大小。选择 'fan_out' 保留反向传播中的大小。

  • 非线性 (str) – 非线性函数(nn.functional 名称),建议仅与 'relu''leaky_relu'(默认)一起使用。

  • 生成器 (可选[生成器]) – 用于采样的 torch 生成器(默认值:无)

示例

>>> 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)[源代码]

用从截断正态分布中抽取的值填充输入张量。

这些值实际上是从正态分布 N(mean,std2)\mathcal{N}(\text{mean}, \text{std}^2) 中抽取的,超出 [a,b][a, b] 范围的值会被重新抽取,直到它们在边界内。用于生成随机值的方法在 ameanba \leq \text{mean} \leq b 时效果最佳。

Parameters
  • 张量 (张量) – 一个n维的torch.Tensor

  • 均值 (float) – 正态分布的均值

  • std (float) – 正态分布的标准差

  • a (float) – 最小截止值

  • b (float) – 最大截止值

  • 生成器 (可选[生成器]) – 用于采样的 torch 生成器(默认值:无)

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 个维度的张量,尾随维度将被展平。

Parameters
  • 张量 – 一个n维的torch.Tensor,其中n2n \geq 2

  • 增益 – 可选的缩放因子

  • 生成器 (可选[生成器]) – 用于采样的 torch 生成器(默认值:无)

示例

>>> w = torch.empty(3, 5)
>>> nn.init.orthogonal_(w)
torch.nn.init.sparse_(tensor, sparsity, std=0.01, generator=None)[源代码]

填充二维输入 张量 作为稀疏矩阵。

非零元素将从正态分布 N(0,0.01)\mathcal{N}(0, 0.01)中提取,如通过Hessian-free优化的深度学习 - Martens, J. (2010)中所述。

Parameters
  • 张量 – 一个n维的torch.Tensor

  • 稀疏性 – 每列中被设置为零的元素的比例

  • std – 用于生成非零值的正态分布的标准差

  • 生成器 (可选[生成器]) – 用于采样的 torch 生成器(默认值:无)

示例

>>> w = torch.empty(3, 5)
>>> nn.init.sparse_(w, sparsity=0.1)