ÎncepețiÎncepe gratuit

Antrenarea și testarea modelului RNN cu atenție

La PyBooks, echipa construise anterior un model RNN pentru predicția cuvintelor, fără mecanismul de atenție. Acest model inițial, denumit rnn_model, a fost deja antrenat și instanța sa este preîncărcată. Sarcina ta acum este să antrenezi noul RNNWithAttentionModel și să îi compari predicțiile cu cele ale modelului anterior rnn_model.

Următoarele elemente sunt preîncărcate pentru tine:

  • inputs: lista secvențelor de intrare ca tensori
  • targets: tensor care conține cuvintele țintă pentru fiecare secvență de intrare
  • optimizer: funcția de optimizare Adam
  • criterion: funcția CrossEntropyLoss
  • pad_sequences: funcție pentru umplerea secvențelor de intrare în vederea grupării în loturi
  • attention_model: clasa de model definită în exercițiul anterior
  • rnn_model: modelul RNN antrenat de echipa PyBooks

Acest exercițiu face parte din cursul

Deep Learning pentru text cu PyTorch

Vezi cursul

Instrucțiuni pentru exercițiu

  • Setează modelul RNN în modul de evaluare înainte de a-l testa cu datele de test.
  • Obține rezultatul RNN pasând intrarea corespunzătoare modelului RNN.
  • Extrage cuvântul cu cel mai mare scor de predicție din rezultatul RNN.
  • Similar, pentru modelul cu atenție, extrage cuvântul cu cel mai mare scor de predicție din rezultatul modelului de atenție.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

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}")
Editează și rulează codul