Створення моделі RNN з механізмом уваги
У PyBooks команда досліджує різні архітектури глибокого навчання. Після аналізу ви вирішили реалізувати RNN із механізмом уваги, щоб передбачати наступне слово в реченні. Вам надано набір даних із реченнями та створений на його основі словник.
Для вас імпортовано такі пакети: torch, nn.
Попередньо завантажено:
vocabіvocab_size: набір словника та його розмірword_to_ixіix_to_word: словники для відображення слово→індекс і індекс→словоinput_dataіtarget_data: перетворений набір даних у пари вхід–вихідembedding_dimіhidden_dim: розміри для вкладень і прихованого стану RNN
Ви можете переглянути змінну data в консолі, щоб побачити приклади речень.
Ця вправа є частиною курсу
Глибоке навчання для тексту з PyTorch
Інструкції до вправи
- Створіть шар вкладень для словника з заданим
embedding_dim. - Застосуйте лінійне перетворення до послідовного виходу RNN, щоб отримати оцінки уваги.
- Отримайте ваги уваги з цих оцінок.
- Обчисліть контекстний вектор як зважену суму виходів RNN і ваг уваги.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
class RNNWithAttentionModel(nn.Module):
def __init__(self):
super(RNNWithAttentionModel, self).__init__()
# Create an embedding layer for the vocabulary
self.embeddings = nn.____(vocab_size, embedding_dim)
self.rnn = nn.RNN(embedding_dim, hidden_dim, batch_first=True)
# Apply a linear transformation to get the attention scores
self.attention = nn.____(____, 1)
self.fc = nn.____(hidden_dim, vocab_size)
def forward(self, x):
x = self.embeddings(x)
out, _ = self.rnn(x)
# Get the attention weights
attn_weights = torch.nn.functional.____(self.____(out).____(2), dim=1)
# Compute the context vector
context = torch.sum(____.____(2) * out, dim=1)
out = self.fc(context)
return out
attention_model = RNNWithAttentionModel()
optimizer = torch.optim.Adam(attention_model.parameters(), lr=0.01)
criterion = nn.CrossEntropyLoss()
print("Model Instantiated")