Spec-Zone.ru › PyTorch 2.14

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 также поддерживает передачу весов для каждого образца в качестве аргумента прямого прохода. Это масштабирует выходные данные Embedding перед выполнением взвешенного сокращения, заданного параметром mode. Если передан per_sample_weights, поддерживается только mode — "sum", который вычисляет взвешенную сумму согласно per_sample_weights.

Параметры:
  • num_embeddings (int) – размер словаря эмбеддингов
  • embedding_dim (int) – размерность каждого вектора эмбеддинга
  • max_norm (float, необязательно) – если задан, каждый вектор эмбеддинга с нормой больше max_norm перенормируется так, чтобы его норма стала равна max_norm.
  • norm_type (float, необязательно) – p в p-норме, вычисляемой для параметра max_norm. Значение по умолчанию — 2.
  • scale_grad_by_freq (bool, необязательно) – если задан, градиенты будут масштабироваться на величину, обратную частоте слов в мини-пакете. Значение по умолчанию — False. Примечание: этот параметр не поддерживается, если mode="max".
  • mode (str, необязательно) – "sum", "mean" или "max". Определяет способ сокращения пакета. "sum" вычисляет взвешенную сумму с учетом per_sample_weights. "mean" вычисляет среднее значение элементов пакета, а "max" — максимальное значение для каждого пакета. Значение по умолчанию: "mean"
  • sparse (bool, необязательно) – если True, градиент по отношению к матрице weight будет разреженным тензором. Дополнительные сведения о разреженных градиентах см. в разделе «Примечания». Примечание: этот параметр не поддерживается, если mode="max".
  • include_last_offset (bool, необязательно) – если True, размер offsets равен количеству пакетов + 1. Последний элемент — это размер входных данных или конечная позиция последнего пакета (последовательности). Это соответствует формату CSR. Игнорируется, если входные данные двумерные. Значение по умолчанию — False.
  • padding_idx (int, необязательно) – если задан, элементы с индексом 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, необязательно) – используется только, если input одномерный. offsets задает начальную позицию каждого пакета (последовательности) в input.
  • per_sample_weights (Tensor, необязательно) – тензор весов типа float/double либо None, указывающий, что все веса следует считать равными 1. Если задан, per_sample_weights должен иметь ту же форму, что и input, и рассматривается как имеющий те же offsets, если они не являются None. Поддерживается только для mode='sum'.
Возвращает:

Выходной тензор формы (B, embedding_dim).

Тип возвращаемого значения:

Tensor

Примечание

Несколько замечаний о input и offsets:

  • input и offsets должны иметь одинаковый тип: int или long
  • Если input — двумерный тензор формы (B, N), он рассматривается как B пакетов (последовательностей) фиксированной длины N, и возвращает B значений, агрегированных способом, зависящим от mode. В этом случае offsets игнорируется и должен быть равен None.
  • Если input — одномерный тензор формы (N), он рассматривается как конкатенация нескольких пакетов (последовательностей). offsets должен быть одномерным тензором, содержащим начальные позиции каждого пакета в input. Поэтому для offsets формы (B) тензор input будет рассматриваться как содержащий B пакетов. Для пустых пакетов (то есть имеющих нулевую длину) возвращаются векторы, заполненные нулями.
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) [источник]

Создает экземпляр EmbeddingBag из заданного двумерного FloatTensor.

Параметры:
  • embeddings (Tensor) – FloatTensor, содержащий веса EmbeddingBag. Первое измерение передается в EmbeddingBag как «num_embeddings», второе — как «embedding_dim».
  • freeze (bool, необязательно) – если True, тензор не обновляется в процессе обучения. Эквивалентно embeddingbag.weight.requires_grad = False. Значение по умолчанию: True
  • max_norm (float, необязательно) – см. документацию по инициализации модуля. Значение по умолчанию: None
  • norm_type (float, необязательно) – см. документацию по инициализации модуля. Значение по умолчанию — 2.
  • scale_grad_by_freq (bool, необязательно) – см. документацию по инициализации модуля. Значение по умолчанию — False.
  • mode (str, необязательно) – см. документацию по инициализации модуля. Значение по умолчанию: "mean"
  • sparse (bool, необязательно) – см. документацию по инициализации модуля. Значение по умолчанию: False.
  • include_last_offset (bool, необязательно) – см. документацию по инициализации модуля. Значение по умолчанию: False.
  • padding_idx (int, необязательно) – см. документацию по инициализации модуля. Значение по умолчанию: 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]])

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.nn.modules.sparse.EmbeddingBag.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API