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), инициализированные из .
Примеры:
>>> # 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). - Тип возвращаемого значения
Примечание
Несколько замечаний по поводу
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.
- Тип возвращаемого значения
Примеры:
>>> # 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