Zacznij terazZacznij za darmo

Warstwa enkodera transformera

Mając zdefiniowaną klasę FeedForwardSubLayer, dysponujesz już wszystkimi elementami potrzebnymi do zdefiniowania klasy EncoderLayer. Przypomnij sobie, że warstwa enkodera składa się zazwyczaj z mechanizmu uwagi wielogłowicowej (multi-head attention) oraz podwarstwy feed-forward, z normalizacją warstwy i dropoutem stosowanymi na wejściu i wyjściu tej podwarstwy.

Klasy, które już wcześniej zdefiniowano, są dostępne pod tymi samymi nazwami, razem z torch i torch.nn zaimportowanym jako nn.

To ćwiczenie jest częścią kursu

Modele Transformer w PyTorch

Zobacz kurs

Instrukcje do ćwiczenia

  • Uzupełnij metodę __init__, tworząc instancje MultiHeadAttention, FeedForwardSubLayer oraz dwóch warstw normalizacji.
  • Uzupełnij metodę forward(), dodając mechanizm uwagi wielogłowicowej i podwarstwę feed-forward; w mechanizmie uwagi użyj podanego src_mask oraz osadzeń wejściowych x jako macierzy query, key i value.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

class EncoderLayer(nn.Module):
    def __init__(self, d_model, num_heads, d_ff, dropout):
        super().__init__()
        # Instantiate the layers
        self.self_attn = ____(d_model, num_heads)
        self.ff_sublayer = ____(d_model, d_ff)
        self.norm1 = ____
        self.norm2 = ____
        self.dropout = nn.Dropout(dropout)

    def forward(self, x, src_mask):
        # Complete the forward method
        attn_output = self.____
        x = self.norm1(x + self.dropout(attn_output))
        ff_output = self.____
        x = self.norm2(x + self.dropout(ff_output))
        return x
Edytuj i uruchom kod