Spec-Zone.ru › PyTorch 2

Встраивание

class torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False, _weight=None, _freeze=False, device=None, dtype=None) [source]

Простая таблица поиска, которая хранит вложения фиксированного словаря и размера.

Этот модуль часто используется для хранения вложений слов и их извлечения по индексам. Входом в модуль является список индексов, а выходом — соответствующие вложения слов.

Параметры
  • num_embeddings (int) – размер словаря вложений
  • embedding_dim (int) – размер каждого вектора вложения
  • padding_idx (int, необязательно) – Если указано, записи по padding_idx не вносят вклад в градиент; следовательно, вектор вложения по padding_idx не обновляется во время обучения, т.е. он остается фиксированным «заполнителем». Для только что созданного вложения вектор вложения по padding_idx по умолчанию будет состоять из нулей, но может быть обновлен до другого значения для использования в качестве вектора заполнения.
  • max_norm (float, необязательно) – Если задано, каждый вектор вложения с нормой, большей чем max_norm, перенормируется для получения нормы max_norm.
  • norm_type (float, необязательно) – p в p-норме для вычисления для опции max_norm. Значение по умолчанию 2.
  • scale_grad_by_freq (bool, необязательно) – Если задано, это приведет к масштабированию градиентов обратной частотой слов в мини-пачке. Значение по умолчанию False.
  • sparse (bool, необязательно) – Если True, градиент по отношению к weight матрице будет разреженной тензором. Подробнее о разреженных градиентах см. в примечаниях.
Переменные

weight (Tensor) – обучаемые веса модуля формы (num_embeddings, embedding_dim), инициализированные из N(0,1)\mathcal{N}(0, 1)

Форма:
  • Вход: (∗)(*), IntTensor или LongTensor произвольной формы, содержащий индексы для извлечения
  • Выход: (∗,H)(*, H), где * — форма входных данных, а H=embedding_dimH=\text{embedding\_dim}

Примечание

Обратите внимание, что только ограниченное количество оптимизаторов поддерживает разреженные градиенты: в настоящее время это optim.SGD (CUDA и CPU), optim.SparseAdam (CUDA и CPU) и optim.Adagrad (CPU)

Примечание

Когда max_norm не None, метод forward Embedding будет изменять тензор weight на месте. Поскольку тензоры, необходимые для вычислений градиента, не могут быть изменены на месте, для выполнения дифференцируемой операции над Embedding.weight перед вызовом метода forward Embedding требуется клонирование Embedding.weight когда max_norm не None. Например:

n, d, m = 3, 5, 7
embedding = nn.Embedding(n, d, max_norm=True)
W = torch.randn((m, d), requires_grad=True)
idx = torch.tensor([1, 2])
a = embedding.weight.clone() @ W.t()  # weight must be cloned for this to be differentiable
b = embedding(idx) @ W.t()  # modifies weight in-place
out = (a.unsqueeze(0) + b.unsqueeze(1))
loss = out.sigmoid().prod()
loss.backward()

Примеры:

>>> # an Embedding module containing 10 tensors of size 3
>>> embedding = nn.Embedding(10, 3)
>>> # a batch of 2 samples of 4 indices each
>>> input = torch.LongTensor([[1, 2, 4, 5], [4, 3, 2, 9]])
>>> embedding(input)
tensor([[[-0.0251, -1.6902,  0.7172],
         [-0.6431,  0.0748,  0.6969],
         [ 1.4970,  1.3448, -0.9685],
         [-0.3677, -2.7265, -0.1685]],

        [[ 1.4970,  1.3448, -0.9685],
         [ 0.4362, -0.4004,  0.9400],
         [-0.6431,  0.0748,  0.6969],
         [ 0.9124, -2.3616,  1.1151]]])


>>> # example with padding_idx
>>> embedding = nn.Embedding(10, 3, padding_idx=0)
>>> input = torch.LongTensor([[0, 2, 0, 5]])
>>> embedding(input)
tensor([[[ 0.0000,  0.0000,  0.0000],
         [ 0.1535, -2.0309,  0.9315],
         [ 0.0000,  0.0000,  0.0000],
         [-0.1655,  0.9897,  0.0635]]])

>>> # example of changing `pad` vector
>>> padding_idx = 0
>>> embedding = nn.Embedding(3, 3, padding_idx=padding_idx)
>>> embedding.weight
Parameter containing:
tensor([[ 0.0000,  0.0000,  0.0000],
        [-0.7895, -0.7089, -0.0364],
        [ 0.6778,  0.5803,  0.2678]], requires_grad=True)
>>> with torch.no_grad():
...     embedding.weight[padding_idx] = torch.ones(3)
>>> embedding.weight
Parameter containing:
tensor([[ 1.0000,  1.0000,  1.0000],
        [-0.7895, -0.7089, -0.0364],
        [ 0.6778,  0.5803,  0.2678]], requires_grad=True)
classmethod from_pretrained(embeddings, freeze=True, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False) [source]

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

Параметры
  • embeddings (Tensor) – FloatTensor, содержащий веса для Embedding. Первое измерение передается Embedding в качестве num_embeddings, второе — как embedding_dim.
  • freeze (bool, необязательно) – Если True, тензор не обновляется в процессе обучения. Эквивалентно embedding.weight.requires_grad = False. Значение по умолчанию: True
  • padding_idx (int, необязательно) – Если указано, записи по padding_idx не вносят вклад в градиент; следовательно, вектор вложения по padding_idx не обновляется во время обучения, т.е. он остается фиксированным «заполнителем».
  • max_norm (float, необязательно) – См. документацию к инициализации модуля.
  • norm_type (float, необязательно) – См. документацию к инициализации модуля. Значение по умолчанию 2.
  • scale_grad_by_freq (bool, необязательно) – См. документацию к инициализации модуля. Значение по умолчанию False.
  • sparse (bool, необязательно) – См. документацию к инициализации модуля.

Примеры:

>>> # FloatTensor containing pretrained weights
>>> weight = torch.FloatTensor([[1, 2.3, 3], [4, 5.1, 6.3]])
>>> embedding = nn.Embedding.from_pretrained(weight)
>>> # Get embeddings for index 1
>>> input = torch.LongTensor([1])
>>> embedding(input)
tensor([[ 4.0000,  5.1000,  6.3000]])

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

Spec-Zone.ru

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