CommencerCommencer gratuitement

Construire un modèle RNN pour le texte

En tant qu’analyste de données chez PyBooks, vous rencontrez souvent des jeux de données contenant des informations séquentielles, comme des interactions clients, des séries temporelles ou des documents texte. Les RNN permettent d’analyser efficacement ces données et d’en extraire des informations. Dans cet exercice, vous allez travailler sur le jeu de données Newsgroup, déjà traité et encodé pour vous. Ce jeu de données regroupe des articles 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.

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

Cet exercice fait partie du cours

Deep Learning pour le texte avec PyTorch

Afficher le cours

Instructions

  • 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 cet exemple de code.

# 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