speechbrain.nnet.complex_networks.c_linear 模块

实现复数值线性变换的库。

作者
  • Titouan Parcollet 2020

摘要

CLinear

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

参考

class speechbrain.nnet.complex_networks.c_linear.CLinear(n_neurons, input_shape, bias=True, init_criterion='glorot', weight_init='complex')[source]

基类: Module

此函数实现了一个全连接的复数值线性层:y = Wx + b。因此,y、W、x 和 b 都是复数。一个复数表示为 r + xi。一个复数 Tensor x = [batch, 32] 可以理解为 [batch, 0:15] 是实部 R,[batch, 16:31] 是虚部 Xi。因此,特征维度被切成两半(必须能被 2 整除)。

参数:
  • n_neurons (int) – 输出神经元的数量(即输出的维度)。请注意,这些是复数值神经元。如果指定 256 个神经元,则输出维度将是 512。

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

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

  • init_criterion (str , optional) – (glorot, he)。此参数控制权重的初始化标准。它与 weights_init 结合构建复数值权重的初始化方法(默认为 "glorot")。

  • weight_init (str, optional) – (complex, unitary)。此参数定义复数值权重的初始化过程(默认为 "complex")。"complex" 将根据 init_criterion 和复数极坐标形式生成随机的复数值权重。"unitary" 将权重归一化使其位于单位圆上。更多详细信息请参见:“Deep Complex Networks”,Trabelsi C. 等人。

示例

>>> inputs = torch.rand(10, 50, 40)
>>> lin = CLinear(n_neurons=100, input_shape=inputs.shape)
>>> output = lin(inputs)
>>> output.shape
torch.Size([10, 50, 200])
forward(x)[source]

返回输入 Tensor 的线性变换。

参数:

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

返回类型:

输入的复数线性变换。