Data splitsen in trainings- en validatiesets
Je hebt geleerd dat alleen de trainingsdata gebruiken zonder een validatieset leidt tot een probleem genaamd overfitting. Bij overfitting presteert het model heel goed op de trainingsinputs, maar generaliseert het juist heel slecht naar onzichtbare data. Dat betekent dat het model niet erg bruikbaar is, omdat het niet kan generaliseren. Om dit te voorkomen kun je een validatieset gebruiken.
In deze oefening maak je een trainings- en validatieset van de gegevensset die je hebt (dus en_text met 1000 Engelse zinnen en fr_text met 1000 Franse zinnen). Je gebruikt 80% van de gegevensset als trainingsdata en 20% als validatiedata.
Deze oefening maakt deel uit van de cursus
Machine Translation met Keras
Oefeninstructies
- Definieer een reeks indexen met
np.arange()die begint bij 0 en de grootte heeft vanen_text. - Definieer
valid_indsals de laatstevalid_sizeindexen uit de reeks indexen. - Definieer
tr_enentf_fr, die de zinnen bevatten op de positiestrain_indsin de lijstenen_textenfr_text. - Definieer
v_enenv_fr, die de zinnen bevatten op de positiesvalid_indsin de lijstenen_textenfr_text.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
train_size, valid_size = 800, 200
# Define a sequence of indices from 0 to len(en_text)
inds = ____.____(len(_____))
np.random.shuffle(inds)
train_inds = inds[:train_size]
# Define valid_inds: last valid_size indices
valid_inds = inds[____]
# Define tr_en (train EN sentences) and tr_fr (train FR sentences)
tr_en = [en_text[____] for ti in ____]
tr_fr = [____ for ti in ____]
# Define v_en (valid EN sentences) and v_fr (valid FR sentences)
v_en = [____ for vi in valid_inds]
v_fr = [____ for vi in ____]
print('Training (EN):\n', tr_en[:3], '\nTraining (FR):\n', tr_fr[:3])
print('\nValid (EN):\n', v_en[:3], '\nValid (FR):\n', v_fr[:3])