正弦波

class torchhd.embeddings.Sinusoid(in_features, out_features, vsa: Literal['BSC', 'MAP', 'HRR', 'FHRR', 'BSBC', 'VTB', 'MCR'] = 'MAP', requires_grad=False, device=None, dtype=None)[来源]

使用非线性随机投影进行嵌入

基于可扩展的基于边缘的超维度学习系统与类脑神经适应实现。 它计算\(\cos(x \Phi^{\mathsf{T}} + b) \odot \sin(x \Phi^{\mathsf{T}})\),其中\(\Phi \in \mathbb{R}^{d \times m}\)是一个矩阵,其行从\(d\)维单位球面上均匀随机采样,\(b \in \mathbb{R}^{d}\)是一个向量,其元素在0到\(2\pi\)之间均匀随机采样。

Parameters:
  • in_features (int) – 输入特征向量的维度。

  • out_features (int) – 超向量的维度。

  • vsa – (VSAOptions, 可选): 指定要实例化的超向量类型。默认值: "MAP".

  • requires_grad (bool, 可选) – 如果自动求导应该记录返回张量上的操作。默认值:False

  • dtype (torch.dtype, 可选) – 返回张量的期望数据类型。默认值:如果 None,则使用全局默认值(参见 torch.set_default_tensor_type())。

  • device (torch.device, 可选) – 返回张量的期望设备。默认值:如果 None,则使用当前设备作为默认张量类型(参见 torch.set_default_tensor_type())。device 对于 CPU 张量类型将是 CPU,对于 CUDA 张量类型将是当前的 CUDA 设备。

示例:

>>> embed = embeddings.Sinusoid(6, 5)
>>> x = torch.randn(3, 6)
>>> x
tensor([[ 0.5043,  0.3161, -0.0938,  0.6134, -0.1280,  0.3647],
        [-0.1907,  1.6468, -0.3242,  0.8614,  0.3332, -0.2055],
        [-0.8662, -1.3861, -0.1577,  0.1321, -0.1157, -2.8928]])
>>> embed(x)
MAPTensor([[-0.0555,  0.2292, -0.1833,  0.0301, -0.2416],
           [-0.0725,  0.7042, -0.5644,  0.2235,  0.3603],
           [-0.9021,  0.8899, -0.9802,  0.3565,  0.2367]])
forward(input: Tensor) Tensor[来源]

定义每次调用时执行的计算。

应该由所有子类覆盖。

注意

尽管前向传递的配方需要在此函数内定义,但之后应该调用Module实例而不是这个,因为前者负责运行已注册的钩子,而后者则默默地忽略它们。