CommencerCommencer gratuitement

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 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 compléter les séquences d’entrée pour le traitement en lot
  • 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

Cet exercice fait partie du cours

Deep Learning pour le texte avec PyTorch

Afficher le cours

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