Transformer
-
class torch.nn.Transformer(d_model=512, nhead=8, num_encoder_layers=6, num_decoder_layers=6, dim_feedforward=2048, dropout=0.1, activation=<function relu>, custom_encoder=None, custom_decoder=None, layer_norm_eps=1e-05, batch_first=False, norm_first=False, bias=True, device=None, dtype=None)[источник] -
Базовый слой трансформера.
Этот слой Transformer реализует исходную архитектуру Transformer, описанную в статье Внимание — это всё, что вам нужно. Этот слой предназначен для использования в качестве эталонной реализации, помогающей понять основы, поэтому по сравнению с более новыми архитектурами Transformer он обладает лишь ограниченным набором возможностей. Учитывая быстрый темп развития архитектур, подобных Transformer, рекомендуем изучить этот учебник, чтобы построить эффективный слой трансформера из базовых блоков или использовать библиотеки более высокого уровня из экосистемы PyTorch.
- Параметры:
-
- d_model (int) – количество признаков, ожидаемое во входных данных кодировщика/декодировщика (по умолчанию=512).
- nhead (int) – количество голов в моделях многоголового внимания (по умолчанию=8).
- num_encoder_layers (int) – количество подслоёв кодировщика в кодировщике (по умолчанию=6).
- num_decoder_layers (int) – количество подслоёв декодировщика в декодировщике (по умолчанию=6).
- dim_feedforward (int) – размерность модели сети прямого распространения (по умолчанию=2048).
- dropout (float) – значение dropout (по умолчанию=0.1).
- activation (str | Callable[[Tensor], Tensor]) – функция активации промежуточного слоя кодировщика/декодировщика; может быть строкой (“relu” или “gelu”) или унарной вызываемой функцией. По умолчанию: relu
- custom_encoder (Any | None) – пользовательский кодировщик (по умолчанию=None).
- custom_decoder (Any | None) – пользовательский декодировщик (по умолчанию=None).
- layer_norm_eps (float) – значение eps в компонентах нормализации слоя (по умолчанию=1e-5).
-
batch_first (bool) – Если
True, входные и выходные тензоры передаются в формате (batch, seq, feature). По умолчанию:False(seq, batch, feature). -
norm_first (bool) – если
True, слои кодировщика и декодировщика выполняют LayerNorm до других операций внимания и прямого распространения, иначе — после них. По умолчанию:False(после). -
bias (bool) – Если установлено значение
False, слоиLinearиLayerNormне будут обучать аддитивное смещение. По умолчанию:True.
Примеры
>>> transformer_model = nn.Transformer( ... nhead=16, num_encoder_layers=12, batch_first=True ... ) >>> src = torch.rand((32, 10, 512)) >>> tgt = torch.rand((32, 20, 512)) >>> out = transformer_model(src, tgt)
Примечание: полный пример применения модуля nn.Transformer для языковой модели на уровне слов доступен в pytorch/examples
-
forward(src, tgt, src_mask=None, tgt_mask=None, memory_mask=None, src_key_padding_mask=None, tgt_key_padding_mask=None, memory_key_padding_mask=None, src_is_causal=None, tgt_is_causal=None, memory_is_causal=False)[источник] -
Принимает и обрабатывает маскированные последовательности источника/цели.
Примечание
Если для любого из аргументов [src/tgt/memory]_mask передан логический тензор, позициям со значением
Trueзапрещено участвовать во внимании; это противоположно определениюattn_maskвtorch.nn.functional.scaled_dot_product_attention().- Параметры:
-
- src (Tensor) – последовательность для кодировщика (обязательный параметр).
- tgt (Tensor) – последовательность для декодировщика (обязательный параметр).
- src_mask (Tensor | None) – аддитивная маска для последовательности src (необязательный параметр).
- tgt_mask (Tensor | None) – аддитивная маска для последовательности tgt (необязательный параметр).
- memory_mask (Tensor | None) – аддитивная маска для выхода кодировщика (необязательный параметр).
- src_key_padding_mask (Tensor | None) – маска Tensor для ключей src в каждом элементе пакета (необязательный параметр).
- tgt_key_padding_mask (Tensor | None) – маска Tensor для ключей tgt в каждом элементе пакета (необязательный параметр).
- memory_key_padding_mask (Tensor | None) – маска Tensor для ключей памяти в каждом элементе пакета (необязательный параметр).
-
src_is_causal (bool | None) – Если задано, применяет причинную маску, как в
src_mask. По умолчанию:None; выполняется попытка обнаружить причинную маску. Предупреждение:src_is_causalуказывает, чтоsrc_maskявляется причинной маской. Неверные подсказки могут привести к некорректному выполнению, в том числе нарушить прямую и обратную совместимость. -
tgt_is_causal (bool | None) – Если задано, применяет причинную маску, как в
tgt_mask. По умолчанию:None; выполняется попытка обнаружить причинную маску. Предупреждение:tgt_is_causalуказывает, чтоtgt_maskявляется причинной маской. Неверные подсказки могут привести к некорректному выполнению, в том числе нарушить прямую и обратную совместимость. -
memory_is_causal (bool) – Если задано, применяет причинную маску, как в
memory_mask. По умолчанию:False. Предупреждение:memory_is_causalуказывает, чтоmemory_maskявляется причинной маской. Неверные подсказки могут привести к некорректному выполнению, в том числе нарушить прямую и обратную совместимость.
- Тип возвращаемого значения:
- Форма:
-
- src: для входных данных без пакета, если
batch_first=Falseили(N, S, E)еслиbatch_first=True. - tgt: для входных данных без пакета, если
batch_first=Falseили(N, T, E)еслиbatch_first=True. - src_mask: или .
- tgt_mask: или .
- memory_mask: .
- src_key_padding_mask: для входных данных без пакета, в противном случае .
- tgt_key_padding_mask: для входных данных без пакета, в противном случае .
- memory_key_padding_mask: для входных данных без пакета, в противном случае .
Примечание: [src/tgt/memory]_mask гарантирует, что позиции разрешено обращаться к немаскированным позициям. Если передан BoolTensor, позициям со значением
Trueзапрещено обращаться к другим позициям, а значенияFalseостаются без изменений. Если передан FloatTensor, он будет добавлен к весу внимания. [src/tgt/memory]_key_padding_mask указывает элементы ключа, которые следует игнорировать при вычислении внимания. Если передан BoolTensor, позиции со значениемTrueбудут игнорироваться, а позиции со значениемFalseостанутся без изменений.- output: для входных данных без пакета, если
batch_first=Falseили(N, T, E)еслиbatch_first=True.
Примечание: из-за архитектуры многоголового внимания в модели трансформера длина выходной последовательности трансформера совпадает с длиной входной последовательности (то есть целевой последовательности) декодировщика.
где — длина исходной последовательности, — длина целевой последовательности, — размер пакета, — количество признаков
- src: для входных данных без пакета, если
Примеры
>>> output = transformer_model( ... src, tgt, src_mask=src_mask, tgt_mask=tgt_mask ... )
-
static generate_square_subsequent_mask(sz, device=None, dtype=None)[источник] -
Создаёт квадратную причинную маску для последовательности.
Маскированные позиции заполняются значением float(‘-inf’). Немаскированные позиции заполняются значением float(0.0).
- Тип возвращаемого значения:
© 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.Transformer.html