Kom igångKom igång gratis

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 tensorer
  • targets: tensor som innehåller målord för varje insekvens
  • optimizer: Adam-optimeringsfunktion
  • criterion: CrossEntropyLoss-funktion
  • pad_sequences: funktion för att paddra insekvenser inför batchbearbetning
  • attention_model: definierad modellklass från föregående övning
  • rnn_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

Visa kurs

Ö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}")
Redigera och kör kod