こちらのUdemyのコースでTensorflowを使ったビットコインの予測が紹介されていました。それを参考にドル円の予測をやってみました。
前回は学習データを作成しましたので、今回からいよいよモデルを作成し、実際に予測を行っていきたいと思います。
今回はスターティングポイントとして、以下のハイパーパラメータを使います。
- 128個の隠れ層とReLUアクティベーションを持つ1つのレイヤー
- リニアアクティベーションを持つ出力層
- AdamオプティマイザーとMAE損失関数
- バッチサイズは128
- エポック数100
まず、パフォーマンスが一番良かったモデルの状態を保存するために、チェックポイントコールバックを使います。各モデルで今後繰り返し使うので、以下のように関数化して作るようにします。
import os
def create_model_checkpoint(model_name, save_path="model_experiments"):
return tf.keras.callbacks.ModelCheckpoint(filepath=os.path.join(save_path, model_name),
verbose=0,
save_best_only=True)
以下のコードでモデルの作成を行います。
import tensorflow as tf
from tensorflow.keras import layers
tf.random.set_seed(1)
model_1 = tf.keras.Sequential([
layers.Dense(128, activation="relu"),
layers.Dense(1, activation="linear")
], name="model_1_dense")
model_1.compile(loss="mae",
optimizer=tf.keras.optimizers.Adam(),
metrics=["mae"])
model_1.fit(x=train_windows,
y=train_labels,
epochs=100,
verbose=1,
batch_size=128,
validation_data=(test_windows, test_labels),
callbacks=[create_model_checkpoint(model_name=model_1.name)])
エポック数89の時にもっともよいパフォーマンスが出たようで、その時のモデルの状態がファイルに保存されました。
一番パフォーマンスがよかったモデルを読み込みなおし、評価を行います。
model_1 = tf.keras.models.load_model("model_experiments/model_1_dense")
model_1.evaluate(test_windows, test_labels)
MAEは48ということで、ベースラインとして作成したナイーブモデルのMAEである38より悪い結果となりました。
グラフにプロットするとこのようになります。
Udemyのコースのビットコインの予測でもベースラインより悪い結果でしたので、予想通りといえば予想通りです。
では、次回はハイパーパラメータをチューニングしていきたいと思います。