Stratul encoder al transformerului
Acum că ai definit clasa FeedForwardSubLayer, ai toate componentele necesare pentru a defini clasa EncoderLayer. Reamintește-ți că stratul encoder conține în mod obișnuit un mecanism de atenție multi-cap și un substrat feed-forward, cu normalizare de strat și dropout aplicate pe intrările și ieșirile substratului.
Clasele pe care le-ai definit anterior sunt disponibile cu aceleași nume, împreună cu torch și torch.nn ca nn.
Acest exercițiu face parte din cursul
Modele Transformer cu PyTorch
Instrucțiuni pentru exercițiu
- Completează metoda
__init__pentru a instanțiaMultiHeadAttention,FeedForwardSubLayerși două normalizări de strat. - Completează metoda
forward()adăugând mecanismul de atenție multi-cap și substratul feed-forward; pentru mecanismul de atenție, foloseștesrc_mark-ul furnizat și încorporările de intrare,x, pentru matricele query, key și value.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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