Fonction torch.nn.GRU de PyTorch

PyTorch torch.nn 参考手册Manuel de référence torch.nn de PyTorch


torch.nn.GRUEst le module Gated Recurrent Unit dans PyTorch.

GRU est une version simplifiée de LSTM, avec moins de paramètres, un calcul plus rapide et des performances similaires.

Définition de fonction

torch.nn.GRU(input_size, hidden_size, num_layers=1, bias=True, batch_first=True, dropout=0, bidirectional=False)

Exemples d'utilisation

Exemple 1 : Utilisation de base

Exemple

import torch
import torch.nn as nn

# GRU : entrée de dimension 256, caché de dimension 256, 2 couches
gru = nn.GRU(input_size=256, hidden_size=256, num_layers=2, batch_first=True)

# Entrée : batch=4, séquence=10, caractéristiques=256
x = torch.randn(4, 10, 256)

output, hidden = gru(x)

print("Forme d'entrée :", x.shape)
print("Forme de sortie :", output.shape)
print("Forme de l'état caché :", hidden.shape)

Exemple 2 : Comparaison avec LSTM

Exemple

import torch
import torch.nn as nn
import time

# LSTM et GRU avec la même configuration
lstm = nn.LSTM(256, 256, 1, batch_first=True)
gru = nn.GRU(256, 256, 1, batch_first=True)

x = torch.randn(32, 100, 256)

# Comparaison des performances
for model, name in [(lstm, "LSTM"), (gru, "GRU")]:
    start = time.time()
    for _ in range(100):
        _ = model(x)
    print(f"{name} Temps : {time.time()-start:.3f}s")

Exemple 3 : Tâche de classification

Exemple

import torch
import torch.nn as nn

class GRUClassifier(nn.Module):
    def __init__(self, vocab_size, embed_dim, hidden_dim, num_classes):
        super(GRUClassifier, self).__init__()
        self.embedding = nn.Embedding(vocab_size, embed_dim)
        self.gru = nn.GRU(embed_dim, hidden_dim, batch_first=True, bidirectional=True)
        self.fc = nn.Linear(hidden_dim * 2, num_classes)

    def forward(self, x):
        embedded = self.embedding(x)
        _, hidden = self.gru(embedded)
        # Concaténer les états cachés finaux du bidirectionnel
        hidden = torch.cat([hidden[-2], hidden[-1]], dim=1)
        return self.fc(hidden)

model = GRUClassifier(10000, 128, 128, 2)
x = torch.randint(0, 10000, (8, 50))
output = model(x)

print("Entrée :", x.shape, "-> Sortie :", output.shape)

LSTM vs GRU

Aspect LSTM GRU
Nombre de paramètres Plus Moins
Portes 3 portes 2 portes
Calcul Plus lent Plus rapide

Cas d'utilisation

  • Modélisation de séquences: Texte, audio
  • Prototypage rapide: lorsque les ressources sont limitées
  • Traduction automatique: côté encodeur

PyTorch torch.nn 参考手册Manuel de référence torch.nn de PyTorch

Autres extensions