Трансформер
-
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 для ключей памяти на пакет (необязательно).
- Тип возвращаемого значения:
- Форма:
-
- 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 гарантирует, что позиция i может обращаться к не замаскированным позициям. Если предоставлен ByteTensor, позиции, отличные от нуля, не могут быть обработаны, а нулевые позиции останутся без изменений. Если предоставлен BoolTensor, позиции со значением
Trueне могут быть обработаны, а значенияFalseостанутся без изменений. Если предоставлен FloatTensor, он будет добавлен к весу внимания. [src/tgt/memory]_key_padding_mask указывает элементы ключа, которые должны игнорироваться вниманием. Если предоставлен ByteTensor, позиции, отличные от нуля, будут игнорироваться, а нулевые позиции останутся без изменений. Если предоставлен BoolTensor, позиции со значениемTrueбудут игнорироваться, а позиции со значениемFalseостанутся без изменений.- вывод: для необработанного ввода, если
batch_first=Falseили(N, T, E)еслиbatch_first=True.
Примечание: из-за архитектуры многоголового внимания в модели трансформатора длина выходной последовательности трансформатора совпадает с длиной входной последовательности (т.е. целевой) декодера.
где S - длина исходной последовательности, T - длина целевой последовательности, N - размер пакета, E - количество признаков
- src: для необработанного ввода, если
Примеры
>>> 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).
- Тип возвращаемого значения:
-
© 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