MultiHeadAttention sınıfına yöntemler ekleme
Bu egzersizde, sıfırdan dört yöntem tanımlayarak MultiHeadAttention sınıfının kalanını oluşturacaksın:
.split_heads(): dikkat başlıkları arasında giriş gömmelerini (embeddings) böl ve dönüştür.compute_attention(): ölçeklendirilmiş nokta çarpımı dikkat ağırlıklarını hesapla ve değer (value) matrisiyle çarp.combine_heads(): dikkat ağırlıklarını, giriş gömmelerixile aynı şekle geri dönüştür.forward(): giriş gömmelerini her adımdan geçirmek için diğer yöntemleri çağır
torch.nn nn olarak içe aktarıldı, torch.nn.functional F olarak mevcut ve torch da kullanılabilir.
Bu egzersiz
PyTorch ile Transformer Modelleri
kursunun bir parçasıdırUygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
class MultiHeadAttention(nn.Module):
def __init__(self, d_model, num_heads):
super().__init__()
self.num_heads = num_heads
self.d_model = d_model
self.head_dim = d_model // num_heads
self.query_linear = nn.Linear(d_model, d_model, bias=False)
self.key_linear = nn.Linear(d_model, d_model, bias=False)
self.value_linear = nn.Linear(d_model, d_model, bias=False)
self.output_linear = nn.Linear(d_model, d_model)
def split_heads(self, x, batch_size):
seq_length = x.size(1)
# Split the input embeddings and permute
x = x.____
return x.permute(0, 2, 1, 3)