Spec-Zone.ru › PyTorch 1

Трансформер

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, device=None, dtype=None) [source]

Модель трансформера. Пользователь может изменять атрибуты по мере необходимости. Архитектура основана на статье «Внимание — это всё, что вам нужно». Ашиш Васвани, Ноам Шазер, Ники Пармар, Якоб Уцкореит, Ллион Джонс, Айдан Н. Гомес, Лукаш Кайзер и Ильиа Полусухин. 2017. Внимание — это все, что вам нужно. В Трудах конференции по нейронным сетям обработки информации, страницы 6000-6010.

Параметры:
  • d_model (int) – количество ожидаемых признаков в входных данных кодера/декодера (по умолчанию=512).
  • nhead (int) – количество голосов в моделях многоголового внимания (по умолчанию=8).
  • num_encoder_layers (int) – количество подслоев кодера в кодере (по умолчанию=6).
  • num_decoder_layers (int) – количество подслоев декодера в декодере (по умолчанию=6).
  • dim_feedforward (int) – размер модели нейронной сети прямого отображения (по умолчанию=2048).
  • dropout (float) – значение дропаута (по умолчанию=0.1).
  • activation (Union[str, Callable[[Tensor], Tensor]]) – функция активации промежуточного слоя кодера/декодера, может быть строкой (“relu” или “gelu”) или унарной вызываемой функцией. По умолчанию: relu
  • custom_encoder (Optional[Any]) – пользовательский кодер (по умолчанию=None).
  • custom_decoder (Optional[Any]) – пользовательский декодер (по умолчанию=None).
  • layer_norm_eps (float) – значение eps в компонентах нормализации слоев (по умолчанию=1e-5).
  • batch_first (bool) – Если True, то входные и выходные тензоры предоставляются как (batch, seq, feature). По умолчанию: False (seq, batch, feature).
  • norm_first (bool) – если True, слои кодера и декодера будут выполнять LayerNorms до других операций внимания и прямого отображения, в противном случае после. По умолчанию: False (после).
Примеры::
>>> transformer_model = nn.Transformer(nhead=16, num_encoder_layers=12)
>>> src = torch.rand((10, 32, 512))
>>> tgt = torch.rand((20, 32, 512))
>>> out = transformer_model(src, tgt)

Примечание: Полный пример применения модуля nn.Transformer для модели языка слов доступен по адресу https://github.com/pytorch/examples/tree/master/word_language_model

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) [source]

Принимает и обрабатывает маскированные исходные/целевые последовательности.

Параметры:
  • src (Tensor) – последовательность для кодировщика (обязательно).
  • tgt (Tensor) – последовательность для декодера (обязательно).
  • src_mask (Optional[Tensor]) – аддитивная маска для исходной последовательности (необязательно).
  • tgt_mask (Optional[Tensor]) – аддитивная маска для целевой последовательности (необязательно).
  • memory_mask (Optional[Tensor]) – аддитивная маска для вывода кодировщика (необязательно).
  • src_key_padding_mask (Optional[Tensor]) – маска ByteTensor для ключей src на пакет (необязательно).
  • tgt_key_padding_mask (Optional[Tensor]) – маска ByteTensor для ключей tgt на пакет (необязательно).
  • memory_key_padding_mask (Optional[Tensor]) – маска ByteTensor для ключей памяти на пакет (необязательно).
Тип возвращаемого значения:

Tensor

Форма:
  • src: (S,E)(S, E) для необработанного ввода, (S,N,E)(S, N, E) если batch_first=False или (N, S, E) если batch_first=True.
  • tgt: (T,E)(T, E) для необработанного ввода, (T,N,E)(T, N, E) если batch_first=False или (N, T, E) если batch_first=True.
  • src_mask: (S,S)(S, S) или (N⋅num_heads,S,S)(N\cdot\text{num\_heads}, S, S).
  • tgt_mask: (T,T)(T, T) или (N⋅num_heads,T,T)(N\cdot\text{num\_heads}, T, T).
  • memory_mask: (T,S)(T, S).
  • src_key_padding_mask: (S)(S) для необработанного ввода, в противном случае (N,S)(N, S).
  • tgt_key_padding_mask: (T)(T) для необработанного ввода, в противном случае (N,T)(N, T).
  • memory_key_padding_mask: (S)(S) для необработанного ввода, в противном случае (N,S)(N, S).

Примечание: [src/tgt/memory]_mask гарантирует, что позиция i может обращаться к не замаскированным позициям. Если предоставлен ByteTensor, позиции, отличные от нуля, не могут быть обработаны, а нулевые позиции останутся без изменений. Если предоставлен BoolTensor, позиции со значением True не могут быть обработаны, а значения False останутся без изменений. Если предоставлен FloatTensor, он будет добавлен к весу внимания. [src/tgt/memory]_key_padding_mask указывает элементы ключа, которые должны игнорироваться вниманием. Если предоставлен ByteTensor, позиции, отличные от нуля, будут игнорироваться, а нулевые позиции останутся без изменений. Если предоставлен BoolTensor, позиции со значением True будут игнорироваться, а позиции со значением False останутся без изменений.

  • вывод: (T,E)(T, E) для необработанного ввода, (T,N,E)(T, N, E) если batch_first=False или (N, T, E) если batch_first=True.

Примечание: из-за архитектуры многоголового внимания в модели трансформатора длина выходной последовательности трансформатора совпадает с длиной входной последовательности (т.е. целевой) декодера.

где S - длина исходной последовательности, T - длина целевой последовательности, N - размер пакета, E - количество признаков

Примеры

>>> output = transformer_model(src, tgt, src_mask=src_mask, tgt_mask=tgt_mask)
static generate_square_subsequent_mask(sz, device='cpu') [source]

Создает квадратную маску для последовательности. Замаскированные позиции заполняются float('-inf'). Незамаскированные позиции заполняются float(0.0).

Тип возвращаемого значения:

Tensor

© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/1.13/generated/torch.nn.Transformer.html

Spec-Zone.ru

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