Zacznij terazZacznij za darmo

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 tensory
  • targets: tensor zawierający docelowe słowa dla każdej sekwencji wejściowej
  • optimizer: funkcja optymalizatora Adam
  • criterion: funkcja CrossEntropyLoss
  • pad_sequences: funkcja do dopełniania sekwencji wejściowych na potrzeby grupowania wsadowego
  • attention_model: klasa modelu zdefiniowana w poprzednim ćwiczeniu
  • rnn_model: wytrenowany model RNN przygotowany przez zespół PyBooks

To ćwiczenie jest częścią kursu

Uczenie głębokie dla tekstu z PyTorch

Zobacz kurs

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}")
Edytuj i uruchom kod