CommencezCommencez gratuitement

Entraîner et tester le modèle RNN avec attention

Chez PyBooks, l'équipe avait auparavant créé 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 maintenant est d'entraîner le nouveau RNNWithAttentionModel et de comparer ses prédictions avec celles de l'ancien rnn_model.

Les éléments suivants sont préchargés pour vous :

  • inputs : liste de séquences d'entrée sous forme de tenseurs
  • targets : tenseur contenant les mots cibles pour chaque séquence d'entrée
  • optimizer : fonction d'optimisation Adam
  • criterion : fonction CrossEntropyLoss
  • pad_sequences : fonction pour remplir les séquences d'entrée en vue du traitement par lots
  • attention_model : classe de modèle définie dans l'exercice précédent
  • rnn_model : modèle RNN entraîné par l'équipe de PyBooks

Cette activité fait partie du cours

Apprentissage profond pour le texte avec PyTorch

Voir le cours

Instructions de l’exercice

  • Mettez 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 façon similaire, 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 ce code d’exemple.

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}")
Modifier et exécuter le code