Tensorflow

Tensorflowでドル円予測をしてみました(4)

こちらの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のコースのビットコインの予測でもベースラインより悪い結果でしたので、予想通りといえば予想通りです。
では、次回はハイパーパラメータをチューニングしていきたいと思います。