始める無料で始める

学習用データと検証用データへの分割

検証データセットを使わずに学習データだけでモデルを評価すると、過学習(overfitting)という問題が起こることを学びました。過学習が起きると、学習入力に対しては高い精度で予測できますが、未知のデータへの汎化性能が大きく低下します。つまり、モデルは汎化できないため実用性が下がってしまいます。これを避けるには、検証データセットを用います。

この演習では、手元のデータセット(1000 文の英語文を含む en_text と、対応する 1000 文のフランス語文を含む fr_text)から学習用データと検証用データを作成します。データセットの 80% を学習、20% を検証に使用します。

この演習はコースの一部です

Kerasで学ぶMachine Translation

コースを見る

演習の手順

  • np.arange() を使って、0 から始まり en_text のサイズを持つインデックス列を定義します。
  • インデックス列の最後の valid_size 個を取り出し、valid_inds として定義します。
  • リスト en_textfr_text から、train_inds の位置にある文を取り出し、それぞれ tr_entf_fr を定義します。
  • リスト en_textfr_text から、valid_inds の位置にある文を取り出し、それぞれ v_env_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])
コードを編集して実行