Spec-Zone.ru › PyTorch 2.14

TransformerEncoderLayer

class torch.nn.TransformerEncoderLayer(d_model, nhead, dim_feedforward=2048, dropout=0.1, activation=<function relu>, layer_norm_eps=1e-05, batch_first=False, norm_first=False, bias=True, device=None, dtype=None) [исходный код]

TransformerEncoderLayer состоит из слоя самовнимания и нейронной сети прямого распространения.

TransformerEncoderLayer реализует исходную архитектуру, описанную в статье Attention Is All You Need. Этот слой предназначен для использования в качестве эталонной реализации, помогающей понять основы, поэтому он обладает лишь ограниченным набором возможностей по сравнению с более новыми архитектурами Transformer. Учитывая быстрые темпы развития архитектур, подобных Transformer, рекомендуем изучить этот учебный материал, чтобы создавать эффективные слои из базовых компонентов ядра или использовать библиотеки более высокого уровня из экосистемы PyTorch.

TransformerEncoderLayer может обрабатывать как традиционные входные данные torch.tensor, так и входные данные типа Nested Tensor. Производные классы должны аналогичным образом принимать оба формата входных данных. (В настоящее время TransformerEncoderLayer поддерживает не все сочетания входных данных, пока Nested Tensor находится на стадии прототипа.)

Если вы реализуете пользовательский слой, его можно унаследовать от класса Module или TransformerEncoderLayer. Если ваш пользовательский слой поддерживает входные данные как torch.Tensors, так и Nested Tensors, создайте его реализацию как производный класс TransformerEncoderLayer. Если ваш пользовательский слой поддерживает только входные данные torch.Tensor, создайте его реализацию как производный класс Module.

Параметры:
  • d_model (int) – количество признаков, ожидаемое на входе (обязательный параметр).
  • nhead (int) – количество голов в модели с многоголовым вниманием (обязательный параметр).
  • dim_feedforward (int) – размерность модели нейронной сети прямого распространения (по умолчанию = 2048).
  • dropout (float) – значение dropout (по умолчанию = 0.1).
  • activation (str | Callable[[Tensor], Tensor]) – функция активации промежуточного слоя: строка (“relu” или “gelu”) либо унарный вызываемый объект. По умолчанию: relu
  • layer_norm_eps (float) – значение eps в компонентах нормализации слоя (по умолчанию = 1e-5).
  • batch_first (bool) – Если True, входные и выходные тензоры передаются в формате (batch, seq, feature). По умолчанию: False (seq, batch, feature).
  • norm_first (bool) – если True, нормализация слоя выполняется перед операциями внимания и прямого распространения соответственно. В противном случае она выполняется после них. По умолчанию: False (после).
  • bias (bool) – Если установлено значение False, слои Linear и LayerNorm не будут обучать аддитивное смещение. По умолчанию: True.

Примеры

>>> encoder_layer = nn.TransformerEncoderLayer(d_model=512, nhead=8)
>>> src = torch.rand(10, 32, 512)
>>> out = encoder_layer(src)
Alternatively, when batch_first is True:
>>> encoder_layer = nn.TransformerEncoderLayer(
...     d_model=512, nhead=8, batch_first=True
... )
>>> src = torch.rand(32, 10, 512)
>>> out = encoder_layer(src)
Быстрый путь:

forward() использует специальную оптимизированную реализацию, описанную в статье FlashAttention: быстрый и эффективный по памяти точный механизм внимания с учетом операций ввода-вывода, если выполнены все следующие условия:

  • Автоматическое дифференцирование отключено (с помощью torch.inference_mode или torch.no_grad) либо ни один аргумент-тензор requires_grad
  • обучение отключено (с помощью .eval())
  • batch_first имеет значение True, а входные данные представлены в пакетном формате (то есть src.dim() == 3)
  • функция активации — одна из следующих: "relu", "gelu", torch.functional.relu или torch.functional.gelu
  • передан не более чем один из аргументов src_mask и src_key_padding_mask
  • если src — это NestedTensor, аргументы src_mask и src_key_padding_mask не переданы
  • значения eps у двух экземпляров LayerNorm согласованы (так будет, если только вызывающий код вручную не изменил один из них, не изменив другой)

При использовании оптимизированной реализации для src можно передать NestedTensor, чтобы представлять дополнение более эффективно, чем с помощью маски дополнения. В этом случае будет возвращен NestedTensor, а ускорение будет пропорционально доле дополнения во входных данных.

forward(src, src_mask=None, src_key_padding_mask=None, is_causal=False) [исходный код]

Передает входные данные через слой кодировщика.

Параметры:
  • src (Tensor) – последовательность для слоя кодировщика (обязательный параметр).
  • src_mask (Tensor | None) – маска для последовательности src (необязательный параметр).
  • src_key_padding_mask (Tensor | None) – маска для ключей src в каждом элементе пакета (необязательный параметр).
  • is_causal (bool) – Если указано, применяется причинная маска, как src mask. По умолчанию: False. Предупреждение: is_causal служит подсказкой о том, что src_mask является причинной маской. Неверные подсказки могут привести к некорректному выполнению, в том числе к проблемам обратной и прямой совместимости.
Тип возвращаемого значения:

Tensor

Форма:

см. документацию по Transformer.

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

Spec-Zone.ru

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