Розбиття даних на тренувальну й валідаційну вибірки
Ви дізналися, що використання лише тренувальних даних без валідаційної вибірки призводить до проблеми, яку називають перенавчанням (overfitting). Коли відбувається перенавчання, модель дуже добре прогнозує дані для тренувальних прикладів, але погано узагальнює на невідомі дані. Тобто модель буде малокорисною, адже не вміє узагальнювати. Щоб цього уникнути, використовуйте валідаційну вибірку.
У цій вправі ви створите тренувальну й валідаційну вибірки з наявного набору даних (тобто en_text, що містить 1000 англійських речень, і fr_text, що містить 1000 французьких речень). Ви використаєте 80% набору даних для тренування та 20% — для валідації.
Ця вправа є частиною курсу
Machine Translation з Keras
Інструкції до вправи
- Визначте послідовність індексів за допомогою
np.arange(), що починається з 0 і має розмірen_text. - Задайте
valid_indsяк останніvalid_sizeіндексів із цієї послідовності. - Визначте
tr_enіtf_fr, що містять речення за індексамиtrain_indsу спискахen_textтаfr_text. - Визначте
v_enіv_fr, що містять речення за індексамиvalid_indsу спискахen_textтаfr_text.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
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])