當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。