Das Modell mit Validierung trainieren
Hier trainierst du das Modell mit Teacher Forcing und machst auch einen Validierungsschritt. Du trainierst das Modell über mehrere Epochen und mehrere Iterationen. Am Ende jeder Epoche führst du dann den Validierungsschritt durch und bekommst die Ergebnisse.
Dafür hast du „ en_text
” (Sätze auf Englisch), „ fr_text
” (Sätze auf Französisch), die Funktion „ sents2seqs()
” und „ nmt_tf
” (das kompilierte Modell). Außerdem sind schon die Dateien „ tr_en
“ und „ tr_fr
“ (Trainingsdaten) sowie „ v_en
“ und „ v_fr
“ (Validierungsdaten) geladen.
Diese Übung ist Teil des Kurses
Maschinelle Übersetzung mit Keras
Anleitung zur Übung
- Extrahier die Decodereingaben (alle Wörter außer dem letzten) und -ausgaben (alle Wörter außer dem ersten) aus „
de_xy
“. - Trainiere das Modell mit einem einzigen Datenbatch.
- Erstell Decodereingänge und -ausgänge aus den Validierungsdaten, so wie du es bei den Trainingsdaten gemacht hast.
- Teste das Modell mit dem Validierungsdatensatz, um den Validierungsverlust und die Genauigkeit zu ermitteln.
Interaktive Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
for ei in range(n_epochs):
for i in range(0,train_size,bsize):
en_x = sents2seqs('source', tr_en[i:i+bsize], onehot=True, reverse=True)
de_xy = sents2seqs('target', tr_fr[i:i+bsize], onehot=True)
# Create a single batch of decoder inputs and outputs
de_x, de_y = ____[:,____,:], de_xy[:,____,:]
# Train the model on a single batch of data
nmt_tf.____([____,____], de_y)
v_en_x = sents2seqs('source', v_en, onehot=True, reverse=True)
# Create a single batch of validation decoder inputs and outputs
v_de_xy = ____('target', ____, onehot=____)
v_de_x, v_de_y = ____[____], v_de_xy[____]
# Evaluate the trained model on the validation data
res = nmt_tf.evaluate([____,____], ____, batch_size=valid_size, verbose=0)
print("{} => Loss:{}, Val Acc: {}".format(ei+1,res[0], res[1]*100.0))