Créer un modèle LSTM pour le texte
Chez PyBooks, l'équipe cherche constamment à améliorer l'expérience des utilisateurs en tirant parti des plus récents progrès technologiques. Dans cette optique, on vous confie une tâche importante. L'équipe souhaite que vous exploriez le potentiel d'un autre outil puissant : LSTM, reconnu pour sa capacité à saisir des motifs de données plus complexes. Vous travaillez avec le même jeu de données Newsgroup, et l'objectif demeure le même : classifier les articles de nouvelles en trois catégories distinctes :
rec.autos, sci.med et comp.graphics.
Les modules suivants ont été chargés pour vous : torch, nn, optim.
Cette activité fait partie du cours
Apprentissage profond pour le texte avec PyTorch
Instructions de l’exercice
- Configurez un modèle LSTM en complétant les couches LSTM et linéaire avec les paramètres nécessaires.
- Initialisez le modèle avec les paramètres requis.
- Entraînez le modèle LSTM en réinitialisant les gradients à zéro et en faisant passer les données d'entrée
X_train_seqdans le modèle. - Calculez la perte à partir des
outputsprédits et des véritables étiquettes.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# Initialize the LSTM and the output layer with parameters
class LSTMModel(nn.Module):
def __init__(self, input_size, hidden_size, num_layers, num_classes):
super(LSTMModel, self).__init__()
self.hidden_size = hidden_size
self.num_layers = num_layers
self.lstm = nn.LSTM(____, ____, ____, batch_first=True)
self.fc = nn.Linear(____, ____)
def forward(self, x):
h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size)
c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size)
out, _ = self.lstm(x, (h0, c0))
out = out[:, -1, :]
out = self.fc(out)
return out
# Initialize model with required parameters
lstm_model = LSTMModel(____, ____, ____, ____)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(lstm_model.parameters(), lr=0.01)
# Train the model by passing the correct parameters and zeroing the gradient
for epoch in range(10):
optimizer.____
outputs = lstm_model(____)
loss = criterion(____, y_train_seq)
loss.backward()
optimizer.step()
print(f'Epoch: {epoch+1}, Loss: {loss.item()}')