Dikkat mekanizmalı bir RNN modeli oluşturma
PyBooks'ta ekip çeşitli derin öğrenme mimarilerini inceliyor. Biraz araştırmadan sonra, bir cümledeki bir sonraki kelimeyi tahmin etmek için Dikkat (Attention) mekanizmasına sahip bir RNN uygulamaya karar veriyorsun. Sana, cümlelerden oluşturulmuş bir sözlükle birlikte cümleler içeren bir veri kümesi verildi.
Aşağıdaki paketler senin için içe aktarıldı: torch, nn.
Aşağıdakiler önceden yüklendi:
vocabvevocab_size: Sözlük kümesi ve boyutuword_to_ixveix_to_word: kelimeden indekse ve indeksten kelimeye eşleştirmeler için sözlükinput_datavetarget_data: veri kümesinin girdi-çıktı çiftlerine dönüştürülmüş hâliembedding_dimvehidden_dim: gömme ve RNN gizil durum boyutları
Örnek cümleleri görmek için konsolda data değişkenini inceleyebilirsin.
Bu egzersiz
PyTorch ile Metin için Deep Learning
kursunun bir parçasıdırEgzersiz talimatları
- Verilen
embedding_dimile sözlük için bir gömme (embedding) katmanı oluştur. - Dikkat skorlarını elde etmek için RNN dizi çıktısına doğrusal bir dönüşüm uygula.
- Skorlardan dikkat ağırlıklarını elde et.
- Bağlam vektörünü, RNN çıktıları ile dikkat ağırlıklarının ağırlıklı toplamı olarak hesapla.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
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")