最適化パラメータを変更する
最適化に実際に取り組んでみましょう。ここでは、極端に小さい学習率、極端に大きい学習率、そして「ちょうどよい」学習率でモデルを最適化してみます。演習を実行したあとは結果を確認し、損失関数の値が小さいほど良いことを思い出してください。
この演習では、前の分類モデル(Titanic の生存者予測)で使用した予測変数と目的変数をあらかじめ読み込んであります。学習率を変更するたびに最適化を最初からやり直して、公平に各学習率の比較ができるようにしたいところです。そのため、未学習のモデルを作成する関数 get_new_model() を用意しています。
この演習はコースの一部です
Pythonで学ぶDeep Learning入門
演習の手順
tensorflow.keras.optimizersからSGDをインポートします。- 試す学習率のリスト
lr_to_testを作成します。中身は.000001、0.01、1とします。 forループでlr_to_testを反復しながら、次を行います。get_new_model()関数を使って、新しい未最適化モデルを構築します。SGD()コンストラクタでキーワード引数lr=lrを用いて、my_optimizerというオプティマイザを作成します。- モデルをコンパイルします。
optimizerには上で作成した SGD オブジェクトを指定し、これは分類問題なのでlossには'categorical_crossentropy'を使用します。 predictorsとtargetを使ってモデルを学習させます。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Import the SGD optimizer
____
# Create list of learning rates: lr_to_test
lr_to_test = ____
# Loop over learning rates
for lr in lr_to_test:
print('\n\nTesting model with learning rate: %f\n'%lr )
# Build new model to test, unaffected by previous models
model = ____
# Create SGD optimizer with specified learning rate: my_optimizer
my_optimizer = ____
# Compile the model
____
# Fit the model
____