Träna och testa RNN-modellen med uppmärksamhetsmekanism
På PyBooks hade teamet tidigare byggt en RNN-modell för ordprediktion utan uppmärksamhetsmekanism. Den här ursprungliga modellen, kallad rnn_model, är redan tränad och dess instans är förinläst. Din uppgift är nu att träna den nya RNNWithAttentionModel och jämföra dess prediktioner med den tidigare rnn_model.
Följande är förinläst för dig:
inputs: lista med insekvenser som tensorertargets: tensor som innehåller målord för varje insekvensoptimizer: Adam-optimeringsfunktioncriterion: CrossEntropyLoss-funktionpad_sequences: funktion för att paddra insekvenser inför batchbearbetningattention_model: definierad modellklass från föregående övningrnn_model: tränad RNN-modell från teamet på PyBooks
Den här övningen är en del av kursen
Djupinlärning för text med PyTorch
Övningsinstruktioner
- Sätt RNN-modellen i utvärderingsläge innan du testar den med testdata.
- Hämta RNN-utdata genom att skicka lämplig indata till RNN-modellen.
- Extrahera ordet med den högsta prediktionspoängen från RNN-utdata.
- Gör på samma sätt för uppmärksamhetsmodellen och extrahera ordet med den högsta prediktionspoängen från uppmärksamhetsutdata.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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}")