ПочатиПочніть безкоштовно

Навчання й тестування моделі 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}")
Редагувати та запускати код