speechbrain.nnet.quaternion_networks.q_linear module
实现四元数线性变换的库。
- 作者
Titouan Parcollet 2020
Drew Wagner 2024
摘要
类
此函数实现了全连接的四元数线性层: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 整除)。
- 参数:
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, optional) – 为 True 时,将使用默认的 PyTorch autograd。为 False 时,将使用自定义反向传播,将内存消耗减少 3 到 4 倍。速度也会慢 2 倍。这仅在 spinor = False 时有效 (默认值为 True)。
spinor (bool, optional) – 为 True 时,该层将转换为 spinor 层。更准确地说,W*x 将转换为 W*x*W-1。输入 x 将由 W 旋转,就像在 spinor 神经网络中一样。但是,x 必须是一个实部为零的四元数 (0 + xi + yj + zk)。实际上,旋转操作只作用于向量部分。请注意,W 在旋转之前总是会被归一化,以确保四元数代数 (默认值为 False)。更多详情请参阅:“Quaternion neural networks”, Parcollet T。
vector_scale (bool, optional) – vector_scale 仅在 spinor = True 时使用。在 spinor 神经网络中,对输入向量 x 进行多次旋转并求和。因此,输出向量的范数总是随着层数的增加而增加,使得深度配置下的神经网络不稳定。vector_scale 参数是可学习的参数,通过将输出向量乘以一个小的可训练参数来充当门控 (默认值为 False)。
max_norm (float) – 权重最大范数。
示例
>>> 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])