Inizia subitoInizia 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 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 interattivo pratico

Prova questo esercizio completando questo 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