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