ComeçarComece de graça

Treinando e testando o modelo RNN com attention

Na PyBooks, a equipe havia construído anteriormente um modelo RNN para previsão de palavras sem o mecanismo de attention. Esse modelo inicial, chamado de rnn_model, já foi treinado e sua instância está pré-carregada. Sua tarefa agora é treinar o novo RNNWithAttentionModel e comparar suas previsões com as do rnn_model anterior.

Os seguintes itens já estão pré-carregados para você:

  • inputs: lista de sequências de entrada como tensores
  • targets: tensor contendo as palavras-alvo para cada sequência de entrada
  • optimizer: função de otimizador Adam
  • criterion: função CrossEntropyLoss
  • pad_sequences: função para preencher sequências de entrada para batching
  • attention_model: classe de modelo definida no exercício anterior
  • rnn_model: modelo RNN treinado pela equipe da PyBooks

Este exercício faz parte do curso

Deep Learning para Texto com PyTorch

Ver curso

Instruções do exercício

  • Coloque o modelo RNN em modo de avaliação antes de testá-lo com os dados de teste.
  • Obtenha a saída da RNN passando a entrada apropriada para o modelo RNN.
  • Extraia a palavra com a maior pontuação de previsão a partir da saída da RNN.
  • Da mesma forma, para o modelo com attention, extraia a palavra com a maior pontuação de previsão a partir da saída de attention.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

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}")
Editar e executar o código