РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
365 of 769 menu

Класс TransformerDecoderLayer

Класс TransformerDecoderLayer реализует один слой стандартного декодера трансформера. Он принимает на вход последовательность, обрабатывает её через механизм самовнимания, затем через механизм перекрёстного внимания с учётом выходов энкодера, после чего пропускает через полносвязную сеть прямого распространения. Слой поддерживает маскирование, выпадающие слои, предварительную нормализацию и другие настройки.

Синтаксис

torch.nn.TransformerDecoderLayer( d_model, nhead, dim_feedforward=2048, dropout=0.1, activation='relu', layer_norm_eps=1e-5, batch_first=False, norm_first=False, bias=True, dtype=None, device=None )

Основные параметры конструктора:

  • d_model - размерность признакового пространства;
  • nhead - количество голов внимания;
  • dim_feedforward - размерность скрытого слоя полносвязной сети;
  • dropout - вероятность выпадения нейронов;
  • activation - функция активации ('relu' или 'gelu');
  • layer_norm_eps - эпсилон для слоевой нормализации;
  • batch_first - если True, то размерности (batch, seq, feature);
  • norm_first - если True, то нормализация применяется до основных операций.

Пример

Создадим слой декодера трансформера с размерностью признаков 512 и восемью головами внимания:

import torch layer = torch.nn.TransformerDecoderLayer( d_model=512, nhead=8, dim_feedforward=2048, dropout=0.1 ) print(layer)

Результат выполнения кода:

TransformerDecoderLayer( (self_attn): MultiheadAttention( (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True) ) (multihead_attn): MultiheadAttention( (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True) ) (linear1): Linear(in_features=512, out_features=2048, bias=True) (dropout): Dropout(p=0.1, inplace=False) (linear2): Linear(in_features=2048, out_features=512, bias=True) (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True) (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True) (norm3): LayerNorm((512,), eps=1e-05, elementwise_affine=True) (dropout1): Dropout(p=0.1, inplace=False) (dropout2): Dropout(p=0.1, inplace=False) (dropout3): Dropout(p=0.1, inplace=False) )

Пример

Применим слой декодера к случайным данным в формате (seq, batch, feature):

import torch torch.manual_seed(0) layer = torch.nn.TransformerDecoderLayer( d_model=512, nhead=8 ) tgt = torch.rand(10, 2, 512) # (seq_len, batch, features) memory = torch.rand(15, 2, 512) # (seq_len, batch, features) res = layer(tgt, memory) print(res.shape)

Результат выполнения кода:

torch.Size([10, 2, 512])

Пример

Используем слой с масками для предотвращения подсматривания в будущее:

import torch torch.manual_seed(0) layer = torch.nn.TransformerDecoderLayer( d_model=512, nhead=8 ) tgt = torch.rand(5, 3, 512) memory = torch.rand(7, 3, 512) tgt_mask = torch.triu( torch.ones(5, 5), diagonal=1 ).bool() res = layer( tgt, memory, tgt_mask=tgt_mask ) print(res.shape)

Результат выполнения кода:

torch.Size([5, 3, 512])

Пример

Создадим слой с параметром batch_first=True для более удобного формата:

import torch torch.manual_seed(0) layer = torch.nn.TransformerDecoderLayer( d_model=512, nhead=8, batch_first=True, norm_first=True ) tgt = torch.rand(2, 10, 512) # (batch, seq_len, features) memory = torch.rand(2, 15, 512) # (batch, seq_len, features) res = layer(tgt, memory) print(res.shape)

Результат выполнения кода:

torch.Size([2, 10, 512])

Пример

Применим слой с функцией активации GELU вместо стандартной ReLU:

import torch torch.manual_seed(0) layer = torch.nn.TransformerDecoderLayer( d_model=256, nhead=4, dim_feedforward=1024, dropout=0.2, activation='gelu' ) tgt = torch.rand(8, 4, 256) memory = torch.rand(12, 4, 256) res = layer(tgt, memory) print(res.shape)

Результат выполнения кода:

torch.Size([8, 4, 256])

Смотрите также

  • класс TransformerDecoder,
    который представляет собой полный декодер из нескольких слоёв
  • класс TransformerEncoderLayer,
    который реализует слой энкодера трансформера
  • класс Transformer,
    который объединяет энкодер и декодер в одну модель
  • класс MultiheadAttention,
    который реализует многоголовое внимание
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить