快捷方式

torch.nn.init

警告

此模块中的所有函数都旨在用于初始化神经网络参数,因此它们都在 torch.no_grad() 模式下运行,并且不会被自动梯度计算考虑在内。

torch.nn.init.calculate_gain(nonlinearity, param=None)[source]

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

值如下

非线性

增益

线性/恒等

11

Conv{1,2,3}D

11

Sigmoid

11

Tanh

53\frac{5}{3}

ReLU

2\sqrt{2}

Leaky Relu

21+负斜率2\sqrt{\frac{2}{1 + \text{负斜率}^2}}

SELU

34\frac{3}{4}

警告

为了实现 自归一化神经网络 ,您应该使用 nonlinearity='linear' 代替 nonlinearity='selu'。这会给初始权重一个 1 / N 的方差,这是在正向传播中诱导稳定不动点的必要条件。相比之下,SELU 的默认增益牺牲了归一化效果,以获得矩形层中更稳定的梯度流。

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

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

示例

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

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

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

参数
  • 张量张量)– n 维 torch.Tensor

  • afloat)– 均匀分布的下限

  • bfloat)– 均匀分布的上限

  • 生成器可选[生成器])– 用于采样的 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]

用正态分布绘制的值填充输入张量。

N(mean,std2)\mathcal{N}(\text{mean}, \text{std}^2).

参数
  • 张量张量)– n 维 torch.Tensor

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

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

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

返回类型

张量

示例

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

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

参数
  • 张量张量)– n 维 torch.Tensor

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

返回类型

张量

示例

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

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

参数

张量张量)– n 维 torch.Tensor

返回类型

张量

示例

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

使用标量值 0 填充输入张量。

参数

张量张量)– n 维 torch.Tensor

返回类型

张量

示例

>>> w = torch.empty(3, 5)
>>> nn.init.zeros_(w)
torch.nn.init.eye_(tensor)[source]

使用单位矩阵填充 2 维输入 Tensor

Linear 层中保留输入的标识,尽可能多地保留输入。

参数

张量 – 一个 2 维 torch.Tensor

示例

>>> w = torch.empty(3, 5)
>>> nn.init.eye_(w)
torch.nn.init.dirac_(张量, =1)[源代码]

用狄拉克 delta 函数填充 {3、4、5} 维输入 张量

卷积 层中保留输入的标识,尽可能多地保留输入通道。如果组数 > 1,则每组通道都保留标识

参数
  • 张量 – 一个 {3、4、5} 维 torch.Tensor

  • (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_(张量, 增益=1.0, 生成器=)[源代码]

使用 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 初始化。

参数
  • 张量张量)– n 维 torch.Tensor

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

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

返回类型

张量

示例

>>> 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)[source]

使用 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 初始化。

参数
  • 张量张量)– n 维 torch.Tensor

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

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

返回类型

张量

示例

>>> 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)[source]

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

该方法在 深入整流器:超越 ImageNet 分类中的人类水平性能 - 何凯明等人(2015 年)中进行了描述。结果张量将具有从 U(bound,bound)\mathcal{U}(-\text{bound}, \text{bound}) 中采样的值,其中

界限=增益×3风扇模式\text{界限} = \text{增益} \times \sqrt{\frac{3}{\text{风扇模式}}}

也称为 He 初始化。

参数
  • 张量张量)– n 维 torch.Tensor

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

  • mode (str) – 'fan_in'(默认)或 'fan_out'。选择 'fan_in' 保留正向传递中权重方差的大小。选择 'fan_out' 保留反向传递中的大小。

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

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

示例

>>> 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)[source]

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

该方法在深入整流器:超越 ImageNet 分类的人类水平性能中进行了描述 - 何凯明等人(2015 年)。所得张量将从N(0,std2)\mathcal{N}(0, \text{std}^2)中进行采样,其中

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

也称为 He 初始化。

参数
  • 张量张量)– n 维 torch.Tensor

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

  • mode (str) – 'fan_in'(默认)或 'fan_out'。选择 'fan_in' 保留正向传递中权重方差的大小。选择 'fan_out' 保留反向传递中的大小。

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

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

示例

>>> 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)[source]

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

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

参数
  • 张量张量)– n 维 torch.Tensor

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

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

  • a (浮点数) – 最小截止值

  • b (浮点数) – 最大截止值

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

返回类型

张量

示例

>>> w = torch.empty(3, 5)
>>> nn.init.trunc_normal_(w)
torch.nn.init.orthogonal_(tensor, gain=1, generator=None)[源代码]

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

深度线性神经网络学习的非线性动力学的精确解中描述 - 萨克斯等人。(2013)。输入张量必须至少有 2 个维度,对于维度超过 2 的张量,尾随维度将被展平。

参数
  • tensor – 一个 n 维torch.Tensor,其中 n2n \geq 2

  • gain – 可选缩放因子

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

示例

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

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

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

参数
  • 张量 – 一个 n 维 torch.Tensor

  • 稀疏性 – 要设置为零的每一列中元素的分数

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

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

示例

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

文档

访问 PyTorch 的综合开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源