Python Colaboratory
コ-ルバックを使用
ここまで、全結合モデルファイルを作成してきました。
引き続き、コ-ルバックを使用します。
- EarlyStopping
EarlyStopping コ-ルバックを使うと検証デ-タでの損失値が改善されなくなった時点で、 訓練を中止することができます。
第1引数には監視する損失関数名 loss の値 val_loss を指定します。
monitor="val_loss"
第2引数には悪化回数を設定します。
patience=2
今回は2回を設定しました。 - ModelCheckpoint
ModelCheckpoint コ-ルバックを使うと最も性能の良いモデルを保存することができます。
第1引数には保存用ファイル名 jena_dense.keras を設定します。
保存フォルダは Google ドライブ \Colab Notebooks の中に \my_data を作成しておきます。
save_best_only=True
とするとベストモデルが保存されます。
以上、2つのコ-ルバックをまとめ callbacks_list とすると次のようになります。
callbacks_list = [ keras.callbacks.EarlyStopping( monitor="val_loss", patience=2, ), keras.callbacks.ModelCheckpoint( "drive/MyDrive/Colab Notebooks/my_data/jena_dense.keras", save_best_only=True, ) ]
compile メソッド
学習プロセスを設定します。
設定する引数は3つです。
- オプティマイザ optimizer
損失関数に基づいてニュ-ラルネットワ-クをどのように更新するのかを指示します。
指示が不適切だと、局所最適解しか見つからず大域最適解を見失います。
要するに学習率ηをどのようにして決めるかの設定手法を指示するのです。
なお、学習率については Keras モデルの構築/活性化関数 のところでも言及しました。
詳細については書籍等値は難しい数式等を使って説明されているのですが、 私は理解するまでに至りませんでした。
オプティマイザには
SGD
RMSprop
Adam
Adgrd
等がありますが、まずは何も考えず
rmsprop
を指定します。
optimizer="rmsprop"
これにより、学習率を適切な値に調整してくれます。 - 損失関数 loss
訓練中に最小化する数量を指定します。
損失関数を名前で指定します。
今回は
平均二乗誤差(mean_squared_error)略して mse
とします。
損失関数にはいろいろ種類があるのですが mse は値が0に近づくと滑らかになる
すなわち微分値が0になる性質を持っているので 勾配降下法で重みを探す RNN には都合のよい損失関数であり mse の決め打ちで良いと考えられます。
loss="mse" - 指標 metrics
いろいろ種類があり学習したい内容に合った指標を決定します。
RNN の時には mae を指定するのが定跡のようです。
分類問題のケ-スでは accuracy(正解率)を指定するようです。
mae は平均絶対誤差(Mean Absolute Error)の略称です。
metrics="mae"
compile メソッドをまとめると次のようになります。
model.compile(optimizer="rmsprop", loss="mse", metrics=["mae"])
fit メソッド
モデルを適合させます。
fit()は訓練ル-プを実装するメソッドであり、設定する主な引数は5つです。
- 入力サンプル inputs
NumPy 配列または TensorFlow の Dataset オブジェクトを指定。
今回は後者 train_dataset を設定します。
これは 各デ-タセットの内容表示 の中で苦労して作成した訓練デ-タセットです。
やっとここで日の目を見ました。 - エポック epochs
エポックは入力サンプルに対して訓練を繰り返す回数。
EarlyStopping が発動されて訓練が中止されますので、大きめの値を設定します。
小さな値にすると EarlyStopping が発動される前に訓練は終了します。
今回は
epochs=40
とします。 - 進行状況表示 verbose
fit メソッドを実行するといろいろとフィティング状況を報告してきます。
進行状況表示なしにしたいときもあります。
そんなときは
verbose=0
とすると進捗状況なしで実行することができます。 - 検証デ-タ validation_data
NumPy 配列または TensorFlow の Dataset オブジェクトを指定。
今回は後者 val_dataset を設定します。
validation_data=val_dataset
これも 各デ-タセットの内容表示 の中で苦労して作成した検証デ-タです。
やっとここで日の目を見ました。 - コ-ルバック callbacks
このペ-ジの最初に作成したコ-ルバック作法も組み込みます。
callbacks 引数として設定します。
callbacks=callbacks_list
fit メソッドを history と言う名前のオブジェクトで受け取ります。
まとめると次のようになります。
history = model.fit( train_dataset, epochs=40, # verbose=0, validation_data=val_dataset, callbacks=callbacks_list)
損失曲線表示
訓練デ-タと検証デ-タの損失[平均絶対誤差(MAE)]曲線をプロットします。
history オブジェクトには history というフィ-ルドがあります。
このなかに、損失 loss, val_loss の値が保存されています。
この値を matplotlib を使ってプロットし見える化します。
from matplotlib import pyplot as plt loss = history.history["mae"] # 平均絶対誤差(MAE) val_loss = history.history["val_mae"] epochs = range(1, len(loss) + 1) plt.figure() plt.plot(epochs, loss, "bo", label="Training MAE") plt.plot(epochs, val_loss, "b", label="Validation MAE") plt.title("Training and Validation MAE") plt.legend() plt.show()
ここまでで、全結合モデルファイルにコ-ルバック、compile メソッド、fit メソッドを組込み、
history オブジェクトを構築しました。
引き続き、これまでの各デ-タセットと合体し、全結合モデルファイルをまとめます。