IniziaInizia gratis

Addestrare e testare il modello RNN con attenzione

A PyBooks, il team aveva in precedenza creato un modello RNN per la previsione di parole senza il meccanismo di attenzione. Questo modello iniziale, chiamato rnn_model, è già stato addestrato e un’istanza è pre-caricata. Il tuo compito ora è addestrare il nuovo RNNWithAttentionModel e confrontarne le previsioni con quelle del precedente rnn_model.

Sono già stati pre-caricati per te:

  • inputs: elenco di sequenze di input come tensori
  • targets: tensore che contiene le parole target per ciascuna sequenza di input
  • optimizer: funzione ottimizzatore Adam
  • criterion: funzione CrossEntropyLoss
  • pad_sequences: funzione per riempire (pad) le sequenze di input per il batching
  • attention_model: classe del modello definita nell’esercizio precedente
  • rnn_model: modello RNN addestrato dal team di PyBooks

Questo esercizio fa parte del corso

Deep Learning per il testo con PyTorch

Visualizza il corso

Istruzioni dell'esercizio

  • Imposta il modello RNN in modalità valutazione prima di testarlo con i dati di test.
  • Ottieni l’output dell’RNN passando l’input appropriato al modello RNN.
  • Estrai la parola con il punteggio di previsione più alto dall’output dell’RNN.
  • Allo stesso modo, per il modello con attenzione, estrai la parola con il punteggio di previsione più alto dall’output dell’attenzione.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

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}")
Modifica ed esegui il codice