学習用データと検証用データへの分割
検証データセットを使わずに学習データだけでモデルを評価すると、過学習(overfitting)という問題が起こることを学びました。過学習が起きると、学習入力に対しては高い精度で予測できますが、未知のデータへの汎化性能が大きく低下します。つまり、モデルは汎化できないため実用性が下がってしまいます。これを避けるには、検証データセットを用います。
この演習では、手元のデータセット(1000 文の英語文を含む en_text と、対応する 1000 文のフランス語文を含む fr_text)から学習用データと検証用データを作成します。データセットの 80% を学習、20% を検証に使用します。
この演習はコースの一部です
Kerasで学ぶMachine Translation
演習の手順
np.arange()を使って、0 から始まりen_textのサイズを持つインデックス列を定義します。- インデックス列の最後の
valid_size個を取り出し、valid_indsとして定義します。 - リスト
en_textとfr_textから、train_indsの位置にある文を取り出し、それぞれtr_enとtf_frを定義します。 - リスト
en_textとfr_textから、valid_indsの位置にある文を取り出し、それぞれv_enとv_frを定義します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
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])