Podział danych na zbiór treningowy i walidacyjny
Wiesz już, że trenowanie modelu wyłącznie na danych treningowych – bez zbioru walidacyjnego – prowadzi do problemu zwanego overfittingiem (przeuczeniem). Gdy dochodzi do przeuczenia, model bardzo dobrze radzi sobie z przewidywaniem wyników dla danych treningowych, ale słabo generalizuje na nowe, niewidziane dane. Taki model jest mało użyteczny. Aby tego uniknąć, warto skorzystać ze zbioru walidacyjnego.
W tym ćwiczeniu utworzysz zbiór treningowy i walidacyjny na podstawie dostępnych danych (tj. en_text zawierającego 1000 zdań angielskich oraz fr_text zawierającego 1000 zdań francuskich). Do trenowania wykorzystasz 80% danych, a pozostałe 20% przeznaczy się na walidację.
To ćwiczenie jest częścią kursu
Tłumaczenie maszynowe z Keras
Instrukcje do ćwiczenia
- Zdefiniuj sekwencję indeksów za pomocą
np.arange(), zaczynającą się od 0 i mającą rozmiar równy długościen_text. - Zdefiniuj
valid_indsjako ostatnievalid_sizeindeksów z tej sekwencji. - Zdefiniuj
tr_enitf_frzawierające zdania spod indeksówtrain_indsz listen_textifr_text. - Zdefiniuj
v_eniv_frzawierające zdania spod indeksówvalid_indsz listen_textifr_text.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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])