Spec-Zone.ru › PyTorch 2

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) [source]

Вычисляет суммы или средние значения «мешков» встраиваний без создания промежуточных встраиваний.

Для мешков постоянной длины, без 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 также поддерживает весовые коэффициенты для каждого образца в качестве аргумента для прохода вперёд. Это масштабирует выход 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 имеет один дополнительный элемент, где последний элемент эквивалентен размеру indices. Это соответствует формату CSR.
  • 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) [source]

Прямой проход EmbeddingBag.

Параметры
  • input (Tensor) – Тензор, содержащий мешки индексов в матрице встраиваний.
  • offsets (Tensor, необязательно) – Используется только при input равно 1D. offsets определяет начальную позицию индекса каждого мешка (последовательности) в input.
  • per_sample_weights (Tensor, необязательно) – тензор весов с плавающей запятой / двойной точностью или None, чтобы указать, что все веса должны быть приняты как 1. Если задано, per_sample_weights должен иметь ровно такую же форму, как вход, и рассматривается как имеющий те же offsets, если они не являются None. Поддерживается только для mode='sum'.
Возвращает

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

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

Tensor

Примечание

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

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

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

Параметры
  • embeddings (Tensor) – FloatTensor, содержащий веса для EmbeddingBag. Первое измерение передаётся в 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.
  • 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]])

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

Spec-Zone.ru

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