Vrstva encoderu transformeru
Teď, když máš definovanou třídu FeedForwardSubLayer, máš všechny potřebné stavební bloky pro definici třídy EncoderLayer. Pamatuj, že vrstva encoderu se typicky skládá z mechanismu multi-head attention a feed-forward podvrstvy s normalizací vrstev a dropoutem na vstupech a výstupech podvrstvy.
Třídy, které jsi již definoval/a, jsou dostupné pod stejnými názvy, spolu s torch a torch.nn jako nn.
Toto cvičení je součástí kurzu
Transformer Models with PyTorch
Pokyny k cvičení
- Doplň metodu
__init__tak, aby inicializovalaMultiHeadAttention,FeedForwardSubLayera dvě normalizace vrstev. - Doplň metodu
forward()implementací mechanismu multi-head attention a feed-forward podvrstvy; pro attention mechanismus použij poskytnutýsrc_marka vstupní embeddingyxjako matice query, key a value.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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