CommencezCommencez gratuitement

Créer un modèle RNN pour le texte

À titre d'analyste de données chez PyBooks, vous travaillez souvent avec des jeux de données contenant de l'information séquentielle, comme des interactions clients, des séries temporelles ou des documents textuels. Les RNN permettent d'analyser efficacement ce type de données et d'en tirer des insights. Dans cet exercice, vous explorerez le jeu de données Newsgroup, déjà traité et encodé pour vous. Il regroupe des articles provenant de différentes catégories. Votre tâche est d'appliquer un RNN pour classer ces articles en trois catégories :

rec.autos, sci.med et comp.graphics.

Les éléments suivants ont été chargés pour vous : torch, nn, optim.

De plus, les paramètres input_size, hidden_size (32), num_layers (2) et num_classes ont été préchargés pour vous.

Cet exercice et les suivants utilisent le jeu de données fetch_20newsgroups de sklearn.

Cette activité fait partie du cours

Apprentissage profond pour le texte avec PyTorch

Voir le cours

Instructions de l’exercice

  • Complétez la classe RNN avec une couche RNN et une couche linéaire entièrement connectée.
  • Initialisez le modèle.
  • Entraînez le modèle RNN pendant dix époques en réinitialisant les gradients.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# Complete the RNN class
class RNNModel(nn.Module):
    def __init__(self, input_size, hidden_size, num_layers, num_classes):
        super(RNNModel, self).__init__()
        self.hidden_size = hidden_size
        self.num_layers = num_layers
        self.rnn = ____.____(input_size, hidden_size, num_layers, batch_first=True)
        self.fc = ____.____(hidden_size, num_classes)        
    def forward(self, x):
        h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size)
        out, _ = self.rnn(x, h0)
        out = out[:, -1, :] 
        out = self.fc(out)
        return out

# Initialize the model
rnn_model = ____(input_size, hidden_size, num_layers, num_classes)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(rnn_model.parameters(), lr=0.01)

# Train the model for ten epochs and zero the gradients
for epoch in ____: 
    optimizer.____()
    outputs = ____(X_train_seq)
    loss = criterion(outputs, y_train_seq)
    loss.backward()
    optimizer.step()
    print(f'Epoch: {epoch+1}, Loss: {loss.item()}')
Modifier et exécuter le code