speechbrain.nnet.quaternion_networks.q_ops 模块
这个库实现了四元数值架构所需的各种操作。这项工作的灵感来自:\n“Quaternion neural networks” - Parcollet T.\n“Quaternion recurrent neural networks” - Parcollet T. et al.\n“Quaternion convolutional neural networks for end-to-end automatic speech recognition” - Parcollet T. et al.\n“Deep quaternion networks” - Gaudet Chase J. et al.
- 作者
Titouan Parcollet 2020
摘要
类
此类重新定义了四元数线性层(非旋量层)的反向传播。 |
函数
将给定的权重初始化函数应用于参数。 |
|
将给定的权重初始化函数应用于参数。 |
|
检查线性层的四元数值形状。 |
|
将四元数卷积变换应用于输入数据:重要的是要注意,QCNN 的前向阶段定义为 W * Inputs(其中 * 等于汉密尔顿乘积)。 |
|
将四元数旋转变换应用于输入数据:旋转 W*x*W^t 可以通过 R*x 替换,遵循:https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation 对酉权重和非酉权重都有效(它们将被归一化)。 |
|
返回使用“Quaternion Recurrent Neural Network” - Parcollet T. 中描述的方法初始化的四元数矩阵。 |
|
将四元数线性变换应用于输入数据:重要的是要注意,QNN 的前向阶段定义为 W * Inputs(其中 * 等于汉密尔顿乘积)。 |
|
将四元数旋转变换应用于输入数据:旋转 W*x*W^t 可以通过 R*x 替换,遵循:https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation 对酉权重和非酉权重都有效(它们将被归一化)。 |
|
重新规范化四元数值权重的幅值。 |
|
返回酉四元数矩阵。 |
参考
- 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 * Inputs(其中 * 等于汉密尔顿乘积)。构建的 cat_kernels_4_quaternion 是四元数表示的修改版本,因此当我们执行 torch.mm(Input,W) 时,它等效于 W * Inputs。
- 参数:
ctx (PyTorch 上下文对象) – 用于保存执行反向传播所需的上下文。
input (torch.Tensor) – 要转换的四元数输入张量。形状:[batch*time, X]。
r_weight (torch.Parameter) – 本层四元数权重矩阵的实部。
i_weight (torch.Parameter) – 本层四元数权重矩阵的第一个虚部。
j_weight (torch.Parameter) – 本层四元数权重矩阵的第二个虚部。
k_weight (torch.Parameter) – 本层四元数权重矩阵的第三个虚部。
bias (torch.Parameter)
- 返回类型:
线性变换后的四元数
- speechbrain.nnet.quaternion_networks.q_ops.quaternion_linear_op(input, r_weight, i_weight, j_weight, k_weight, bias)[source]
将四元数线性变换应用于输入数据:重要的是要注意,QNN 的前向阶段定义为 W * Inputs(其中 * 等于汉密尔顿乘积)。构建的 cat_kernels_4_quaternion 是四元数表示的修改版本,因此当我们执行 torch.mm(Input,W) 时,它等效于 W * Inputs。
- 参数:
input (torch.Tensor) – 要转换的四元数输入张量。
r_weight (torch.Parameter) – 本层四元数权重矩阵的实部。
i_weight (torch.Parameter) – 本层四元数权重矩阵的第一个虚部。
j_weight (torch.Parameter) – 本层四元数权重矩阵的第二个虚部。
k_weight (torch.Parameter) – 本层四元数权重矩阵的第三个虚部。
bias (torch.Parameter)
- 返回类型:
线性变换后的四元数
- 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 的倍数,且实部为零。旋转仅影响四元数的向量部分。
- 参数:
input (torch.Tensor) – 要转换的四元数输入张量。
r_weight (torch.Parameter) – 本层四元数权重矩阵的实部。
i_weight (torch.Parameter) – 本层四元数权重矩阵的第一个虚部。
j_weight (torch.Parameter) – 本层四元数权重矩阵的第二个虚部。
k_weight (torch.Parameter) – 本层四元数权重矩阵的第三个虚部。
bias (torch.Parameter)
scale (torch.Parameter) – 在旋量神经网络的上下文中,对输入向量 x 执行多次旋转并求和。因此,输出向量的范数始终随着层数的增加而增加,这使得深度配置的神经网络不稳定。scale 参数是可学习的参数,通过将输出向量乘以一个小的可训练参数来充当门控。
zero_kernel (torch.Parameter) – 零核只是一个要求梯度为 False 的零张量。其形状等效于四元数分量形状。实际上,它只在使用旋转矩阵时需要匹配维度:https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation
- 返回类型:
线性旋转后的四元数
- 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 的倍数,且实部为零。旋转仅影响四元数的向量部分。
- 参数:
input (torch.Tensor) – 要转换的四元数输入张量。
r_weight (torch.Parameter) – 本层四元数权重矩阵的实部。
i_weight (torch.Parameter) – 本层四元数权重矩阵的第一个虚部。
j_weight (torch.Parameter) – 本层四元数权重矩阵的第二个虚部。
k_weight (torch.Parameter) – 本层四元数权重矩阵的第三个虚部。
bias (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) – 如果为 True,将应用一维卷积操作。否则,调用二维卷积。
- 返回类型:
旋转后的四元数输入
- 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 * Inputs(其中 * 等于汉密尔顿乘积)。构建的 cat_kernels_4_quaternion 是四元数表示的修改版本,因此当我们执行 torch.mm(Input,W) 时,它等效于 W * Inputs。
- 参数:
input (torch.Tensor) – 要转换的四元数输入张量。
r_weight (torch.Parameter) – 本层四元数权重矩阵的实部。
i_weight (torch.Parameter) – 本层四元数权重矩阵的第一个虚部。
j_weight (torch.Parameter) – 本层四元数权重矩阵的第二个虚部。
k_weight (torch.Parameter) – 本层四元数权重矩阵的第三个虚部。
bias (torch.Parameter)
stride (int) – 卷积滤波器的步长因子。
padding (int) – 填充量。更多信息请参阅 torch.nn 文档。
groups (int) – 此选项指定卷积组。更多信息请参阅 torch.nn 文档。
dilation (int) – 卷积滤波器的膨胀因子。
conv1d (bool) – 如果为 True,将应用一维卷积操作。否则,调用二维卷积。
- 返回类型:
卷积后的四元数输入
- speechbrain.nnet.quaternion_networks.q_ops.quaternion_init(in_features, out_features, kernel_size=None, criterion='glorot')[source]
返回使用“Quaternion Recurrent Neural Network” - Parcollet T. 中描述的方法初始化的四元数矩阵。
- speechbrain.nnet.quaternion_networks.q_ops.unitary_init(in_features, out_features, kernel_size=None, criterion='he')[source]
返回酉四元数矩阵。
- speechbrain.nnet.quaternion_networks.q_ops.affect_init(r_weight, i_weight, j_weight, k_weight, init_func, init_criterion)[source]
将给定的权重初始化函数应用于参数。
- 参数:
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]
将给定的权重初始化函数应用于参数。这是专门为卷积层编写的。
- 参数:
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)