speechbrain.nnet.quaternion_networks.q_ops 模块

该库实现了四元数值架构所需的不同操作。 这项工作受到以下启发: “四元数神经网络” - Parcollet T. “四元数循环神经网络” - Parcollet T. 等人 “用于端到端自动语音识别的四元数卷积神经网络” - Parcollet T. 等人 “深度四元数网络” - Gaudet Chase J. 等人

Authors
  • Titouan Parcollet 2020

摘要

类:

QuaternionLinearCustomBackward

这个类重新定义了四元数线性层(不是旋量层)的反向传播。

函数:

affect_conv_init

应用给定的权重初始化函数到参数上。

affect_init

应用给定的权重初始化函数到参数上。

check_quaternion_input

检查线性层的四元数值形状。

quaternion_conv_op

对输入数据应用四元数卷积变换:需要注意的是,QCNN的前向阶段定义为 W * 输入(其中 * 等于哈密尔顿积)。

quaternion_conv_rotation_op

对输入数据应用四元数旋转变换:旋转 W*x*W^t 可以替换为 R*x,详见:https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation 适用于单位和非单位权重(它们将被归一化)。

quaternion_init

返回一个四元数矩阵,该矩阵使用“四元数循环神经网络”中描述的方法进行初始化 - Parcollet T.

quaternion_linear_op

对输入数据应用四元数线性变换:需要注意的是,QNN的前向阶段定义为 W * 输入(其中 * 等于哈密尔顿积)。

quaternion_linear_rotation_op

对输入数据应用四元数旋转变换:旋转 W*x*W^t 可以替换为 R*x,参考:https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation 适用于单位和非单位权重(它们将被归一化)。

renorm_quaternion_weights_inplace

重新归一化四元数值权重的幅度。

unitary_init

返回一个单位四元数矩阵。

参考

class speechbrain.nnet.quaternion_networks.q_ops.QuaternionLinearCustomBackward(*args, **kwargs)[source]

基础:Function

这个类重新定义了一个四元数线性层(不是旋量层)的反向传播。通过这样做,我们可以节省多达4倍的内存,但它也比‘quaternion_linear_op’慢2倍。它应该在speechbrain.nnet.quaternion_networks.linear.QuaternionLinear中使用。

static forward(ctx, input, r_weight, i_weight, j_weight, k_weight, bias)[source]

对输入数据应用四元数线性变换: 需要注意的是,QNN的前向阶段定义为 W * 输入(其中 * 等于哈密顿积)。构造的 cat_kernels_4_quaternion 是四元数表示的修改版本, 因此当我们执行 torch.mm(输入,W) 时,它等同于 W * 输入。

Parameters:
  • ctx (PyTorch 上下文对象) – 用于保存执行反向传播所需的上下文。

  • input (torch.Tensor) – 要转换的四元数输入张量。形状:[batch*time, X]。

  • r_weight (torch.Parameter) – 该层四元数权重矩阵的实部。

  • i_weight (torch.Parameter) – 该层四元数权重矩阵的第一个虚部。

  • j_weight (torch.Parameter) – 该层四元数权重矩阵的第二虚部。

  • k_weight (torch.Parameter) – 该层四元数权重矩阵的第三个虚部。

  • 偏差 (torch.Parameter)

Return type:

线性变换的四元数

static backward(ctx, grad_output)[source]

运行上述定义的前向调用的反向阶段。此实现遵循四元数层的四元数反向传播,可以在“四元数神经网络” - Parcollet T. 第48页中找到。

Parameters:
  • ctx (Pytorch 上下文对象) – 包含保存的权重和偏置

  • grad_output (torch.Tensor) – 前向部分的输出

Return type:

此操作的相应梯度

speechbrain.nnet.quaternion_networks.q_ops.quaternion_linear_op(input, r_weight, i_weight, j_weight, k_weight, bias)[source]

对输入数据应用四元数线性变换: 需要注意的是,QNN的前向阶段定义为 W * 输入(其中 * 等于哈密顿积)。构造的 cat_kernels_4_quaternion 是四元数表示的修改版本, 因此当我们执行 torch.mm(输入,W) 时,它等同于 W * 输入。

Parameters:
  • input (torch.Tensor) – 要转换的四元数输入张量。

  • r_weight (torch.Parameter) – 该层四元数权重矩阵的实部。

  • i_weight (torch.Parameter) – 该层四元数权重矩阵的第一个虚部。

  • j_weight (torch.Parameter) – 该层四元数权重矩阵的第二虚部。

  • k_weight (torch.Parameter) – 该层四元数权重矩阵的第三个虚部。

  • 偏差 (torch.Parameter)

Return type:

线性变换的四元数

speechbrain.nnet.quaternion_networks.q_ops.quaternion_linear_rotation_op(input, r_weight, i_weight, j_weight, k_weight, bias, scale, zero_kernel)[source]

对输入数据应用四元数旋转变换: 旋转 W*x*W^t 可以替换为 R*x,如下所示: https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation 适用于单位和非单位权重(它们将被归一化)。 输入的初始大小必须是4的倍数,且实部为零。旋转仅影响四元数的向量部分。

Parameters:
  • input (torch.Tensor) – 要转换的四元数输入张量。

  • r_weight (torch.Parameter) – 该层四元数权重矩阵的实部。

  • i_weight (torch.Parameter) – 该层四元数权重矩阵的第一个虚部。

  • j_weight (torch.Parameter) – 该层四元数权重矩阵的第二虚部。

  • k_weight (torch.Parameter) – 该层四元数权重矩阵的第三个虚部。

  • 偏差 (torch.Parameter)

  • scale (torch.Parameter) – 在旋量神经网络的上下文中,对输入向量x进行多次旋转并求和。因此,输出向量的范数总是随着层数的增加而增加,使得神经网络在深层配置下变得不稳定。scale参数是可学习的参数,通过将输出向量乘以一个小的可训练参数来充当门的作用。

  • zero_kernel (torch.Parameter) – 零核只是一个梯度要求为False的零张量。 它的形状等同于四元数组件的形状。实际上, 它仅在需要使用旋转矩阵时使维度匹配: https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation

Return type:

线性旋转的四元数

speechbrain.nnet.quaternion_networks.q_ops.quaternion_conv_rotation_op(input, r_weight, i_weight, j_weight, k_weight, bias, scale, zero_kernel, stride: int, padding: int, groups: int, dilation: int, conv1d: bool)[source]

对输入数据应用四元数旋转变换: 旋转 W*x*W^t 可以替换为 R*x,如下所示: https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation 适用于单位和非单位权重(它们将被归一化)。 输入的初始大小必须是4的倍数,且实部为零。旋转仅影响四元数的向量部分。

Parameters:
  • input (torch.Tensor) – 要转换的四元数输入张量。

  • r_weight (torch.Parameter) – 该层四元数权重矩阵的实部。

  • i_weight (torch.Parameter) – 该层四元数权重矩阵的第一个虚部。

  • j_weight (torch.Parameter) – 该层四元数权重矩阵的第二虚部。

  • k_weight (torch.Parameter) – 该层四元数权重矩阵的第三个虚部。

  • 偏差 (torch.Parameter)

  • scale (torch.Parameter) – 在旋量神经网络的上下文中,对输入向量x进行多次旋转并求和。因此,输出向量的范数总是随着层数的增加而增加,使得神经网络在深层配置下变得不稳定。scale参数是可学习的参数,它们通过将输出向量与一个小的可训练参数相乘来充当门的作用。

  • zero_kernel (torch.Parameter) – 零核只是一个梯度要求为False的零张量。 它的形状等同于四元数组件的形状。实际上, 它仅在需要使用旋转矩阵时使维度匹配: https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation

  • stride (int) – 卷积滤波器的步长因子。

  • padding (int) – 填充量。有关更多信息,请参阅 torch.nn 文档。

  • groups (int) – 此选项指定卷积组。有关更多信息,请参阅 torch.nn 文档。

  • dilation (int) – 卷积滤波器的扩张因子。

  • conv1d (bool) – 如果为真,将应用一维卷积操作。否则,将调用二维卷积。

Return type:

旋转的四元数输入

speechbrain.nnet.quaternion_networks.q_ops.quaternion_conv_op(input, r_weight, i_weight, j_weight, k_weight, bias, stride: int, padding: int, groups: int, dilation: int, conv1d: bool)[source]

对输入数据应用四元数卷积变换: 需要注意的是,QCNN的前向阶段定义为 W * 输入(其中 * 等于哈密尔顿积)。构建的 cat_kernels_4_quaternion 是四元数表示的修改版本, 因此当我们执行 torch.mm(输入,W) 时,它等同于 W * 输入。

Parameters:
  • input (torch.Tensor) – 要转换的四元数输入张量。

  • r_weight (torch.Parameter) – 该层四元数权重矩阵的实部。

  • i_weight (torch.Parameter) – 该层四元数权重矩阵的第一个虚部。

  • j_weight (torch.Parameter) – 该层四元数权重矩阵的第二虚部。

  • k_weight (torch.Parameter) – 该层四元数权重矩阵的第三个虚部。

  • 偏差 (torch.Parameter)

  • stride (int) – 卷积滤波器的步长因子。

  • padding (int) – 填充量。有关更多信息,请参阅 torch.nn 文档。

  • groups (int) – 此选项指定卷积组。有关更多信息,请参阅 torch.nn 文档。

  • dilation (int) – 卷积滤波器的扩张因子。

  • conv1d (bool) – 如果为真,将应用一维卷积操作。否则,将调用二维卷积。

Return type:

卷积四元数输入

speechbrain.nnet.quaternion_networks.q_ops.quaternion_init(in_features, out_features, kernel_size=None, criterion='glorot')[source]

返回一个用“四元数循环神经网络”中描述的方法初始化的四元数矩阵 - Parcollet T.

Parameters:
  • in_features (int) – 输入层的实数值数量(四元数 // 4)。

  • out_features (int) – 输出层的实值数量(四元数 // 4)。

  • kernel_size (int) – 卷积层的核大小(例如:(3,3))。

  • criterion (str) – (glorot, he)

Return type:

初始化的四元数矩阵

speechbrain.nnet.quaternion_networks.q_ops.unitary_init(in_features, out_features, kernel_size=None, criterion='he')[source]

返回一个单位四元数矩阵。

Parameters:
  • in_features (int) – 输入层的实数值数量(四元数 // 4)。

  • out_features (int) – 输出层的实值数量(四元数 // 4)。

  • kernel_size (int) – 卷积层的核大小(例如:(3,3))。

  • criterion (str) – (glorot, he)

Return type:

单位四元数矩阵。

speechbrain.nnet.quaternion_networks.q_ops.affect_init(r_weight, i_weight, j_weight, k_weight, init_func, init_criterion)[source]

将给定的权重初始化函数应用于参数。

Parameters:
  • r_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • i_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • j_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • k_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • init_func (function) – (unitary_init, quaternion_init)

  • init_criterion (str) – (glorot, he)

speechbrain.nnet.quaternion_networks.q_ops.affect_conv_init(r_weight, i_weight, j_weight, k_weight, kernel_size, init_func, init_criterion)[source]

将给定的权重初始化函数应用于参数。 这是专门为卷积层编写的。

Parameters:
  • r_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • i_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • j_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • k_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • kernel_size (int) – 核大小。

  • init_func (function) – (unitary_init, quaternion_init)

  • init_criterion (str) – (glorot, he)

speechbrain.nnet.quaternion_networks.q_ops.check_quaternion_input(input_shape)[source]

检查线性层的四元数值形状。

Parameters:

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

speechbrain.nnet.quaternion_networks.q_ops.renorm_quaternion_weights_inplace(r_weight, i_weight, j_weight, k_weight, max_norm)[source]

重新归一化四元数值权重的幅度。

Parameters:
  • r_weight (torch.Parameter)

  • i_weight (torch.Parameter)

  • j_weight (torch.Parameter)

  • k_weight (torch.Parameter)

  • max_norm (float) – 四元数权重大小的最大范数