Kom igångKom igång gratis

Lägga till metoder i klassen MultiHeadAttention

I den här övningen bygger du resten av klassen MultiHeadAttention från grunden genom att definiera fyra metoder:

  • .split_heads(): delar upp och transformerar indatainbäddningarna mellan uppmärksamhetshuvudena
  • .compute_attention(): beräknar de skalade skalarproduktsvikterna multiplicerade med värdesmatrisen
  • .combine_heads(): transformerar uppmärksamhetsvikterna tillbaka till samma form som indatainbäddningarna, x
  • .forward(): anropar de övriga metoderna för att skicka indatainbäddningarna genom varje steg

torch.nn har importerats som nn, torch.nn.functional är tillgängligt som F, och torch är också tillgängligt.

Den här övningen är en del av kursen

Transformermodeller med PyTorch

Visa kurs

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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)
Redigera och kör kod