Fonction torch.nn.TransformerEncoder de PyTorch
Manuel de référence torch.nn de PyTorch
torch.nn.TransformerEncoderIl s'agit du module d'encodeur Transformer dans PyTorch.
Il se compose de plusieurs couches TransformerEncoderLayer et est utilisé pour traiter des séquences d'entrée.
Définition de fonction
torch.nn.TransformerEncoder(encoder_layer, num_layers, norm=None)
Parameters
encoder_layer: Couche d'encodeurnum_layers: Nombre de couches
Exemples d'utilisation
Exemple 1 : Utilisation de base
Exemple
import torch
import torch.nn as nn
# Couche d'encodeur unique
encoder_layer = nn.TransformerEncoderLayer(d_model=512, nhead=8, batch_first=True)
# Encodeur complet
transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers=6)
# Entrée
x = torch.randn(32, 100, 512) # batch, seq, d_model
output = transformer_encoder(x)
print("Forme d'entrée :", x.shape)
print("Forme de sortie :", output.shape)
import torch.nn as nn
# Couche d'encodeur unique
encoder_layer = nn.TransformerEncoderLayer(d_model=512, nhead=8, batch_first=True)
# Encodeur complet
transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers=6)
# Entrée
x = torch.randn(32, 100, 512) # batch, seq, d_model
output = transformer_encoder(x)
print("Forme d'entrée :", x.shape)
print("Forme de sortie :", output.shape)
Exemple 2 : Classification de texte
Exemple
import torch
import torch.nn as nn
class TransformerClassifier(nn.Module):
def __init__(self, vocab_size, d_model=256, nhead=4, num_layers=4):
super(TransformerClassifier, self).__init__()
self.embedding = nn.Embedding(vocab_size, d_model)
self.pos_encoder = nn.Parameter(torch.randn(1, 512, d_model) * 0.1)
encoder_layer = nn.TransformerEncoderLayer(d_model, nhead, batch_first=True)
self.encoder = nn.TransformerEncoder(encoder_layer, num_layers)
self.fc = nn.Linear(d_model, 10)
def forward(self, x):
# Encodage positionnel simple
x = self.embedding(x) + self.pos_encoder[:, :x.size(1), :]
x = self.encoder(x)
# Prendre le premier jeton
return self.fc(x[:, 0, :])
model = TransformerClassifier(10000)
x = torch.randint(0, 10000, (32, 100))
output = model(x)
print("Forme de sortie :", output.shape)
import torch.nn as nn
class TransformerClassifier(nn.Module):
def __init__(self, vocab_size, d_model=256, nhead=4, num_layers=4):
super(TransformerClassifier, self).__init__()
self.embedding = nn.Embedding(vocab_size, d_model)
self.pos_encoder = nn.Parameter(torch.randn(1, 512, d_model) * 0.1)
encoder_layer = nn.TransformerEncoderLayer(d_model, nhead, batch_first=True)
self.encoder = nn.TransformerEncoder(encoder_layer, num_layers)
self.fc = nn.Linear(d_model, 10)
def forward(self, x):
# Encodage positionnel simple
x = self.embedding(x) + self.pos_encoder[:, :x.size(1), :]
x = self.encoder(x)
# Prendre le premier jeton
return self.fc(x[:, 0, :])
model = TransformerClassifier(10000)
x = torch.randint(0, 10000, (32, 100))
output = model(x)
print("Forme de sortie :", output.shape)
Cas d'utilisation
- BERT: notions de base de l'encodeur
- Classification de texte
- Extraction de caractéristiques
Autres extensions