BSCTensor
- class torchhd.BSCTensor[来源]
二进制散列码
在Binary spatter-coding of ordered K-tuples中提出,该模型使用二进制值超向量。
- bind(other: BSCTensor) BSCTensor[来源]
使用XOR将超向量与其他绑定。
这会产生一个与两者都不相似的超向量。
绑定用于关联信息,例如,为变量赋值。
- Parameters:
其他 (BSC) – 其他输入超向量
- Shapes:
自我: \((*)\)
其他: \((*)\)
输出: \((*)\)
示例:
>>> a, b = torchhd.BSCTensor.random(2, 10) >>> a tensor([ True, False, True, True, False, True, False, False, True, False]) >>> b tensor([ True, False, False, False, False, True, False, False, False, False]) >>> a.bind(b) tensor([False, False, True, True, False, False, False, False, True, False]) >>> a, b = torchhd.BSCTensor.random(2, 10, dtype=torch.long) >>> a tensor([1, 0, 0, 1, 0, 1, 0, 0, 0, 0]) >>> b tensor([0, 0, 0, 1, 0, 0, 1, 0, 1, 0]) >>> a.bind(b) tensor([1, 0, 0, 0, 0, 1, 1, 0, 1, 0])
- bundle(other: BSCTensor, *, generator: Generator | None = None) BSCTensor[来源]
使用多数投票将超向量与其他捆绑在一起。
这会产生一个与两者极为相似的超向量。
捆绑操作用于将信息聚合到一个单一的超级向量中。
多数投票中的平局是随机打破的。为了获得确定性的结果,请提供一个随机数生成器。
- Parameters:
其他 (BSC) – 其他输入超向量
generator (
torch.Generator, 可选) – 用于采样的伪随机数生成器。
- Shapes:
自我: \((*)\)
其他: \((*)\)
输出: \((*)\)
示例:
>>> a, b = torchhd.BSCTensor.random(2, 10) >>> a tensor([ True, False, True, False, False, True, True, False, True, False]) >>> b tensor([ True, False, False, True, True, False, False, True, False, True]) >>> a.bundle(b) tensor([ True, False, True, True, False, True, True, False, False, False]) >>> a, b = torchhd.BSCTensor.random(2, 10, dtype=torch.long) >>> a tensor([1, 0, 1, 1, 1, 0, 1, 1, 1, 1]) >>> b tensor([1, 1, 1, 0, 0, 0, 1, 1, 0, 0]) >>> a.bundle(b) tensor([1, 0, 1, 0, 0, 0, 1, 1, 0, 1])
- classmethod empty(num_vectors: int, dimensions: int, *, generator=None, dtype=torch.bool, device=None, requires_grad=False) BSCTensor[来源]
创建一组表示空集的超向量。
当与随机超向量\(x\)捆绑时,结果是\(\sim x\)。由于BSC模型的低精度,空集无法明确表示,因此返回的超向量与随机超向量相同。
- Parameters:
num_vectors (int) – 要生成的超向量的数量。
维度 (int) – 超向量的维度。
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.BSCTensor.empty(3, 6) tensor([[False, False, False, False, True, True], [False, True, False, False, True, True], [ True, False, True, True, False, False]]) >>> torchhd.BSCTensor.empty(3, 6, dtype=torch.long) tensor([[0, 1, 0, 1, 0, 1], [0, 0, 1, 1, 0, 1], [0, 1, 1, 0, 1, 1]])
- classmethod identity(num_vectors: int, dimensions: int, *, dtype=torch.bool, device=None, requires_grad=False) BSCTensor[来源]
创建一组身份超向量。
当与随机超向量 \(x\) 绑定时,结果是 \(x\)。
- Parameters:
num_vectors (int) – 要生成的超向量的数量。
维度 (int) – 超向量的维度。
dtype (
torch.dtype, 可选) – 返回张量的期望数据类型。默认值:如果None则取决于 VSATensor。device (
torch.device, 可选) – 返回张量的期望设备。默认值:如果None,则使用当前设备作为默认张量类型(参见 torch.set_default_tensor_type())。device对于 CPU 张量类型将是 CPU,对于 CUDA 张量类型将是当前的 CUDA 设备。requires_grad (bool, 可选) – 如果自动求导应该记录返回张量上的操作。默认值:
False。
示例:
>>> torchhd.BSCTensor.identity(3, 6) tensor([[False, False, False, False, False, False], [False, False, False, False, False, False], [False, False, False, False, False, False]]) >>> torchhd.BSCTensor.identity(3, 6, dtype=torch.long) tensor([[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]])
- inverse() BSCTensor[来源]
反转超向量以进行绑定。
BSC中的每个超向量都是其自身的逆,因此这将返回自身的副本。
- Shapes:
自我: \((*)\)
输出: \((*)\)
示例:
>>> a = torchhd.BSCTensor.random(1, 10) >>> a tensor([[False, False, False, True, True, False, False, True, True, False]]) >>> a.inverse() tensor([[False, False, False, True, True, False, False, True, True, False]]) >>> a = torchhd.BSCTensor.random(1, 10, dtype=torch.long) >>> a tensor([[0, 1, 0, 1, 1, 1, 1, 0, 1, 1]]) >>> a.inverse() tensor([[0, 1, 0, 1, 1, 1, 1, 0, 1, 1]])
- negative() BSCTensor[来源]
对捆绑逆的超向量进行取反。
- Shapes:
自我: \((*)\)
输出: \((*)\)
示例:
>>> a = torchhd.BSCTensor.random(1, 10) >>> a tensor([[ True, True, True, True, False, False, False, True, True, True]]) >>> a.negative() tensor([[False, False, False, False, True, True, True, False, False, False]]) >>> a = torchhd.BSCTensor.random(1, 10, dtype=torch.long) >>> a tensor([[0, 1, 0, 1, 0, 0, 1, 1, 0, 1]]) >>> a.negative() tensor([[1, 0, 1, 0, 1, 1, 0, 0, 1, 0]])
- normalize() BSCTensor[来源]
归一化超向量。
在BSC超向量上的每个操作都确保其保持归一化,因此这将返回自身的副本。
- Shapes:
自我: \((*)\)
输出: \((*)\)
示例:
>>> x = torchhd.BSCTensor.random(4, 6).multibundle() >>> x BSCTensor([ True, False, False, False, False, False]) >>> x.normalize() BSCTensor([ True, False, False, False, False, False])
- permute(shifts: int = 1) BSCTensor[来源]
置换超向量。
排列运算符通常用于为超向量分配顺序。
- Parameters:
shifts (int, optional) – 张量元素移动的位置数。
- Shapes:
自我: \((*)\)
输出: \((*)\)
示例:
>>> a = torchhd.BSCTensor.random(1, 10) >>> a tensor([[ True, False, False, False, False, False, False, False, False, False]]) >>> a.permute() tensor([[False, True, False, False, False, False, False, False, False, False]]) >>> a = torchhd.BSCTensor.random(1, 10, dtype=torch.long) >>> a tensor([[1, 1, 0, 0, 1, 1, 0, 0, 1, 1]]) >>> a.permute() tensor([[1, 1, 1, 0, 0, 1, 1, 0, 0, 1]])
- classmethod random(num_vectors: int, dimensions: int, *, sparsity=0.5, generator=None, dtype=torch.bool, device=None, requires_grad=False) BSCTensor[来源]
创建一组随机独立的超向量。
生成的高维向量是从
dimensions维超空间中均匀随机采样的。- Parameters:
num_vectors (int) – 要生成的超向量的数量。
维度 (int) – 超向量的维度。
稀疏度 (float, 可选) – 预期不活跃元素的比例。对复杂超向量没有影响。默认值:
0.5。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.BSCTensor.random(3, 6) tensor([[ True, False, False, False, True, True], [False, False, True, False, False, False], [False, False, True, True, False, False]]) >>> torchhd.BSCTensor.random(3, 6, sparsity=0.1) tensor([[ True, True, True, True, True, True], [False, True, True, True, True, True], [ True, True, True, True, True, True]]) >>> torchhd.BSCTensor.random(3, 6, dtype=torch.long) tensor([[1, 1, 0, 0, 0, 1], [0, 1, 0, 0, 1, 1], [0, 1, 1, 0, 0, 0]])