開始使用免費開始

Encoder Transformer Layer

在已經定義好 FeedForwardSubLayer 類別之後,你現在具備定義 EncoderLayer 類別所需的所有元件。回想一下,encoder layer 通常由多頭注意力機制,以及一個在子層輸入與輸出上皆套用層正規化與 dropout 的前饋子層所組成。

你先前定義的類別都已可直接使用,名稱相同;同時也已匯入 torchtorch.nn(別名為 nn)。

本練習屬於課程

Transformer Models with PyTorch

檢視課程

練習說明

  • 完成 __init__ 方法,建立 MultiHeadAttentionFeedForwardSubLayer,以及兩個層正規化。
  • 完成 forward() 方法,填入多頭注意力機制與前饋子層;對於注意力機制,請使用提供的 src_mark,並將輸入嵌入向量 x 分別作為 query、key、value 矩陣。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

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
編輯並執行程式碼