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


Python PyTorch embedding_bag用法及代碼示例


本文簡要介紹python語言中 torch.nn.functional.embedding_bag 的用法。

用法:

torch.nn.functional.embedding_bag(input, weight, offsets=None, max_norm=None, norm_type=2, scale_grad_by_freq=False, mode='mean', sparse=False, per_sample_weights=None, include_last_offset=False, padding_idx=None)

參數

  • input(LongTensor) -將包含索引袋的張量包含到嵌入矩陣中

  • weight(Tensor) -行數等於最大可能索引 + 1 且列數等於嵌入大小的嵌入矩陣

  • offsets(LongTensor,可選的) -僅在input 為 1D 時使用。 offsets 確定 input 中每個包(序列)的起始索引位置。

  • max_norm(float,可選的) -如果給定,每個範數大於 max_norm 的嵌入向量將被重新歸一化為範數 max_norm 。注意:這將就地修改weight

  • norm_type(float,可選的) -p -norm 中的 p 用於計算 max_norm 選項。默認 2

  • scale_grad_by_freq(布爾值,可選的) -如果給定,這將通過小批量中單詞頻率的倒數來縮放梯度。默認 False 。注意:mode="max" 時不支持此選項。

  • mode(string,可選的) -"sum""mean""max" 。指定減少袋子的方式。默認值:"mean"

  • sparse(bool,可選的) -if True ,梯度 w.r.t. weight 將是一個稀疏張量。有關稀疏梯度的更多詳細信息,請參閱 torch.nn.Embedding 下的注釋。注意:mode="max" 時不支持此選項。

  • per_sample_weights(Tensor,可選的) -浮點/雙權重的張量,或 None 表示所有權重應為 1。如果指定,per_sample_weights 必須具有與輸入完全相同的形狀,並且被視為具有相同的 offsets,如果不是沒有。

  • include_last_offset(bool,可選的) -如果 True ,則偏移量的大小等於包的數量 + 1。最後一個元素是輸入的大小,或者是最後一個包(序列)的結束索引位置。

  • padding_idx(int,可選的) -如果指定,padding_idx 處的條目不會影響梯度;因此,padding_idx 處的嵌入向量在訓練期間不會更新,即它保持為固定的 “pad”。請注意,padding_idx 處的嵌入向量不包括在縮減範圍內。

計算嵌入的 bags 的總和、均值或最大值,而不實例化中間嵌入。

有關詳細信息,請參閱 torch.nn.EmbeddingBag

注意

當給定 CUDA 設備上的張量時,此操作可能會產生不確定的梯度。有關詳細信息,請參閱重現性。

形狀:
  • input(長張量)和offsets(長張量,可選)

    • 如果 input 是形狀 (B, N) 的 2D,它將被視為每個固定長度 NB 袋子(序列),這將返回 B 值聚合的方式取決於 mode . offsets 被忽略,在這種情況下需要為 None

    • 如果 input 是形狀 (N) 的一維,它將被視為多個包(序列)的串聯。 offsets 必須是一維張量,其中包含 input 中每個包的起始索引位置。因此,對於形狀為 (B)offsetsinput 將被視為具有 B 包。空包(即長度為 0)將返回由零填充的向量。

  • weight(張量):形狀(num_embeddings, embedding_dim)模塊的可學習權重

  • per_sample_weights(張量,可選)。具有與 input 相同的形狀。

  • output:形狀(B, embedding_dim)的聚合嵌入值

例子:

>>> # an Embedding module containing 10 tensors of size 3
>>> embedding_matrix = torch.rand(10, 3)
>>> # a batch of 2 samples of 4 indices each
>>> input = torch.tensor([1,2,4,5,4,3,2,9])
>>> offsets = torch.tensor([0,4])
>>> F.embedding_bag(input, embedding_matrix, offsets)
tensor([[ 0.3397,  0.3552,  0.5545],
        [ 0.5893,  0.4386,  0.5882]])

>>> # example with padding_idx
>>> embedding_matrix = torch.rand(10, 3)
>>> input = torch.tensor([2, 2, 2, 2, 4, 3, 2, 9])
>>> offsets = torch.tensor([0,4])
>>> F.embedding_bag(input, embedding_matrix, offsets, padding_idx=2, mode='sum')
tensor([[ 0.0000,  0.0000,  0.0000],
        [-0.7082,  3.2145, -2.6251]])

相關用法


注:本文由純淨天空篩選整理自pytorch.org大神的英文原創作品 torch.nn.functional.embedding_bag。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。