嵌入
- class Embedding(max_id: int | None = None, num_embeddings: int | None = None, embedding_dim: int | None = None, shape: None | int | Sequence[int] = None, initializer: str | Callable[[Tensor], Tensor] | None = None, initializer_kwargs: Mapping[str, Any] | None = None, constrainer: str | Callable[[Tensor], Tensor] | None = None, constrainer_kwargs: Mapping[str, Any] | None = None, trainable: bool = True, dtype: dtype | None = None, **kwargs)[source]
基础类:
Representation可训练的嵌入。
该类提供了与
torch.nn.Embedding相同的接口,并且可以在PyKEEN中作为一个功能更全面的直接替代品使用。它通过添加额外的选项来扩展它,用于归一化、约束或应用dropout。
当选择了一个normalizer时,它会在每次前向传播中应用。它可以用来确保嵌入向量是单位长度。一个constrainer可以类似地使用,但它是在每次参数更新后应用的(使用post_parameter_update钩子),即在自动梯度计算之外。
可选的dropout也可以用作正则化技术。此外,它能够通过诸如Monte-Carlo dropout等技术获得不确定性估计。以下简单示例展示了如何从(未训练的)模型中为单个三元组获得不同的分数。这些分数可以被视为分数分布中的样本。
>>> from pykeen.datasets import Nations >>> dataset = Nations() >>> from pykeen.models import ERModel >>> model = ERModel( ... triples_factory=dataset.training, ... interaction='distmult', ... entity_representations_kwargs=dict(embedding_dim=3, dropout=0.1), ... relation_representations_kwargs=dict(embedding_dim=3, dropout=0.1), ... ) >>> import torch >>> batch = torch.as_tensor(data=[[0, 1, 0]]).repeat(10, 1) >>> scores = model.score_hrt(batch)
实例化一个具有扩展功能的嵌入。
注意
normalizer(参见
Representation)和 constrainer 的区别在于,normalizer 应用于检索到的表示,并且是前向调用的一部分。因此,它是计算图的一部分,可能会对权重接收到的梯度产生影响。而 constrainer 则是在参数更新之后(使用post_parameter_update()钩子)应用的,因此 不 是计算图的一部分。- Parameters:
max_id (int) – >0 嵌入的数量。
num_embeddings (int | None) – >0 嵌入的数量。
embedding_dim (int | None) – >0 嵌入维度。
initializer (Hint[Initializer]) –
一个可选的初始化器,它接受一个未初始化的 (num_embeddings, embedding_dim) 张量作为输入,并返回一个相同形状和数据类型的初始化张量(可能是相同的,即初始化可能是原地进行的)。可以作为函数传递,或者作为字符串对应于
pykeen.nn.representation.initializers中的键,例如:"xavier_uniform""xavier_uniform_norm""xavier_normal""xavier_normal_norm""normal""normal_norm""uniform""uniform_norm""init_phases"
initializer_kwargs (Mapping[str, Any] | None) – 传递给初始化器的额外关键字参数
constrainer (Callable[[Tensor], Tensor] | None) –
一个函数,在每次参数更新后应用于权重,而不跟踪梯度。 它可以用于在基于梯度的训练之外强制执行模型约束。该函数不需要是原地操作,但权重张量会被原地修改。可以作为函数传递,或者作为字符串传递,对应于
pykeen.nn.representation.constrainer_resolver中的键,例如:'normalize''complex_normalize''clamp''clamp_norm'
constrainer_kwargs (Mapping[str, Any] | None) – 传递给约束器的额外关键字参数
trainable (bool) – 是否应将包装的嵌入标记为需要梯度。默认为 True。
dtype (torch.dtype | None) – 数据类型(否则使用
torch.get_default_dtype()来查找)kwargs – 传递给 Representation.__init__ 的额外基于关键字的参数
方法总结
应用不应包含在梯度中的约束。
重置模块的参数。
方法文档