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)[source] -
TransformerEncoderLayer состоит из самовнимания (self-attn) и свёрточной сети прямого отображения (feedforward network). Этот стандартный слой кодировщика основан на статье «Attention Is All You Need». Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Lukasz Kaiser и Illia Polosukhin. 2017. Внимание — это всё, что вам нужно. В «Advances in Neural Information Processing Systems», страницы 6000-6010. Пользователи могут изменить или реализовать его по-другому в ходе применения.
TransformerEncoderLayer может обрабатывать как традиционные входные данные torch.tensor, так и входные данные Nested Tensor. Ожидается, что производные классы также будут поддерживать оба формата ввода. (Не все комбинации входов в настоящее время поддерживаются TransformerEncoderLayer, так как Nested Tensor находится на стадии прототипа.)
Если вы реализуете пользовательский слой, вы можете сделать это, производя его либо от класса Module, либо от TransformerEncoderLayer. Если ваш пользовательский слой поддерживает как torch.Tensor, так и Nested Tensor в качестве входов, сделайте его производным классом от TransformerEncoderLayer. Если ваш пользовательский слой поддерживает только входные данные torch.Tensor, сделайте его производным классом от Module.
- Параметры
-
- d_model (int) – количество ожидаемых признаков на входе (необходимо).
- nhead (int) – количество головок (heads) в многоголовых моделях внимания (необходимо).
- dim_feedforward (int) – размер модели свёрточной сети прямого отображения (по умолчанию 2048).
- dropout (float) – значение дропаута (по умолчанию 0,1).
- activation (Union[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)
- Быстрый путь (Fast path):
-
forward() будет использовать специальную оптимизированную реализацию, описанную в FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness, если выполнены все следующие условия:
- Либо вычисления с обратным градиентом отключены (используя
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одинаковое (это будет естественным образом, если пользователь не изменил одно значение без изменения другого)
Если оптимизированная реализация используется, NestedTensor может быть передан для
src, чтобы представить заполнение более эффективно, чем с помощью маски заполнения. В этом случае будет возвращен NestedTensor, и можно ожидать дополнительного ускорения, пропорционального доле входных данных, которые являются заполнением. - Либо вычисления с обратным градиентом отключены (используя
-
forward(src, src_mask=None, src_key_padding_mask=None, is_causal=False)[source] -
Пропускает вход через слой кодировщика.
- Параметры
-
- src (Tensor) – последовательность для слоя кодировщика (необходимо).
- src_mask (Optional[Tensor]) – маска для последовательности src (необязательно).
- src_key_padding_mask (Optional[Tensor]) – маска для ключей src по пакету (необязательно).
-
is_causal (bool) – Если указано, применяется маска причинности как
src mask. По умолчанию:False. Предупреждение:is_causalдаёт подсказку, чтоsrc_maskявляется маской причинности. Неправильные подсказки могут привести к неправильной работе, включая совместимость вперёд и назад.
- Тип возвращаемого значения
- Форма:
-
см. документацию в классе Transformer.
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.nn.TransformerEncoderLayer.html