稀疏分布式

class torchhd.memory.SparseDistributed(memory_size: int, key_dim: int, value_dim: int, p: float = 0.000368, kappa: int | None = None, dtype=None, device=None, requires_grad=False)[来源]

Sparse Distributed Memory

稀疏分布式内存(SDM)由其(通常是随机的)键及其值指定。

Parameters:
  • memory_size (int) – 内存键值对的数量。

  • key_dim (int) – 键向量的维度。

  • value_dim (int) – 值向量的维度。

  • p (float, 可选) – 预计包含任何值的内存地址的比例。默认值:0.000368

  • kappa (int, optional) – 每个记忆单元的最大计数,值被限制在 [-kappa, kappa] 之间。默认值:无限制。

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

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

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

Shapes:
  • 键值: \((n, a)\)

  • 值:\((n, c)\)

Examples::
>>> keys = torchhd.random(6, 512)
>>> sdm = torchhd.memory.SparseDistributed(100000, 512, 512)
>>> # use as associative memory
>>> sdm.write(keys, keys)
>>> read = sdm.read(keys).sign()
>>> torchhd.cosine_similarity(read, keys)
tensor([[ 1.0000,  0.0156, -0.0039, -0.0742,  0.0000, -0.0195],
        [ 0.0156,  1.0000, -0.0352, -0.0586,  0.0000, -0.0039],
        [-0.0039, -0.0352,  1.0000,  0.0156,  0.0820, -0.0234],
        [-0.0742, -0.0586,  0.0156,  1.0000, -0.0039,  0.0000],
        [ 0.0000,  0.0000,  0.0820, -0.0039,  1.0000,  0.0195],
        [-0.0195, -0.0039, -0.0234,  0.0000,  0.0195,  1.0000]])
read(query: Tensor) VSATensor[来源]

从稀疏分布式内存中读取与查询最相似的键的值。

Parameters:

query (Tensor) – 用于内存查找的查询向量。

Shapes:
  • 查询: \((*, d)\)

  • 结果: \((*, d)\)

write(keys: Tensor, values: Tensor) None[来源]

将值写入稀疏分布式内存的地址。

Parameters:
  • address (Tensor) – 写入内存的地址向量。

  • value (Tensor) – 写入内存的值向量。

Shapes:
  • 地址: \((*, d)\)

  • 值: \((*, d)\)