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

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