検証付きでモデルを学習する
ここでは、検証ステップを含めてニューラル機械翻訳モデルを学習する方法を学びます。
前の章で作成したnmtモデルが用意されています。さらに、Udacity Github Repoから取得した英語とフランス語の文でモデルを学習します。前の演習で用意された学習用の英語テキスト(tr_en)とフランス語テキスト(tf_fr)、および検証用の英語テキスト(v_en)とフランス語テキスト(v_fr)が与えられています。
モデルの学習には少し時間がかかるため、コードの実行もやや長くなります。
この演習はコースの一部です
Kerasで学ぶMachine Translation
演習の手順
sents2seqs関数を使って、v_enとv_frを変換し、検証データを作成します。sents2seqs関数を用いて、正しく前処理された入力と出力のバッチを取得します。- 入力(
en_x)と出力(de_y)を使って、単一バッチでnmtを学習させます。 v_en_xとv_de_y、さらにvalid_sizeをbatch_sizeとして指定し、nmtモデルを評価して検証精度を取得します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Convert validation data to onehot
v_en_x = ____(____, ____, onehot=____, reverse=____)
v_de_y = ____(____, ____, onehot=True)
n_epochs, bsize = 3, 250
for ei in range(n_epochs):
for i in range(0,train_size,bsize):
# Get a single batch of inputs and outputs
en_x = ____(____, tr_en[____:____], onehot=____, reverse=____)
de_y = sents2seqs(____, tr_fr[____:____], onehot=True)
# Train the model on a single batch of data
nmt.____(____, ____)
# Evaluate the trained model on the validation data
res = nmt.evaluate(____, ____, batch_size=valid_size, verbose=0)
print("{} => Loss:{}, Val Acc: {}".format(ei+1,res[0], res[1]*100.0))