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является причинной маской. Неверные подсказки могут привести к некорректному выполнению, в том числе нарушить прямую и обратную совместимость.
- Тип возвращаемого значения:
- Форма:
-
см. документацию по
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