Spec-Zone.ru › PyTorch 1

Встраивание

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, device=None, dtype=None) [source]

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

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

Параметры:
  • num_embeddings (int) – размер словаря вложений
  • embedding_dim (int) – размер каждого векторного представления
  • padding_idx (int, необязательно) – Если указано, записи по padding_idx не вносят вклад в градиент; следовательно, вектор вложения по padding_idx не обновляется во время обучения, то есть он остается фиксированным «заполнителем». Для вновь созданного Embedding вектор вложения по 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/1.13/generated/torch.nn.Embedding.html

Spec-Zone.ru

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