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

Класс TransformerEncoder

Класс TransformerEncoder представляет собой стек из нескольких слоёв кодировщика трансформера. Он принимает на вход последовательность векторов и применяет к ней механизм самовнимания и полносвязные слои. Первый параметр - слой кодировщика TransformerEncoderLayer, второй - количество слоёв num_layers. Класс также поддерживает дополнительные параметры, такие как norm для нормализации на выходе и enable_nested_tensor для оптимизации.

Синтаксис

torch.nn.TransformerEncoder( encoder_layer, num_layers, norm=None, enable_nested_tensor=True, mask=None )

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

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

  • encoder_layer - экземпляр класса TransformerEncoderLayer, который будет использоваться в каждом блоке кодировщика.
  • num_layers - количество слоёв кодировщика в стеке.
  • norm - слой нормализации, применяемый после всех слоёв кодировщика (обычно LayerNorm).
  • enable_nested_tensor - флаг, позволяющий использовать вложенные тензоры для оптимизации производительности.

Пример использования

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

import torch import torch.nn as nn # Parameters d_model = 512 nhead = 8 num_layers = 6 seq_len = 10 batch_size = 32 # Create encoder layer and encoder encoder_layer = nn.TransformerEncoderLayer( d_model=d_model, nhead=nhead, batch_first=True ) encoder = nn.TransformerEncoder( encoder_layer, num_layers=num_layers ) # Input tensor src = torch.randn(batch_size, seq_len, d_model) # Forward pass output = encoder(src) print(output.shape)

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

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

Пример с маской

Кодировщик поддерживает маскирование для исключения определённых элементов последовательности. Передадим маску в метод forward:

import torch import torch.nn as nn torch.manual_seed(0) # Parameters d_model = 64 nhead = 4 num_layers = 2 seq_len = 8 batch_size = 16 # Create encoder encoder_layer = nn.TransformerEncoderLayer( d_model=d_model, nhead=nhead, batch_first=True ) encoder = nn.TransformerEncoder( encoder_layer, num_layers=num_layers ) # Input and mask src = torch.randn(batch_size, seq_len, d_model) src_mask = torch.zeros(seq_len, seq_len) src_mask[3, 5] = float('-inf') # Mask one position # Forward pass with mask output = encoder(src, mask=src_mask) print(output.shape)

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

torch.Size([16, 8, 64])

Пример с маской ключей

Также можно использовать маску ключей для игнорирования определённых позиций в последовательности. Передадим маску в метод forward:

import torch import torch.nn as nn torch.manual_seed(1) # Parameters d_model = 128 nhead = 8 num_layers = 3 seq_len = 12 batch_size = 8 # Create encoder encoder_layer = nn.TransformerEncoderLayer( d_model=d_model, nhead=nhead, batch_first=True ) encoder = nn.TransformerEncoder( encoder_layer, num_layers=num_layers ) # Input and key padding mask src = torch.randn(batch_size, seq_len, d_model) src_key_padding_mask = torch.zeros(batch_size, seq_len, dtype=torch.bool) src_key_padding_mask[:, 5:9] = True # Pad positions # Forward pass with key padding mask output = encoder( src, mask=None, src_key_padding_mask=src_key_padding_mask ) print(output.shape)

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

torch.Size([8, 12, 128])

Пример с нормализацией

Добавим слой нормализации на выходе кодировщика для стабилизации обучения. Передадим слой LayerNorm в параметр norm:

import torch import torch.nn as nn torch.manual_seed(2) # Parameters d_model = 256 nhead = 4 num_layers = 4 seq_len = 16 batch_size = 4 # Create encoder layer encoder_layer = nn.TransformerEncoderLayer( d_model=d_model, nhead=nhead, batch_first=True ) # Create norm layer norm = nn.LayerNorm(d_model) # Create encoder with norm encoder = nn.TransformerEncoder( encoder_layer, num_layers=num_layers, norm=norm ) # Input tensor src = torch.randn(batch_size, seq_len, d_model) # Forward pass output = encoder(src) print(output.shape)

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

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

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

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