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
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()}')