speechbrain.nnet.quaternion_networks.q_linear 模块

实现四元数值线性变换的库。

Authors
  • Titouan Parcollet 2020

  • 德鲁·瓦格纳 2024

摘要

类:

QLinear

此函数实现了一个全连接的四元数值线性层:y = Wx + b。

参考

class speechbrain.nnet.quaternion_networks.q_linear.QLinear(n_neurons, input_shape, bias=True, init_criterion='glorot', weight_init='quaternion', autograd=True, spinor=False, vector_scale=False, max_norm=None)[source]

基础:Module

此函数实现了一个全连接的四元数值线性层:y = Wx + b。因此,y、W、x 和 b 都是四元数。一个四元数可以写成:r + xi + yj + zk。一个四元数张量 x = [batch, 32] 可以理解为 [batch, 0:7] = R, [batch, 8:15] = Xi, [batch, 16:23] = Yi, 和 [batch, 24:31] = Xi。因此,特征维度被分为四部分(必须能被4整除)。

Parameters:
  • n_neurons (int) – 这是输出神经元的数量(即输出的维度)。请注意,这些是四元数值的神经元。如果指定了256个神经元,输出维度将为1024。

  • input_shape (tuple) – 输入的预期大小。

  • bias (bool) – 如果为True,则采用加法偏置b。

  • init_criterion (str , optional) – (glorot, he). 此参数控制权重的初始化标准。 它与weights_init结合使用,以构建四元数值权重的初始化方法(默认为“glorot”)。

  • weight_init (str, optional) – (quaternion, unitary). 此参数定义了四元数值权重的初始化过程。“quaternion”将根据init_criterion和四元数极坐标形式生成四元数值权重。“unitary”将权重归一化到单位圆上(默认为“quaternion”)。 更多详情请参阅:“Quaternion recurrent neural networks”, Parcollet T.

  • autograd (bool, 可选) – 当为True时,将使用默认的PyTorch自动梯度。当为False时,将使用自定义的反向传播,减少3到4倍的内存消耗。但速度会慢2倍。这仅在spinor = False时有效(默认为True)。

  • spinor (bool, optional) – 当为True时,该层将变为旋量层。更准确地说,W*x将变为W*x*W-1。输入x将被W旋转,就像在旋量神经网络中一样。然而,x必须是一个实部为零的四元数(0 + xi + yj + zk)。实际上,旋转操作仅作用于向量部分。请注意,W在旋转之前将始终被归一化,以确保四元数代数(默认值为False)。 更多详细信息请参见:“四元数神经网络”,Parcollet T.

  • vector_scale (bool, 可选) – vector_scale 仅在 spinor = True 时使用。在旋量神经网络的上下文中,输入向量 x 会进行多次旋转并求和。因此,输出向量的范数总是随着层数的增加而增加,使得神经网络在深层配置下不稳定。vector_scale 参数是可学习的参数,它们通过将输出向量乘以一个小的可训练参数来充当门控(默认值为 False)。

  • max_norm (float) – 权重最大范数。

Example

>>> inputs = torch.rand(10, 50, 40)
>>> lin = QLinear(n_neurons=100, input_shape=inputs.shape, weight_init='unitary')
>>> output = lin(inputs)
>>> output.shape
torch.Size([10, 50, 400])
forward(x)[source]

返回输入张量的线性变换。

Parameters:

x (torch.Tensor) – 输入以进行线性变换。

Return type:

线性变换后的输入。