Spec-Zone.ru › PyTorch 2.14

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) [исходный код]

Вычисляет суммы или средние значения «наборов» эмбеддингов, не создавая промежуточные эмбеддинги.

Для наборов постоянной длины, без 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.EmbeddingBag.html

Spec-Zone.ru

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