MCRTensor

class torchhd.MCRTensor[来源]

模块化复合表示 (MCR)

模块化复合表示中提出,该模型使用模块化整数向量。

classmethod __torch_function__(func, types, args=(), kwargs=None)[来源]

这个 __torch_function__ 实现包装了子类,使得在子类上调用的方法返回子类实例,而不是 torch.Tensor 实例。

由此得出的一个推论是,如果你为子类实现 __torch_function__,你需要覆盖 torch.Tensor 方法。

我们建议在执行上述操作时始终调用super().__torch_function__作为基础情况。

虽然不是强制性的,但我们建议将__torch_function__设为类方法。

bind(other: MCRTensor) MCRTensor[来源]

使用循环卷积将超向量与其他超向量绑定。

这会产生一个与两者都不相似的超向量。

绑定用于关联信息,例如,为变量赋值。

Parameters:

其他 (MCRTensor) – 其他输入超向量

Shapes:
  • 自我: \((*)\)

  • 其他: \((*)\)

  • 输出: \((*)\)

示例:

>>> a, b = torchhd.MCRTensor.random(2, 10, block_size=64)
>>> a
MCRTensor([18, 55, 40, 62, 39, 26, 35, 24, 49, 41])
>>> b
MCRTensor([46, 36, 21, 23, 25, 12, 29, 53, 54, 41])
>>> a.bind(b)
MCRTensor([ 0, 27, 61, 21,  0, 38,  0, 13, 39, 18])
bundle(other: MCRTensor) MCRTensor[来源]

使用归一化复数向量加法捆绑超向量。

这会产生一个与两者极为相似的超向量。

捆绑操作用于将信息聚合到一个单一的超级向量中。

Parameters:

其他 (MCR) – 其他输入超向量

Shapes:
  • 自我: \((*)\)

  • 其他: \((*)\)

  • 输出: \((*)\)

示例:

>>> a, b = torchhd.MCRTensor.random(2, 10, block_size=64)
>>> a
MCRTensor([32, 26, 22, 22, 34, 30,  2,  2, 40, 43])
>>> b
MCRTensor([33, 27, 39, 54, 27, 60, 60,  4, 24,  5])
>>> a.bundle(b)
MCRTensor([32, 26, 39, 54, 27, 60,  2,  4, 40,  5])
cosine_similarity(others: MCRTensor, *, dtype=None) Tensor[来源]

与其他超向量的余弦相似度

dot_similarity(others: MCRTensor, *, dtype=None) Tensor[来源]

基于“模块化空间中的曼哈顿距离”。 两个元素的距离除以两个随机数的平均距离。

classmethod empty(num_vectors: int, dimensions: int, *, block_size: int, generator=None, dtype=torch.int64, device=None, requires_grad=False) MCRTensor[来源]

创建一组表示空集的超向量。

当与超向量\(x\)捆绑时,结果是\(x\)。由于MCR模型的低精度,空集无法明确表示,因此返回的超向量与随机超向量相同。

Parameters:
  • num_vectors (int) – 要生成的超向量的数量。

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

  • block_size (int) – 每个块中的元素数量,用于控制角度的粒度。

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

  • dtype (torch.dtype, 可选) – 返回张量的期望数据类型。默认值: int64.

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

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

示例:

>>> torchhd.MCRTensor.empty(3, 6, block_size=64)
MCRTensor([[54,  3, 22, 27, 41, 21],
           [17, 31, 55,  3, 44, 52],
           [42, 37, 60, 54, 13, 41]])
classmethod identity(num_vectors: int, dimensions: int, *, block_size: int, dtype=torch.int64, device=None, requires_grad=False) MCRTensor[来源]

创建一组身份超向量。

当与随机超向量 \(x\) 绑定时,结果是 \(x\)

Parameters:
  • num_vectors (int) – 要生成的超向量的数量。

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

  • block_size (int) – 每个块中的元素数量,用于控制角度的粒度。

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

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

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

示例:

>>> torchhd.MCRTensor.identity(3, 6, block_size=64)
MCRTensor([[0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0]])
inverse() MCRTensor[来源]

反转超向量以进行绑定。

Shapes:
  • 自我: \((*)\)

  • 输出: \((*)\)

示例:

>>> a = torchhd.MCRTensor.random(1, 10, block_size=64)
>>> a
MCRTensor([[ 5, 30, 15, 43, 19, 36,  4, 14, 57, 34]])
>>> a.inverse()
MCRTensor([[59, 34, 49, 21, 45, 28, 60, 50,  7, 30]])
multibind() MCRTensor[来源]

绑定多个超向量

multibundle() MCRTensor[来源]

捆绑多个超向量

normalize() MCRTensor[来源]

归一化超向量。

对MCR超向量的每次操作都确保其保持归一化,因此这将返回自身的副本。

Shapes:
  • 自我: \((*)\)

  • 输出: \((*)\)

示例:

>>> x = torchhd.MCRTensor.random(4, 6, block_size=64).multibundle()
>>> x
MCRTensor([28, 27, 20, 44, 57, 18])
>>> x.normalize()
MCRTensor([28, 27, 20, 44, 57, 18])
permute(shifts: int = 1) MCRTensor[来源]

置换超向量。

排列运算符通常用于为超向量分配顺序。

Parameters:

shifts (int, optional) – 张量元素移动的位置数。

Shapes:
  • 自我: \((*)\)

  • 输出: \((*)\)

示例:

>>> a = torchhd.MCRTensor.random(1, 10, block_size=64)
>>> a
MCRTensor([[33, 24,  1, 36,  2, 57, 11, 59, 33,  3]])
>>> a.permute(4)
MCRTensor([[11, 59, 33,  3, 33, 24,  1, 36,  2, 57]])
classmethod random(num_vectors: int, dimensions: int, *, block_size: int, generator=None, dtype=torch.int64, device=None, requires_grad=False) MCRTensor[来源]

创建一组随机独立的超向量。

生成的超向量样本在0和block_size之间均匀随机分布。

Parameters:
  • num_vectors (int) – 要生成的超向量的数量。

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

  • block_size (int) – 每个块中的元素数量,用于控制角度的粒度。

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

  • dtype (torch.dtype, 可选) – 返回张量的期望数据类型。默认值: int64.

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

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

示例:

>>> torchhd.MCRTensor.random(3, 6, block_size=64)
MCRTensor([[ 7,  1, 39,  8, 55, 22],
           [51, 38, 59, 45, 13, 29],
           [19, 26, 30,  5, 15, 51]])
>>> torchhd.MCRTensor.random(3, 6, block_size=128, dtype=torch.float32)
MCRTensor([[116.,  25., 100.,  10.,  21.,  86.],
           [ 69.,  49.,   2.,  56.,  78.,  70.],
           [ 77.,  47.,  37., 106.,   8.,  30.]])