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)инициализированные из .
Примеры:
>>> # 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.
- Тип возвращаемого значения:
Примеры:
>>> # 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