РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
358 of 769 menu

Класс nn.Embedding

Класс nn.Embedding представляет собой модуль, который хранит таблицу обучаемых векторов (эмбеддингов) фиксированного размера. Он используется для преобразования дискретных индексов (например, слов или категорий) в плотные непрерывные векторы. Первым параметром передается количество записей в словаре (num_embeddings), вторым - размерность каждого вектора (embedding_dim). Дополнительно можно указать параметр padding_idx для индекса, который будет игнорироваться при обновлении, или max_norm для нормирования векторов.

Синтаксис

torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False)

Пример с базовым использованием

Создадим слой эмбеддингов для словаря из 10 слов, каждый вектор размерности 3, и получим представление для индексов 2 и 5:

import torch import torch.nn as nn embedding = nn.Embedding(num_embeddings=10, embedding_dim=3) torch.manual_seed(0) indices = torch.tensor([2, 5]) res = embedding(indices) print(res)

Результат выполнения кода:

tensor([ [-0.0879, -0.7160, -0.2657], [-0.7109, -0.5042, -0.5213], ], grad_fn=<EmbeddingBackward0>)

Пример с параметром padding_idx

Создадим эмбеддинг, где индекс 0 будет игнорироваться при обучении (вектор для этого индекса останется нулевым):

import torch import torch.nn as nn embedding = nn.Embedding(num_embeddings=5, embedding_dim=4, padding_idx=0) torch.manual_seed(0) indices = torch.tensor([0, 1, 2]) res = embedding(indices) print(res)

Результат выполнения кода:

tensor([ [ 0.0000, 0.0000, 0.0000, 0.0000], [-0.0879, -0.7160, -0.2657, -0.3729], [-0.3805, -0.5520, -0.3736, 0.5322], ], grad_fn=<EmbeddingBackward0>)

Пример с нормированием векторов

Используем параметр max_norm для ограничения L2-нормы векторов значением 1.0:

import torch import torch.nn as nn embedding = nn.Embedding(num_embeddings=5, embedding_dim=3, max_norm=1.0) torch.manual_seed(0) indices = torch.tensor([1, 3]) res = embedding(indices) print(res) print(torch.norm(res, dim=1))

Результат выполнения кода:

tensor([ [-0.1104, -0.8991, -0.3337], [ 0.0058, -0.1792, -0.4909], ], grad_fn=<EmbeddingBackward0>) tensor([0.9659, 0.5227], grad_fn=<NormBackward1>)

Пример работы со слоем в модели

Создадим простую модель, которая использует эмбеддинги для обработки последовательности индексов:

import torch import torch.nn as nn class SimpleModel(nn.Module): def __init__(self): super().__init__() self.embedding = nn.Embedding(10, 5) self.fc = nn.Linear(5, 2) def forward(self, x): x = self.embedding(x) x = x.mean(dim=1) return self.fc(x) torch.manual_seed(0) model = SimpleModel() indices = torch.tensor([[1, 2, 3], [4, 5, 6]]) res = model(indices) print(res)

Результат выполнения кода:

tensor([ [-0.5461, 0.2154], [ 0.5602, -0.4681], ], grad_fn=<AddmmBackward0>)

Смотрите также

  • класс nn.EmbeddingBag,
    который агрегирует эмбеддинги по сумме или среднему
  • класс nn.Linear,
    который применяет линейное преобразование к входным данным
  • функцию nn.Dropout,
    которая применяется для регуляризации после эмбеддингов
  • слой nn.LayerNorm,
    который нормализует выходы эмбеддингов для стабильности обучения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить