目录

torch.nn.init

警告

此模块中的所有函数都旨在用于初始化神经网络 参数,因此它们都在 Mode 中运行,不会被纳入 帐户。

torch.nn.init 的calculate_gain非线性param=None[来源]

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

值如下所示:

非线性

获得

线性 / 恒等

11

Conv{1,2,3}D

11

乙状结肠

11

53\frac{5}{3}

ReLU 系列

2\sqrt{2}

Leaky Relu

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

色鲁

34\frac{3}{4}

警告

为了实现自归一化神经网络 , 您应该使用 ,而不是 . 这为初始权重提供了 , 这对于在正向传递中诱导稳定的固定点是必要的。 相反,的默认增益牺牲了归一化 效果,以便在矩形层中实现更稳定的梯度流。nonlinearity='linear'nonlinearity='selu'1 / NSELU

参数
  • nonlinearity – 非线性函数 (nn.函数名称)

  • param – 非线性函数的可选参数

例子

>>> gain = nn.init.calculate_gain('leaky_relu', 0.2)  # leaky_relu with negative_slope=0.2
torch.nn.init 的uniform_张量a=0.0,b=1.0生成器=[来源]

使用从均匀分布中提取的值填充输入 Tensor。

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

参数
  • tensorTensor) – 一个 n 维火torch.Tensor

  • afloat) – 均匀分布的下限

  • bfloat) – 均匀分布的上限

  • generatorOptional[Generator]) – 要采样的Torch生成器 (默认:无)

返回类型

张肌

例子

>>> w = torch.empty(3, 5)
>>> nn.init.uniform_(w)
torch.nn.init 的normal_张量平均值=0.0标准=1.0生成器=[来源]

使用从正态分布中提取的值填充输入 Tensor。

N(意味 着,性病2)\mathcal{N}(\text{mean}, \text{std}^2).

参数
  • tensorTensor) – 一个 n 维火torch.Tensor

  • meanfloat) – 正态分布的平均值

  • stdfloat) – 正态分布的标准差

  • generatorOptional[Generator]) – 要采样的Torch生成器 (默认:无)

返回类型

张肌

例子

>>> w = torch.empty(3, 5)
>>> nn.init.normal_(w)
torch.nn.init 的constant_tensorval[来源]

用值填充输入 Tensor瓦尔\text{val}.

参数
  • tensorTensor) – 一个 n 维火torch.Tensor

  • valfloat) – 用于填充张量的值

返回类型

张肌

例子

>>> w = torch.empty(3, 5)
>>> nn.init.constant_(w, 0.3)
torch.nn.init 的ones_张量[来源]

用标量值 1 填充输入 Tensor。

参数

tensorTensor) – 一个 n 维火torch.Tensor

返回类型

张肌

例子

>>> w = torch.empty(3, 5)
>>> nn.init.ones_(w)
torch.nn.init 的zeros_张量[来源]

用标量值 0 填充输入 Tensor。

参数

tensorTensor) – 一个 n 维火torch.Tensor

返回类型

张肌

例子

>>> w = torch.empty(3, 5)
>>> nn.init.zeros_(w)
torch.nn.init 的eye_Tensor[来源]

用单位矩阵填充二维输入 Tensor

保留线性层中输入的标识,其中 尽可能保留许多输入。

参数

tensor – 一个 2 维火torch.Tensor

例子

>>> w = torch.empty(3, 5)
>>> nn.init.eye_(w)
torch.nn.init 的dirac_tensorgroups=1[来源]

用 Dirac delta 函数填充 {3, 4, 5} 维输入 Tensor

保留卷积层中 inputs 的标识,其中保留了尽可能多的 input 通道。倘 of groups>1,每组通道都保留身份

参数
  • tensor – 一个 {3, 4, 5} 维火torch.Tensor

  • groupsintoptional) – conv 层中的组数 (默认值: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_张量增益=1.0生成器=[来源]

使用 Xavier 均匀分布用值填充输入 Tensor

该方法在 了解训练的难度 中进行了描述 深度前馈神经网络 - Glorot, X. & Bengio, Y. (2010). 生成的张量将具有从U(一个,一个)\mathcal{U}(-a, a)哪里

一个=获得×6fan_in+fan_outa = \text{gain} \times \sqrt{\frac{6}{\text{fan\_in} + \text{fan\_out}}}

也称为 Glorot 初始化。

参数
  • tensorTensor) – 一个 n 维火torch.Tensor

  • gainfloat) – 可选的缩放因子

  • generatorOptional[Generator]) – 要采样的Torch生成器 (默认:无)

返回类型

张肌

例子

>>> w = torch.empty(3, 5)
>>> nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain('relu'))

注意

请注意,和 的计算假设为 权重矩阵以转置方式使用, (即,在图层中,其中 )。 这对于正确初始化非常重要。 如果您计划使用 , 其中 , 传入转置的权重矩阵,即 .fan_infan_outx @ w.TLinearw.shape = [fan_out, fan_in]x @ ww.shape = [fan_in, fan_out]nn.init.xavier_uniform_(w.T, ...)

torch.nn.init 的xavier_normal_张量增益=1.0生成器=[来源]

使用 Xavier 正态分布用值填充输入 Tensor

该方法在 了解训练深度前馈的难度 中进行了描述 神经网络 - Glorot, X. & Bengio, Y. (2010)。生成的张量 将具有从N(0,性病2)\mathcal{N}(0, \text{std}^2)哪里

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

也称为 Glorot 初始化。

参数
  • tensorTensor) – 一个 n 维火torch.Tensor

  • gainfloat) – 可选的缩放因子

  • generatorOptional[Generator]) – 要采样的Torch生成器 (默认:无)

返回类型

张肌

例子

>>> w = torch.empty(3, 5)
>>> nn.init.xavier_normal_(w)

注意

请注意,和 的计算假设为 权重矩阵以转置方式使用, (即,在图层中,其中 )。 这对于正确初始化非常重要。 如果您计划使用 , 其中 , 传入转置的权重矩阵,即 .fan_infan_outx @ w.TLinearw.shape = [fan_out, fan_in]x @ ww.shape = [fan_in, fan_out]nn.init.xavier_normal_(w.T, ...)

torch.nn.init 的kaiming_uniform_张量a=0mode='fan_in'非线性='leaky_relu'generator=None[来源]

使用 Kaiming 均匀分布用值填充输入 Tensor

该方法在 深入研究整流器:超越 中进行了描述 ImageNet 分类的人类水平性能 - He, K. et al. (2015)。 生成的张量将具有从U(绑定,绑定)\mathcal{U}(-\text{bound}, \text{bound})哪里

绑定=获得×3fan_mode\text{bound} = \text{gain} \times \sqrt{\frac{3}{\text{fan\_mode}}}

也称为 He 初始化。

参数
  • tensorTensor) – 一个 n 维火torch.Tensor

  • afloat) – 该层之后使用的整流器的负斜率 (仅 用于'leaky_relu')

  • modestr) – (默认) 或 .选择 将保留 向前传球。选择此项将保留 向后传递。'fan_in''fan_out''fan_in''fan_out'

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

  • generatorOptional[Generator]) – 要采样的Torch生成器 (默认:无)

例子

>>> w = torch.empty(3, 5)
>>> nn.init.kaiming_uniform_(w, mode='fan_in', nonlinearity='relu')

注意

请注意,和 的计算假设为 权重矩阵以转置方式使用, (即,在图层中,其中 )。 这对于正确初始化非常重要。 如果您计划使用 , 其中 , 传入转置的权重矩阵,即 .fan_infan_outx @ w.TLinearw.shape = [fan_out, fan_in]x @ ww.shape = [fan_in, fan_out]nn.init.kaiming_uniform_(w.T, ...)

torch.nn.init 的kaiming_normal_张量a=0mode ='fan_in'非线性='leaky_relu'generator=None[来源]

使用 Kaiming 正态分布用值填充输入 Tensor

该方法在 深入研究整流器:超越 中进行了描述 ImageNet 分类的人类水平性能 - He, K. et al. (2015)。 生成的张量将具有从N(0,性病2)\mathcal{N}(0, \text{std}^2)哪里

性病=获得fan_mode\text{std} = \frac{\text{gain}}{\sqrt{\text{fan\_mode}}}

也称为 He 初始化。

参数
  • tensorTensor) – 一个 n 维火torch.Tensor

  • afloat) – 该层之后使用的整流器的负斜率 (仅 用于'leaky_relu')

  • modestr) – (默认) 或 .选择 将保留 向前传球。选择此项将保留 向后传递。'fan_in''fan_out''fan_in''fan_out'

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

  • generatorOptional[Generator]) – 要采样的Torch生成器 (默认:无)

例子

>>> w = torch.empty(3, 5)
>>> nn.init.kaiming_normal_(w, mode='fan_out', nonlinearity='relu')

注意

请注意,和 的计算假设为 权重矩阵以转置方式使用, (即,在图层中,其中 )。 这对于正确初始化非常重要。 如果您计划使用 , 其中 , 传入转置的权重矩阵,即 .fan_infan_outx @ w.TLinearw.shape = [fan_out, fan_in]x @ ww.shape = [fan_in, fan_out]nn.init.kaiming_normal_(w.T, ...)

torch.nn.init 的trunc_normal_张量平均值=0.0标准差=1.0,a=-2.0,b=2.0生成器=[来源]

使用从截断的正态分布中提取的值填充输入 Tensor。

这些值实际上是从 正态分布N(意味 着,性病2)\mathcal{N}(\text{mean}, \text{std}^2)值在[一个,b][a, b]重新绘制,直到它们位于 边界。用于生成随机值的方法有效 最佳时间一个意味 着ba \leq \text{mean} \leq b.

参数
  • tensorTensor) – 一个 n 维火torch.Tensor

  • meanfloat) – 正态分布的平均值

  • stdfloat) – 正态分布的标准差

  • afloat) – 最小截止值

  • bfloat) – 最大截止值

  • generatorOptional[Generator]) – 要采样的Torch生成器 (默认:无)

返回类型

张肌

例子

>>> w = torch.empty(3, 5)
>>> nn.init.trunc_normal_(w)
torch.nn.init 的orthogonal_张量增益=1生成器=[来源]

用(半)正交矩阵填充输入 Tensor

Exact solutions to the nonlinear dynamics of learning in deep 中进行了描述 线性神经网络 - Saxe, A. et al. (2013)。输入张量必须具有 至少 2 个维度,对于维度超过 2 个的张量, 尾随维度被展平。

参数
  • tensor – 一个 n 维Torch。Tensor 的 Tensor 中,其中n2n \geq 2

  • gain – 可选缩放因子

  • generatorOptional[Generator]) – 要采样的Torch生成器 (默认:无)

例子

>>> w = torch.empty(3, 5)
>>> nn.init.orthogonal_(w)
torch.nn.init 的sparse_张量稀疏性std=0.01,generator=None[来源]

将 2D 输入 Tensor 填充为稀疏矩阵。

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

参数
  • tensor – 一个 n 维火torch.Tensor

  • sparsity – 每列中要设置为零的元素的比例

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

  • generatorOptional[Generator]) – 要采样的Torch生成器 (默认:无)

例子

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

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源