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 tensorestargets: tensor que contiene las palabras objetivo para cada secuencia de entradaoptimizer: función del optimizador Adamcriterion: función CrossEntropyLosspad_sequences: función para rellenar (pad) secuencias de entrada para el batchingattention_model: clase de modelo definida en el ejercicio anteriorrnn_model: modelo RNN entrenado por el equipo de PyBooks
Este ejercicio forma parte del curso
Deep Learning para texto con PyTorch
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}")