Die Encoder-Transformer-Schicht
Mit einer definierten Klasse FeedForwardSubLayer hast du alle Bausteine, um eine Klasse EncoderLayer zu erstellen. Denk daran: Die Encoder-Schicht besteht typischerweise aus einem Multi-Head-Attention-Mechanismus und einer Feed-Forward-Teilschicht, jeweils mit Layer-Normalisierung und Dropout auf den Eingaben und Ausgaben der Teilschicht.
Die bereits von dir definierten Klassen stehen dir unter denselben Namen zur Verfügung, außerdem torch und torch.nn als nn.
Diese Übung ist Teil des Kurses
<Kurs>Transformer-Modelle mit PyTorch</Kurs>Übungsanweisungen
- Vervollständige die Methode
__init__, umMultiHeadAttention,FeedForwardSubLayerund zwei Layer-Normalisierungen zu instanziieren. - Vervollständige die Methode
forward()und füge den Multi-Head-Attention-Mechanismus sowie die Feed-Forward-Teilschicht ein; verwende für den Aufmerksamkeitsmechanismus die bereitgestelltesrc_markund die Eingabe-Embeddingsxfür die Query-, Key- und Value-Matrizen.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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