Trenowanie i testowanie modelu RNN z mechanizmem atencji
Zespół PyBooks zbudował wcześniej model RNN do przewidywania słów – bez mechanizmu atencji. Ten wyjściowy model, określany jako rnn_model, został już wytrenowany i jego instancja jest wstępnie załadowana. Twoim zadaniem jest teraz wytrenowanie nowego modelu RNNWithAttentionModel i porównanie jego predykcji z wynikami wcześniejszego rnn_model.
Następujące elementy są wstępnie załadowane:
inputs: lista sekwencji wejściowych jako tensorytargets: tensor zawierający docelowe słowa dla każdej sekwencji wejściowejoptimizer: funkcja optymalizatora Adamcriterion: funkcja CrossEntropyLosspad_sequences: funkcja do dopełniania sekwencji wejściowych na potrzeby grupowania wsadowegoattention_model: klasa modelu zdefiniowana w poprzednim ćwiczeniurnn_model: wytrenowany model RNN przygotowany przez zespół PyBooks
To ćwiczenie jest częścią kursu
Uczenie głębokie dla tekstu z PyTorch
Instrukcje do ćwiczenia
- Przestaw model RNN w tryb ewaluacji przed przetestowaniem go na danych testowych.
- Uzyskaj wynik modelu RNN, przekazując odpowiednie dane wejściowe do tego modelu.
- Wyodrębnij słowo z najwyższym wynikiem predykcji z wyjścia modelu RNN.
- Podobnie dla modelu z atencją wyodrębnij słowo z najwyższym wynikiem predykcji z wyjścia tego modelu.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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}")