speechbrain.nnet.normalization 模块

实现归一化的库。

作者
  • Mirco Ravanelli 2020

  • Guillermo Cámbara 2021

  • Sarthak Yadav 2022

摘要

BatchNorm1d

对输入张量应用一维批量归一化。

BatchNorm2d

对输入张量应用二维批量归一化。

ExponentialMovingAverage

应用可学习的指数移动平均,这是可学习 PCEN 层所需的

GroupNorm

对输入张量应用组归一化。

InstanceNorm1d

对输入张量应用一维实例归一化。

InstanceNorm2d

对输入张量应用二维实例归一化。

LayerNorm

对输入张量应用层归一化。

PCEN

此类实现了可学习的每通道能量归一化 (PCEN) 层,支持 [1] 中指定的原始 PCEN 以及 [2] 中指定的 sPCEN

参考

class speechbrain.nnet.normalization.BatchNorm1d(input_shape=None, input_size=None, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True, combine_batch_time=False, skip_transpose=False)[source]

基类: Module

对输入张量应用一维批量归一化。

参数:
  • input_shape (tuple) – 输入的预期形状。或者,使用 input_size

  • input_size (int) – 输入的预期大小。或者,使用 input_shape

  • eps (float) – 添加到标准差估计中的值,以提高数值稳定性。

  • momentum (float) – 用于 running_mean 和 running_var 计算的值。

  • affine (bool) – 设置为 True 时,将学习仿射参数。

  • track_running_stats (bool) – 设置为 True 时,此模块会跟踪运行均值和方差;设置为 False 时,则不跟踪此类统计信息。

  • combine_batch_time (bool) – 为 True 时,它会合并批量和时间轴。

  • skip_transpose (bool) – 是否跳过转置。

示例

>>> input = torch.randn(100, 10)
>>> norm = BatchNorm1d(input_shape=input.shape)
>>> output = norm(input)
>>> output.shape
torch.Size([100, 10])
forward(x)[source]

返回归一化的输入张量。

参数:

x (torch.Tensor (batch, time, [channels])) – 需要归一化的输入。预期输入为 2D 或 3D 张量;当 combine_dims=True 时,可以使用 4D 张量。

返回:

x_n – 归一化的输出。

返回类型:

torch.Tensor

class speechbrain.nnet.normalization.BatchNorm2d(input_shape=None, input_size=None, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)[source]

基类: Module

对输入张量应用二维批量归一化。

参数:
  • input_shape (tuple) – 输入的预期形状。或者,使用 input_size

  • input_size (int) – 输入的预期大小。或者,使用 input_shape

  • eps (float) – 添加到标准差估计中的值,以提高数值稳定性。

  • momentum (float) – 用于 running_mean 和 running_var 计算的值。

  • affine (bool) – 设置为 True 时,将学习仿射参数。

  • track_running_stats (bool) – 设置为 True 时,此模块会跟踪运行均值和方差;设置为 False 时,则不跟踪此类统计信息。

示例

>>> input = torch.randn(100, 10, 5, 20)
>>> norm = BatchNorm2d(input_shape=input.shape)
>>> output = norm(input)
>>> output.shape
torch.Size([100, 10, 5, 20])
forward(x)[source]

返回归一化的输入张量。

参数:

x (torch.Tensor (batch, time, channel1, channel2)) – 需要归一化的输入。预期为 4D 张量。

返回:

x_n – 归一化的输出。

返回类型:

torch.Tensor

class speechbrain.nnet.normalization.LayerNorm(input_size=None, input_shape=None, eps=1e-05, elementwise_affine=True)[source]

基类: Module

对输入张量应用层归一化。

参数:
  • input_size (int) – 需要归一化的维度的预期大小。

  • input_shape (tuple) – 输入的预期形状。

  • eps (float) – 添加到标准差估计中的值,以提高数值稳定性。

  • elementwise_affine (bool) – 如果为 True,此模块具有可学习的逐元素仿射参数,初始化为 1(权重)和 0(偏置)。

示例

>>> input = torch.randn(100, 101, 128)
>>> norm = LayerNorm(input_shape=input.shape)
>>> output = norm(input)
>>> output.shape
torch.Size([100, 101, 128])
forward(x)[source]

返回归一化的输入张量。

参数:

x (torch.Tensor (batch, time, channels)) – 需要归一化的输入。预期为 3D 或 4D 张量。

返回类型:

归一化的输出。

class speechbrain.nnet.normalization.InstanceNorm1d(input_shape=None, input_size=None, eps=1e-05, momentum=0.1, track_running_stats=True, affine=False)[source]

基类: Module

对输入张量应用一维实例归一化。

参数:
  • input_shape (tuple) – 输入的预期形状。或者,使用 input_size

  • input_size (int) – 输入的预期大小。或者,使用 input_shape

  • eps (float) – 添加到标准差估计中的值,以提高数值稳定性。

  • momentum (float) – 用于 running_mean 和 running_var 计算的值。

  • track_running_stats (bool) – 设置为 True 时,此模块会跟踪运行均值和方差;设置为 False 时,则不跟踪此类统计信息。

  • affine (bool) – 一个布尔值,设置为 True 时,此模块具有可学习的仿射参数,初始化方式与批量归一化相同。默认为 False。

示例

>>> input = torch.randn(100, 10, 20)
>>> norm = InstanceNorm1d(input_shape=input.shape)
>>> output = norm(input)
>>> output.shape
torch.Size([100, 10, 20])
forward(x)[source]

返回归一化的输入张量。

参数:

x (torch.Tensor (batch, time, channels)) – 需要归一化的输入。预期为 3D 张量。

返回:

x_n – 归一化的输出。

返回类型:

torch.Tensor

class speechbrain.nnet.normalization.InstanceNorm2d(input_shape=None, input_size=None, eps=1e-05, momentum=0.1, track_running_stats=True, affine=False)[source]

基类: Module

对输入张量应用二维实例归一化。

参数:
  • input_shape (tuple) – 输入的预期形状。或者,使用 input_size

  • input_size (int) – 输入的预期大小。或者,使用 input_shape

  • eps (float) – 添加到标准差估计中的值,以提高数值稳定性。

  • momentum (float) – 用于 running_mean 和 running_var 计算的值。

  • track_running_stats (bool) – 设置为 True 时,此模块会跟踪运行均值和方差;设置为 False 时,则不跟踪此类统计信息。

  • affine (bool) – 一个布尔值,设置为 True 时,此模块具有可学习的仿射参数,初始化方式与批量归一化相同。默认为 False。

示例

>>> input = torch.randn(100, 10, 20, 2)
>>> norm = InstanceNorm2d(input_shape=input.shape)
>>> output = norm(input)
>>> output.shape
torch.Size([100, 10, 20, 2])
forward(x)[source]

返回归一化的输入张量。

参数:

x (torch.Tensor (batch, time, channel1, channel2)) – 需要归一化的输入。预期为 4D 张量。

返回:

x_n – 归一化的输出。

返回类型:

torch.Tensor

class speechbrain.nnet.normalization.GroupNorm(input_shape=None, input_size=None, num_groups=None, eps=1e-05, affine=True)[source]

基类: Module

对输入张量应用组归一化。

参数:
  • input_shape (tuple) – 输入的预期形状。或者,使用 input_size

  • input_size (int) – 输入的预期大小。或者,使用 input_shape

  • num_groups (int) – 将通道分组的数量。

  • eps (float) – 添加到标准差估计中的值,以提高数值稳定性。

  • affine (bool) – 一个布尔值,设置为 True 时,此模块具有可学习的逐通道仿射参数,初始化为 1(权重)和 0(偏置)。

示例

>>> input = torch.randn(100, 101, 128)
>>> norm = GroupNorm(input_size=128, num_groups=128)
>>> output = norm(input)
>>> output.shape
torch.Size([100, 101, 128])
forward(x)[source]

返回归一化的输入张量。

参数:

x (torch.Tensor (batch, time, channels)) – 需要归一化的输入。预期为 3D 或 4D 张量。

返回:

x_n – 归一化的输出。

返回类型:

torch.Tensor

class speechbrain.nnet.normalization.ExponentialMovingAverage(input_size: int, coeff_init: float = 0.04, per_channel: bool = False, trainable: bool = True, skip_transpose: bool = False)[source]

基类: Module

应用可学习的指数移动平均,这是可学习 PCEN 层所需的

参数:
  • input_size (int) – 输入的预期大小。

  • coeff_init (float) – 初始平滑系数的值

  • per_channel (bool) – 控制是否为每个输入通道独立学习平滑系数

  • trainable (bool) – 是否学习 PCEN 参数或使用固定参数

  • skip_transpose (bool) – 如果为 False,使用 speechbrain 的 batch x time x channel 惯例。如果为 True,使用 batch x channel x time 惯例。

示例

>>> inp_tensor = torch.rand([10, 50, 40])
>>> pcen = ExponentialMovingAverage(40)
>>> out_tensor = pcen(inp_tensor)
>>> out_tensor.shape
torch.Size([10, 50, 40])
forward(x)[source]

返回归一化的输入张量。

参数
xtorch.Tensor (batch, time, channels)

需要归一化的输入。

class speechbrain.nnet.normalization.PCEN(input_size, alpha: float = 0.96, smooth_coef: float = 0.04, delta: float = 2.0, root: float = 2.0, floor: float = 1e-12, trainable: bool = True, per_channel_smooth_coef: bool = True, skip_transpose: bool = False)[source]

基类: Module

此类实现了可学习的每通道能量归一化 (PCEN) 层,支持 [1] 中指定的原始 PCEN 以及 [2] 中指定的 sPCEN

[1] Yuxuan Wang, Pascal Getreuer, Thad Hughes, Richard F. Lyon, Rif A. Saurous, “Trainable Frontend For Robust and Far-Field Keyword Spotting”, in Proc of ICASSP 2017 (https://arxiv.org/abs/1607.05666)

[2] Neil Zeghidour, Olivier Teboul, F{‘e}lix de Chaumont Quitry & Marco Tagliasacchi, “LEAF: A LEARNABLE FRONTEND FOR AUDIO CLASSIFICATION”, in Proc of ICLR 2021 (https://arxiv.org/abs/2101.08596)

默认参数值与 [2] 中使用的对应。

参数:
  • input_size (int) – 输入的预期大小。

  • alpha (float) – 指定 PCEN 的 alpha 系数

  • smooth_coef (float) – 指定 PCEN 的平滑系数

  • delta (float) – 指定 PCEN 的 delta 系数

  • root (float) – 指定 PCEN 的 root 系数

  • floor (float) – 指定 PCEN 的 floor 系数

  • trainable (bool) – 是否学习 PCEN 参数或使用固定参数

  • per_channel_smooth_coef (bool) – 是否为每个通道独立学习平滑系数。为 True 时,实质上使用 [2] 中的 sPCEN

  • skip_transpose (bool) – 如果为 False,使用 speechbrain 的 batch x time x channel 惯例。如果为 True,使用 batch x channel x time 惯例。

示例

>>> inp_tensor = torch.rand([10, 50, 40])
>>> pcen = PCEN(40, alpha=0.96)         # sPCEN
>>> out_tensor = pcen(inp_tensor)
>>> out_tensor.shape
torch.Size([10, 50, 40])
forward(x)[source]

返回归一化的输入张量。

参数:

x (torch.Tensor (batch, time, channels)) – 需要归一化的输入。

返回:

output – 归一化的输出。

返回类型:

torch.Tensor