当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PyTorch EmbeddingBag用法及代码示例


本文简要介绍python语言中 torch.nn.EmbeddingBag 的用法。

用法:

class torch.nn.EmbeddingBag(num_embeddings, embedding_dim, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, mode='mean', sparse=False, _weight=None, include_last_offset=False, padding_idx=None, device=None, dtype=None)

参数

  • num_embeddings(int) -嵌入字典的大小

  • embedding_dim(int) -每个嵌入向量的大小

  • max_norm(float,可选的) -如果给定,则范数大于 max_norm 的每个嵌入向量被重新规范化为具有范数 max_norm

  • norm_type(float,可选的) -p-norm 的 p 为 max_norm 选项计算。默认 2

  • scale_grad_by_freq(布尔值,可选的) -如果给定,这将通过小批量中单词频率的倒数来缩放梯度。默认 False 。注意:mode="max" 时不支持此选项。

  • mode(string,可选的) -"sum""mean""max" 。指定减少包的方式。 "sum" 计算加权和,同时考虑 per_sample_weights"mean" 计算包中值的平均值,"max" 计算每个包的最大值。默认值:"mean"

  • sparse(bool,可选的) -如果 True ,梯度 w.r.t. weight 矩阵将是一个稀疏张量。有关稀疏渐变的更多详细信息,请参阅注释。注意:mode="max" 时不支持此选项。

  • include_last_offset(bool,可选的) -如果 Trueoffsets 有一个附加元素,其中最后一个元素等于 indices 的大小。这与 CSR 格式匹配。

  • padding_idx(int,可选的) -如果指定,padding_idx 处的条目不会影响梯度;因此,padding_idx 处的嵌入向量在训练期间不会更新,即它保持为固定的 “pad”。对于新构建的 EmbeddingBag,padding_idx 处的嵌入向量将默认为全零,但可以更新为另一个值以用作填充向量。请注意,padding_idx 处的嵌入向量不包括在缩减范围内。

变量

~EmbeddingBag.weight(Tensor) - 初始化的形状为 (num_embeddings, embedding_dim) 的模块的可学习权重。

计算嵌入的 ‘bags’ 的总和或均值,而不实例化中间嵌入。

对于恒定长度的袋子,没有 per_sample_weights ,没有等于 padding_idx 的索引,并且具有 2D 输入,这个类

  • mode="sum" 等效于 Embedding 后跟 torch.sum(dim=1)

  • mode="mean" 等效于 Embedding 后跟 torch.mean(dim=1)

  • mode="max" 等效于 Embedding 后跟 torch.max(dim=1)

然而,EmbeddingBag 比使用这些操作链更节省时间和内存。

EmbeddingBag 还支持 per-sample 权重作为前向传递的参数。这会在执行 mode 指定的加权缩减之前缩放嵌入的输出。如果 per_sample_weights 通过,则唯一支持的 mode"sum" ,它根据 per_sample_weights 计算加权和。

例子:

>>> # an EmbeddingBag module containing 10 tensors of size 3
>>> embedding_sum = nn.EmbeddingBag(10, 3, mode='sum')
>>> # a batch of 2 samples of 4 indices each
>>> input = torch.tensor([1,2,4,5,4,3,2,9], dtype=torch.long)
>>> offsets = torch.tensor([0,4], dtype=torch.long)
>>> embedding_sum(input, offsets)
tensor([[-0.8861, -5.4350, -0.0523],
        [ 1.1306, -2.5798, -1.0044]])

>>> # Example with padding_idx
>>> embedding_sum = nn.EmbeddingBag(10, 3, mode='sum', padding_idx=2)
>>> input = torch.tensor([2, 2, 2, 2, 4, 3, 2, 9], dtype=torch.long)
>>> offsets = torch.tensor([0,4], dtype=torch.long)
>>> embedding_sum(input, offsets)
tensor([[ 0.0000,  0.0000,  0.0000],
        [-0.7082,  3.2145, -2.6251]])

>>> # An EmbeddingBag can be loaded from an Embedding like so
>>> embedding = nn.Embedding(10, 3, padding_idx=2)
>>> embedding_sum = nn.EmbeddingBag.from_pretrained(
        embedding.weight,
        padding_idx=embedding.padding_idx,
        mode='sum')

相关用法


注:本文由纯净天空筛选整理自pytorch.org大神的英文原创作品 torch.nn.EmbeddingBag。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。