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])
- 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]])
- 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.]])