Обучение и тестирование модели RNN с механизмом внимания
В команде PyBooks ранее была создана модель RNN для предсказания слов без механизма внимания. Эта исходная модель, известная как rnn_model, уже обучена и её экземпляр предварительно загружен. Ваша задача — обучить новую модель RNNWithAttentionModel и сравнить её предсказания с предсказаниями исходной rnn_model.
Для вас предварительно загружены следующие объекты:
inputs: список входных последовательностей в виде тензоровtargets: тензор, содержащий целевые слова для каждой входной последовательностиoptimizer: оптимизатор Adamcriterion: функция потерь CrossEntropyLosspad_sequences: функция для дополнения входных последовательностей при формировании батчейattention_model: класс модели, определённый в предыдущем упражненииrnn_model: обученная модель RNN от команды PyBooks
Это упражнение является частью курса
Глубокое обучение для работы с текстом на PyTorch
Инструкции к упражнению
- Переведите модель RNN в режим оценки перед тестированием на тестовых данных.
- Получите выходные данные RNN, передав соответствующий входной тензор в модель RNN.
- Извлеките слово с наибольшим значением предсказания из выходных данных RNN.
- Аналогично для модели с механизмом внимания извлеките слово с наибольшим значением предсказания из её выходных данных.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
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}")