Функция torch.nn.TransformerEncoderLayer в PyTorch
Справочное руководство PyTorch torch.nn
nn.TransformerEncoderLayerЭто однослойная структура энкодера Transformer.
Он содержит механизм самовнимания и сети прямого распространения и является базовой единицей полного энкодера.
Определение функции
torch.nn.TransformerEncoderLayer(d_model, nhead, dim_feedforward=2048, dropout=0.1, activation='gelu', batch_first=True)
Parameters
d_model: Размерность моделиnhead: Количество голов вниманияdim_feedforward: Размерность скрытого слоя FFN
Примеры использования
Пример 1: Базовое использование
Пример
import torch
import torch.nn as nn
# Слой энкодера
layer = nn.TransformerEncoderLayer(d_model=512, nhead=8, batch_first=True)
# Ввод
x = torch.randn(32, 100, 512)
output = layer(x)
print("Вход:", x.shape, "-> Выход:", output.shape)
import torch.nn as nn
# Слой энкодера
layer = nn.TransformerEncoderLayer(d_model=512, nhead=8, batch_first=True)
# Ввод
x = torch.randn(32, 100, 512)
output = layer(x)
print("Вход:", x.shape, "-> Выход:", output.shape)
Пример 2: Пользовательская функция активации
Пример
import torch
import torch.nn as nn
# Использовать активацию ReLU
layer_relu = nn.TransformerEncoderLayer(d_model=256, nhead=4, activation='relu', batch_first=True)
x = torch.randn(8, 50, 256)
out = layer_relu(x)
print("Вывод активации ReLU:", out.shape)
import torch.nn as nn
# Использовать активацию ReLU
layer_relu = nn.TransformerEncoderLayer(d_model=256, nhead=4, activation='relu', batch_first=True)
x = torch.randn(8, 50, 256)
out = layer_relu(x)
print("Вывод активации ReLU:", out.shape)
Пример 3: Многослойное стекирование
Пример
import torch
import torch.nn as nn
# Стекировать несколько слоёв
layer = nn.TransformerEncoderLayer(256, 4, batch_first=True)
encoder = nn.Sequential(
слой,
nn.TransformerEncoderLayer(256, 4, batch_first=True),
nn.TransformerEncoderLayer(256, 4, batch_first=True)
)
x = torch.randn(4, 30, 256)
out = encoder(x)
print("вывод 3-слойного энкодера:", out.shape)
import torch.nn as nn
# Стекировать несколько слоёв
layer = nn.TransformerEncoderLayer(256, 4, batch_first=True)
encoder = nn.Sequential(
слой,
nn.TransformerEncoderLayer(256, 4, batch_first=True),
nn.TransformerEncoderLayer(256, 4, batch_first=True)
)
x = torch.randn(4, 30, 256)
out = encoder(x)
print("вывод 3-слойного энкодера:", out.shape)
Сценарии использования
- Построение энкодера
- Модели, такие как BERT
- Понимание текста
Другие расширения