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