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 tensoritargets: tensore che contiene le parole target per ciascuna sequenza di inputoptimizer: funzione ottimizzatore Adamcriterion: funzione CrossEntropyLosspad_sequences: funzione per riempire (pad) le sequenze di input per il batchingattention_model: classe del modello definita nell’esercizio precedenternn_model: modello RNN addestrato dal team di PyBooks
Questo esercizio fa parte del corso
Deep Learning per il testo con PyTorch
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}")