評價此頁

EmbeddingBag#

class torch.nn.modules.sparse.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)[原始碼]#

計算嵌入的“包”的總和或平均值,而無需例項化中間嵌入。

對於固定長度的包,沒有 per_sample_weights,沒有等於 padding_idx 的索引,並且對於二維輸入,此類

  • 使用 mode="sum" 等同於 Embedding 後跟 torch.sum(dim=1)

  • 使用 mode="mean" 等同於 Embedding 後跟 torch.mean(dim=1)

  • 使用 mode="max" 等同於 Embedding 後跟 torch.max(dim=1)

然而,EmbeddingBag 比使用這些操作鏈在時間和記憶體效率上都要高得多。

EmbeddingBag 還支援將每樣本權重作為前向傳遞的引數。這會在執行由 mode 指定的加權約簡之前,對嵌入的輸出進行縮放。如果傳遞了 per_sample_weights,則唯一支援的 mode"sum",它會根據 per_sample_weights 計算加權和。

引數
  • num_embeddings (int) – 嵌入字典的大小。

  • embedding_dim (int) – 每個嵌入向量的大小。

  • max_norm (float, optional) – 如果給定,則範數大於 max_norm 的每個嵌入向量將被重新歸一化為範數為 max_norm

  • norm_type (float, optional) – 計算 max_norm 選項的 p-範數的 p 值。預設為 2.0

  • scale_grad_by_freq (bool, optional) – 如果給定,將透過詞語在小批次中的頻率的倒數來縮放梯度。預設為 False。注意:當 mode="max" 時,此選項不受支援。

  • mode (str, optional) – "sum", "mean""max"。指定約簡包的方式。"sum" 計算加權和,並考慮 per_sample_weights"mean" 計算包中值的平均值,"max" 計算每個包的最大值。預設值:"mean"

  • sparse (bool, optional) – 如果為 True,則 weight 矩陣的梯度將是稀疏張量。有關稀疏梯度的更多詳細資訊,請參閱 Notes。注意:當 mode="max" 時,不支援此選項。

  • include_last_offset (bool, optional) – 如果為 True,則 offsets 會多一個元素,最後一個元素等同於 indices 的大小。這與 CSR 格式匹配。

  • padding_idx (int, optional) – 如果指定,padding_idx 處的條目不對梯度做出貢獻;因此,在訓練過程中,padding_idx 處的嵌入向量不會被更新,即它保持一個固定的“填充”。對於新建立的 EmbeddingBag,padding_idx 處的嵌入向量將預設為全零,但可以更新為其他值以用作填充向量。請注意,padding_idx 處的嵌入向量已從約簡中排除。

變數

weight (Tensor) – 模組的可學習權重,形狀為 (num_embeddings, embedding_dim),從 N(0,1)\mathcal{N}(0, 1) 初始化。

示例

>>> # 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')
forward(input, offsets=None, per_sample_weights=None)[原始碼]#

EmbeddingBag 的前向傳遞。

引數
  • input (Tensor) – 包含嵌入矩陣索引包的張量。

  • offsets (Tensor, optional) – 僅當 input 為一維時使用。offsets 確定 input 中每個包(序列)的起始索引位置。

  • per_sample_weights (Tensor, optional) – 一個浮點數/雙精度數權重的張量,或者為 None 表示所有權重都應視為 1。如果指定,per_sample_weights 的形狀必須與 input 完全相同,並且假定與 offsets 相同(如果 offsets 不為 None)。僅支援 mode='sum'

返回

輸出張量形狀為 (B, embedding_dim)

返回型別

張量

注意

關於 inputoffsets 的幾點說明

  • inputoffsets 必須是相同的型別,可以是 int 或 long。

  • 如果 input 是 2D 的,形狀為 (B, N),它將被視為 B 個包(序列),每個包的固定長度為 N,這將根據 mode 返回 B 個聚合值。offsets 被忽略,並且在此情況下要求為 None

  • 如果 input 是 1D 的,形狀為 (N),它將被視為多個包(序列)的連線。offsets 要求是包含 input 中每個包起始索引位置的 1D 張量。因此,對於形狀為 (B)offsetsinput 將被視為有 B 個包。空包(即長度為 0 的包)將返回填充為零的向量。

classmethod from_pretrained(embeddings, freeze=True, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, mode='mean', sparse=False, include_last_offset=False, padding_idx=None)[原始碼]#

從給定的二維 FloatTensor 建立 EmbeddingBag 例項。

引數
  • embeddings (Tensor) – 包含 EmbeddingBag 權重的 FloatTensor。第一個維度被傳遞給 EmbeddingBag 作為 'num_embeddings',第二個維度作為 'embedding_dim'。

  • freeze (bool, optional) – 如果為 True,則張量在學習過程中不會被更新。等同於 embeddingbag.weight.requires_grad = False。預設值:True

  • max_norm (float, optional) – 請參閱模組初始化文件。預設值:None

  • norm_type (float, optional) – 請參見模組初始化文件。預設為 2.0

  • scale_grad_by_freq (bool, optional) – 請參見模組初始化文件。預設為 False

  • mode (str, optional) – 請參閱模組初始化文件。預設值:"mean"

  • sparse (bool, optional) – 請參閱模組初始化文件。預設值:False

  • include_last_offset (bool, optional) – 請參閱模組初始化文件。預設值:False

  • padding_idx (int, optional) – 請參閱模組初始化文件。預設值:None

返回型別

EmbeddingBag

示例

>>> # FloatTensor containing pretrained weights
>>> weight = torch.FloatTensor([[1, 2.3, 3], [4, 5.1, 6.3]])
>>> embeddingbag = nn.EmbeddingBag.from_pretrained(weight)
>>> # Get embeddings for index 1
>>> input = torch.LongTensor([[1, 0]])
>>> embeddingbag(input)
tensor([[ 2.5000,  3.7000,  4.6500]])