Het model trainen
In deze oefening ga je het eerder geïmplementeerde model trainen. Wist je dat Google’s encoder-decoder gebaseerde machinevertalingsmodel 2–4 dagen nodig had om te trainen?
Voor deze oefening gebruik je een kleine gegevensset van 1500 zinnen (dus en_text en fr_text) om het model te trainen. Dat is lang niet genoeg voor goede prestaties, maar de werkwijze blijft hetzelfde. Het is een kwestie van langer en met meer data trainen. Je hebt ook het model nmt en de functie sents2seqs() gekregen die je eerder hebt gemaakt. In deze oefening draai je de encoder-tekst om om betere prestaties te krijgen. Hier verwijst en_x naar de encoder-input en de_x naar de decoder-input.
Deze oefening maakt deel uit van de cursus
Machine Translation met Keras
Oefeninstructies
- Haal één batch encoder-inputs op (Engelse zinnen van index
itoti+bsize) met de functiesents2seqs(). Inputs moeten omgekeerd en onehot-gecodeerd worden. - Haal één batch decoder-outputs op (Franse zinnen van index
itoti+bsize) met de functiesents2seqs(). Inputs moeten onehot-gecodeerd worden. - Train het model op één batch met data die
en_xende_ybevat. - Verkrijg de evaluatiemetrics voor
en_xende_ydoor het model te evalueren met eenbatch_sizevanbsize.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
n_epochs, bsize = 3, 250
for ei in range(n_epochs):
for i in range(0,data_size,bsize):
# Get a single batch of encoder inputs
en_x = ____('source', ____, onehot=____, reverse=____)
# Get a single batch of decoder outputs
de_y = sents2seqs('target', fr_text[____], onehot=____)
# Train the model on a single batch of data
nmt.____(____, ____)
# Obtain the eval metrics for the training data
res = nmt.____(____, de_y, batch_size=____, verbose=0)
print("{} => Train Loss:{}, Train Acc: {}".format(ei+1,res[0], res[1]*100.0))