Spec-Zone.ru › PyTorch 1

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 (Тензор) – обученные веса модуля формы (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 (Тензор) – Тензор, содержащий мешки индексов в матрице встраиваний.
  • offsets (Тензор, опционально) – Используется только тогда, когда input имеет размерность 1D. offsets определяет стартовую позицию индекса каждого мешка (последовательности) в input.
  • per_sample_weights (Тензор, опционально) – тензор весов типа float / double или None, чтобы указать, что все веса должны быть 1. Если указано, per_sample_weights должен иметь точно такую же форму, как input, и обрабатывается как имеющий те же offsets, если они не None. Поддерживается только для mode='sum'.
Возвращает:

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

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

Тензор

Примечание

Несколько примечаний о 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) будут иметь возвращенные векторы, заполненные нулями.
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/1.13/generated/torch.nn.EmbeddingBag.html

Spec-Zone.ru

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