Python Colaboratory Ⅳ
compile メソッド
引き続き LSTM モデルを構築していきます。
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 や LSTM の時には 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 と言う名前のオブジェクトで受け取ります。
compile メソッドも含めてまとめると次のようになります。
# lstm-test-3.ipynb model.compile(optimizer="rmsprop", loss="mse", metrics=["mae"]) history = model.fit( train_dataset, epochs=40, # verbose=0, validation_data=val_dataset, callbacks=callbacks_list)
損失曲線表示
訓練デ-タと検証デ-タの損失[平均絶対誤差(MAE)]曲線をプロットします。
history オブジェクトには history というフィ-ルドがあります。
このなかに、損失 loss, val_loss の値が保存されています。
この値を matplotlib を使ってプロットし見える化します。
# lstm-test-4.ipynb 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()
5つ先の予測値
あとは5つ先の予測値を求めるだけです。
これについては
ModelCheckpoint コ-ルバック確認
及び
5つ先の予測値プロット
で説明した内容のファイルをコピするだけです。
具体的にはそのファイル内容は
全結合モデル結果表示ファイルまとめ
の中にあるファイル keras-test-54.ipynb の赤字部分になります。
なお、最も性能の良いモデルファイルの名前は jena_ltms.keras に変更されていますので注意してください。
ここまでで、LSTM モデルファイルにコ-ルバック、compile メソッド、fit メソッドを組込み、
history オブジェクトを構築し、予測値を計算する方法を説明しました。
引き続き、これまでの各デ-タセットと合体し、LSTM モデルファイルをまとめます。