Spec-Zone.ru › PyTorch 2

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

Tensor

Форма:

см. документацию в классе 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

Spec-Zone.ru

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