正弦波
- class torchhd.embeddings.Sinusoid(in_features, out_features, vsa: Literal['BSC', 'MAP', 'HRR', 'FHRR', 'BSBC', 'VTB', 'MCR'] = 'MAP', requires_grad=False, device=None, dtype=None)[来源]
使用非线性随机投影进行嵌入
基于可扩展的基于边缘的超维度学习系统与类脑神经适应实现。 它计算\(\cos(x \Phi^{\mathsf{T}} + b) \odot \sin(x \Phi^{\mathsf{T}})\),其中\(\Phi \in \mathbb{R}^{d \times m}\)是一个矩阵,其行从\(d\)维单位球面上均匀随机采样,\(b \in \mathbb{R}^{d}\)是一个向量,其元素在0到\(2\pi\)之间均匀随机采样。
- Parameters:
in_features (int) – 输入特征向量的维度。
out_features (int) – 超向量的维度。
vsa – (
VSAOptions, 可选): 指定要实例化的超向量类型。默认值:"MAP".requires_grad (bool, 可选) – 如果自动求导应该记录返回张量上的操作。默认值:
False。dtype (
torch.dtype, 可选) – 返回张量的期望数据类型。默认值:如果None,则使用全局默认值(参见torch.set_default_tensor_type())。device (
torch.device, 可选) – 返回张量的期望设备。默认值:如果None,则使用当前设备作为默认张量类型(参见 torch.set_default_tensor_type())。device对于 CPU 张量类型将是 CPU,对于 CUDA 张量类型将是当前的 CUDA 设备。
示例:
>>> embed = embeddings.Sinusoid(6, 5) >>> x = torch.randn(3, 6) >>> x tensor([[ 0.5043, 0.3161, -0.0938, 0.6134, -0.1280, 0.3647], [-0.1907, 1.6468, -0.3242, 0.8614, 0.3332, -0.2055], [-0.8662, -1.3861, -0.1577, 0.1321, -0.1157, -2.8928]]) >>> embed(x) MAPTensor([[-0.0555, 0.2292, -0.1833, 0.0301, -0.2416], [-0.0725, 0.7042, -0.5644, 0.2235, 0.3603], [-0.9021, 0.8899, -0.9802, 0.3565, 0.2367]])