Fonction torch.nn.Transformer de PyTorch
Manuel de référence torch.nn de PyTorch
torch.nn.TransformerC'est le modèle Transformer complet dans PyTorch.
Il contient un encodeur et un décodeur, et peut être utilisé pour des tâches de séquence à séquence.
Définition de fonction
torch.nn.Transformer(d_model=512, nhead=8, num_encoder_layers=6, num_decoder_layers=6, dim_feedforward=2048, dropout=0.1, activation='gelu', batch_first=True)
Exemples d'utilisation
Exemple 1 : Utilisation de base
Exemple
import torch
import torch.nn as nn
# Créer un Transformer
transformer = nn.Transformer(d_model=512, nhead=8, batch_first=True)
# Entrée de l'encodeur
src = torch.randn(10, 32, 512) # (seq, batch, d_model)
# Entrée du décodeur
tgt = torch.randn(20, 32, 512)
output = transformer(src, tgt)
print("Forme de sortie :", output.shape)
import torch.nn as nn
# Créer un Transformer
transformer = nn.Transformer(d_model=512, nhead=8, batch_first=True)
# Entrée de l'encodeur
src = torch.randn(10, 32, 512) # (seq, batch, d_model)
# Entrée du décodeur
tgt = torch.randn(20, 32, 512)
output = transformer(src, tgt)
print("Forme de sortie :", output.shape)
Exemple 2 : Modèle de traduction simple
Exemple
import torch
import torch.nn as nn
class TransformerMT(nn.Module):
def __init__(self, vocab_size, d_model=256, nhead=4):
super(TransformerMT, self).__init__()
self.d_model = d_model
self.embedding = nn.Embedding(vocab_size, d_model)
self.transformer = nn.Transformer(d_model, nhead, batch_first=True)
self.fc = nn.Linear(d_model, vocab_size)
def forward(self, src, tgt):
src = self.embedding(src) * (self.d_model ** 0.5)
tgt = self.embedding(tgt) * (self.d_model ** 0.5)
out = self.transformer(src, tgt)
return self.fc(out)
model = TransformerMT(10000)
src = torch.randint(0, 10000, (32, 50))
tgt = torch.randint(0, 10000, (32, 40))
output = model(src, tgt)
print("Forme de sortie :", output.shape)
import torch.nn as nn
class TransformerMT(nn.Module):
def __init__(self, vocab_size, d_model=256, nhead=4):
super(TransformerMT, self).__init__()
self.d_model = d_model
self.embedding = nn.Embedding(vocab_size, d_model)
self.transformer = nn.Transformer(d_model, nhead, batch_first=True)
self.fc = nn.Linear(d_model, vocab_size)
def forward(self, src, tgt):
src = self.embedding(src) * (self.d_model ** 0.5)
tgt = self.embedding(tgt) * (self.d_model ** 0.5)
out = self.transformer(src, tgt)
return self.fc(out)
model = TransformerMT(10000)
src = torch.randint(0, 10000, (32, 50))
tgt = torch.randint(0, 10000, (32, 40))
output = model(src, tgt)
print("Forme de sortie :", output.shape)
Cas d'utilisation
- Traduction automatique
- Génération de texte
- Séquence-à-séquence
Remarque : lorsque batch_first=True, la forme de l'entrée est (batch, seq, d_model).
Autres extensions