EmpezarEmpieza gratis

Entrenar y probar el modelo RNN con atención

En PyBooks, el equipo había creado previamente un modelo RNN para la predicción de palabras sin el mecanismo de atención. Este modelo inicial, denominado rnn_model, ya ha sido entrenado y su instancia está precargada. Tu tarea ahora es entrenar el nuevo RNNWithAttentionModel y comparar sus predicciones con las del rnn_model anterior.

Se te ha precargado lo siguiente:

  • inputs: lista de secuencias de entrada como tensores
  • targets: tensor que contiene las palabras objetivo para cada secuencia de entrada
  • optimizer: función del optimizador Adam
  • criterion: función CrossEntropyLoss
  • pad_sequences: función para rellenar (pad) secuencias de entrada para el batching
  • attention_model: clase de modelo definida en el ejercicio anterior
  • rnn_model: modelo RNN entrenado por el equipo de PyBooks

Este ejercicio forma parte del curso

Deep Learning para texto con PyTorch

Ver curso

Instrucciones del ejercicio

  • Pon el modelo RNN en modo de evaluación antes de probarlo con los datos de prueba.
  • Obtén la salida de la RNN pasando la entrada adecuada al modelo RNN.
  • Extrae la palabra con la puntuación de predicción más alta a partir de la salida de la RNN.
  • De forma similar, para el modelo con atención, extrae la palabra con la mayor puntuación de predicción a partir de la salida de atención.

ejercicio interactivo práctico

Prueba este ejercicio completando este código de ejemplo.

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 y ejecutar código