НачатьНачать бесплатно

Обучение и тестирование модели RNN с механизмом внимания

В команде PyBooks ранее была создана модель RNN для предсказания слов без механизма внимания. Эта исходная модель, известная как rnn_model, уже обучена и её экземпляр предварительно загружен. Ваша задача — обучить новую модель RNNWithAttentionModel и сравнить её предсказания с предсказаниями исходной rnn_model.

Для вас предварительно загружены следующие объекты:

  • inputs: список входных последовательностей в виде тензоров
  • targets: тензор, содержащий целевые слова для каждой входной последовательности
  • optimizer: оптимизатор Adam
  • criterion: функция потерь CrossEntropyLoss
  • pad_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}")
Редактировать и запускать код