Spec-Zone.ru › PyTorch 2.14

TransformerEncoderLayer

class torch.nn.modules.transformer.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 состоит из механизма self-attention и нейросети прямого распространения.

Этот 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 не переданы
  • два экземпляра LayerNorm имеют согласованное значение eps (обычно это выполняется, если только вызывающая сторона не изменила один из них вручную, не изменив другой)

При использовании оптимизированной реализации для 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.modules.transformer.TransformerEncoderLayer.html

Spec-Zone.ru

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