Encodertransformatorlagret
Nu när klassen FeedForwardSubLayer är definierad har du alla delar som behövs för att definiera en EncoderLayer-klass. Kom ihåg att encoderlagret vanligtvis består av en multi-head-uppmärksamhetsmekanism och ett feed-forward-sublager med lagernormalisering och dropout på sublagerets indata och utdata.
Klasserna du redan har definierat finns tillgängliga med samma namn, tillsammans med torch och torch.nn som nn.
Den här övningen är en del av kursen
Transformermodeller med PyTorch
Övningsinstruktioner
- Fyll i metoden
__init__för att instansieraMultiHeadAttention,FeedForwardSubLayeroch två lagernormaliseringar. - Fyll i metoden
forward()med multi-head-uppmärksamhetsmekanismen och feed-forward-sublagret. Användsrc_maskoch inbäddningarnaxsom query-, key- och value-matriser för uppmärksamhetsmekanismen.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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