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

Класс TransformerEncoderLayer

Класс TransformerEncoderLayer реализует один слой стандартного энкодера трансформера. Слой состоит из двух основных подблоков: механизма многоголового внимания (self-attention) и полносвязной сети (feed-forward network). Каждый подблок сопровождается слоем нормализации и остаточной связью. Первым параметром в конструктор передаётся размерность признаков модели (d_model), вторым - количество голов внимания (nhead). Дополнительные параметры позволяют настраивать размерность внутреннего слоя, функции активации, дропаут и другие аспекты.

Синтаксис

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

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

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

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

Пример

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

import torch import torch.nn as nn encoder_layer = nn.TransformerEncoderLayer( d_model=512, nhead=8, dim_feedforward=2048, dropout=0.1, activation='relu' ) print(encoder_layer)

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

"TransformerEncoderLayer(...)"

Пример

Создадим слой с параметром batch_first=True и применим его к входным данным:

import torch import torch.nn as nn torch.manual_seed(0) encoder_layer = nn.TransformerEncoderLayer( d_model=512, nhead=8, batch_first=True ) t = torch.randn(4, 10, 512) res = encoder_layer(t) print(res.shape)

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

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

Пример

Используем слой с функцией активации gelu и коэффициентом дропаута 0.2:

import torch import torch.nn as nn torch.manual_seed(0) encoder_layer = nn.TransformerEncoderLayer( d_model=256, nhead=4, dim_feedforward=1024, dropout=0.2, activation='gelu', batch_first=True ) t = torch.randn(2, 8, 256) res = encoder_layer(t) print(res[0, 0, :5])

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

tensor([-0.0992, -0.1592, -0.1421, 0.0935, -0.2088])

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

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