圆形

torchhd.circular(num_vectors: int, dimensions: int, vsa: Literal['BSC', 'MAP', 'HRR', 'FHRR', 'BSBC', 'VTB', 'MCR'] = 'MAP', *, randomness: float = 0.0, requires_grad=False, **kwargs) VSATensor[来源]

创建一组循环相关的高维向量。

实现了基于层级超向量的圆形超向量,如An Extension to Basis-Hypervectors for Learning from Circular Data in Hyperdimensional Computing中所述。 任何超向量都与圆上相对位置的超向量准正交。

注意

由于HRR固有的不精确性,无法直接使用全息缩减表示(HRR)创建循环超向量。 一种解决方法是使用FHRR创建循环超向量,然后将它们转换为HRR向量。示例:

>>> hv = torchhd.circular(10, 6, "FHRR")
>>> hv = torch.real(torch.fft.ifft(hv)).as_subclass("HRR")
Parameters:
  • num_vectors (int) – 要生成的超向量的数量。

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

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

  • 随机性 (浮点数, 可选) – 用于在0.0处的圆形和1.0处的随机超向量之间进行插值的r值。默认值:0.0

  • generator (torch.Generator, 可选) – 用于采样的伪随机数生成器。

  • dtype (torch.dtype, 可选) – 返回张量的期望数据类型。默认值:如果 None 则取决于 VSATensor。

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

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

示例:

>>> torchhd.circular(10, 6, "BSC")
tensor([[False, False,  True, False,  True,  True],
        [False, False,  True, False,  True,  True],
        [False, False,  True, False,  True,  True],
        [False, False,  True,  True,  True,  True],
        [ True, False,  True,  True,  True,  True],
        [ True, False,  True,  True,  True,  True],
        [ True, False,  True,  True,  True,  True],
        [ True, False,  True,  True,  True,  True],
        [ True, False,  True, False,  True,  True],
        [False, False,  True, False,  True,  True]])

>>> torchhd.circular(10, 6, "MAP")
tensor([[-1., -1., -1., -1., -1.,  1.],
        [-1., -1., -1., -1., -1.,  1.],
        [-1., -1., -1.,  1., -1.,  1.],
        [-1., -1., -1.,  1., -1.,  1.],
        [-1., -1., -1.,  1., -1.,  1.],
        [-1., -1.,  1.,  1., -1.,  1.],
        [-1., -1.,  1.,  1., -1.,  1.],
        [-1., -1.,  1., -1., -1.,  1.],
        [-1., -1.,  1., -1., -1.,  1.],
        [-1., -1.,  1., -1., -1.,  1.]])

>>> torchhd.circular(10, 6, "FHRR")
tensor([[-0.887-0.460j, -0.906+0.421j, -0.727-0.686j, -0.271+0.962j, -0.387+0.921j, -0.895-0.445j],
        [-0.887-0.460j, -0.906+0.421j, -0.727-0.686j, -0.947+0.319j, -0.387+0.921j, -0.895-0.445j],
        [-0.887-0.460j, -0.906+0.421j, -0.828+0.560j, -0.947+0.319j, -0.387+0.921j, -0.895-0.445j],
        [-0.887-0.460j, -0.906+0.421j, -0.828+0.560j, -0.947+0.319j, -0.387+0.921j, -0.895-0.445j],
        [ 0.983-0.183j,  0.732+0.680j, -0.828+0.560j, -0.947+0.319j, -0.387+0.921j, -0.895-0.445j],
        [ 0.983-0.183j,  0.732+0.680j, -0.828+0.560j, -0.947+0.319j, -0.705-0.709j,  0.562-0.827j],
        [ 0.983-0.183j,  0.732+0.680j, -0.828+0.560j, -0.271+0.962j, -0.705-0.709j,  0.562-0.827j],
        [ 0.983-0.183j,  0.732+0.680j, -0.727-0.686j, -0.271+0.962j, -0.705-0.709j,  0.562-0.827j],
        [ 0.983-0.183j,  0.732+0.680j, -0.727-0.686j, -0.271+0.962j, -0.705-0.709j,  0.562-0.827j],
        [-0.887-0.460j, -0.906+0.421j, -0.727-0.686j, -0.271+0.962j, -0.705-0.709j,  0.562-0.827j]])