Entraîner et tester le modèle RNN avec attention
Chez PyBooks, l’équipe avait auparavant construit un modèle RNN pour la prédiction de mots sans mécanisme d’attention. Ce modèle initial, appelé rnn_model, a déjà été entraîné et son instance est préchargée. Votre tâche consiste maintenant à entraîner le nouveau RNNWithAttentionModel et à comparer ses prédictions avec celles de l’ancien rnn_model.
Les éléments suivants ont été préchargés pour vous :
inputs: liste de séquences d’entrée sous forme de tenseurstargets: tenseur contenant les mots cibles pour chaque séquence d’entréeoptimizer: fonction d’optimisation Adamcriterion: fonction CrossEntropyLosspad_sequences: fonction pour compléter les séquences d’entrée pour le traitement en lotattention_model: classe de modèle définie dans l’exercice précédentrnn_model: modèle RNN entraîné par l’équipe de PyBooks
Cet exercice fait partie du cours
Deep Learning pour le texte avec PyTorch
Instructions
- Passez le modèle RNN en mode évaluation avant de le tester avec les données de test.
- Obtenez la sortie du RNN en passant l’entrée appropriée au modèle RNN.
- Extrayez le mot ayant le score de prédiction le plus élevé à partir de la sortie du RNN.
- De même, pour le modèle avec attention, extrayez le mot ayant le score de prédiction le plus élevé à partir de la sortie de l’attention.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
for epoch in range(epochs):
attention_model.train()
optimizer.zero_grad()
padded_inputs = pad_sequences(inputs)
outputs = attention_model(padded_inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()
for input_seq, target in zip(input_data, target_data):
input_test = torch.tensor(input_seq, dtype=torch.long).unsqueeze(0)
# Set the RNN model to evaluation mode
rnn_model.____()
# Get the RNN output by passing the appropriate input
rnn_output = ____(____)
# Extract the word with the highest prediction score
rnn_prediction = ix_to_word[torch.____(____).item()]
attention_model.eval()
attention_output = attention_model(input_test)
# Extract the word with the highest prediction score
attention_prediction = ix_to_word[torch.____(____).item()]
print(f"\nInput: {' '.join([ix_to_word[ix] for ix in input_seq])}")
print(f"Target: {ix_to_word[target]}")
print(f"RNN prediction: {rnn_prediction}")
print(f"RNN with Attention prediction: {attention_prediction}")