Python Colaboratory

ModelCheckpoint コ-ルバック確認

ModelCheckpoint コ-ルバックを使って最も性能の良いモデルを保存したはずなので その内容を確認していきます。
保存してある最も性能の良いモデルを呼び出します。
ファイル名は jena_dense.keras
保存フォルダは Google ドライブ \Colab Notebooks の中の \my_data でした。

   
model = keras.models.load_model(
  "drive/MyDrive/Colab Notebooks/my_data/jena_dense.keras")

predict メソッド

predict メソッドを使い、これに TensorFlow の Dataset オブジェクトを指定すると 最も性能の良いモデルを使用して予測値が含まれた NumPy 配列を返してくれます。
ただし、この配列は
[[-1.4902422]
 [-1.3825781]
・・・・・
 [-1.3505987]]
の様な縦型の配列になっています。
3種の timeseries_dataset デ-タを作成 のなかで、
テストデ-タセット test_dataset
を作成しました。
これを predict メソッドに入れて、予測値を求めることにします。
pre = model.predict(test_dataset)
これを横型の配列にして見やすくします、他に目的はありません。
縦型 縦ベクトルの配列に対して reshape(-1)とすると、 その配列を要素とする横型 横ベクトルの配列となります。
pre1 = np.reshape(pre, (-1))
print(f"Test 予測値:")
print(pre1)
pre1 の内容を見ると、予測値とは言うものの、最後の値以外は、 train_dataset の目的値 targets とほぼ同じ値が確認できるだけです。
何のことはない、やっと1つ先の予測値がわかっただけです。

5つ先の予測値

5つ先までの予測値を求めます。
test_dataset の最後の配列を future_test とします。
future_test = inputs_t[-1:]
inputs_t については 各デ-タセットの内容表示/テストデ-タセット表示 を参照してください。
これは 20個のデ-タから構成されており、以下のようになっています。

  
tf.Tensor(
[[-1.27605491 -0.93608776 -0.59612061 -0.25615346  0.08381368  0.42378083
   0.76374798  1.10371513  1.44368227  1.78364942  1.44368227  1.10371513
   0.76374798  0.42378083  0.08381368 -0.25615346 -0.59612061 -0.93608776
  -1.27605491 -1.58202534]], shape=(1, 20), dtype=float64)

そして、future_result は空にしておきます。
future_result = []

それではル-プ5回まわしで予測値を求めます。

  1. for 文作成

    5回まわす for 文を作成します。
    for i in range(5):

  2. future_test 配列形状変換

    future_test 配列を shape=(1, 20, 1) の形状に変換し
    test_data_f = np.reshape(future_test, (1, 20, 1))
    とします。
    test_data_f は test_dataset と同じ配列形状になりました。

  3. 1つ先を予測

    1つ先の予測値 batch_predict を求めます。
    batch_predict = model.predict(test_data_f)

  4. 最も古いデ-タ削除

    20個のデ-タのなかで最も古いデ-タを削除します。
    future_test = np.delete(future_test, 0)
    1個減って future_test は 19個となりました。

  5. 予測したデ-タ追加

    新たに予測した batch_predict を future_test の最後に追加します。
    1個増えて future_test は 20個に戻りました。
    future_test = np.append(future_test, batch_predict)

  6. 予測値を予測結果配列に追加

    予測したデ-タ batch_predict を予測結果配列 future_result に追加します。
    future_result = np.append(future_result, batch_predict)


ここまでをまとめると次のようになります。
colab-21 まとめ


model = keras.models.load_model(
  "drive/MyDrive/Colab Notebooks/my_data/jena_dense.keras")
pre = model.predict(test_dataset)
pre1 = np.reshape(pre, (-1))
print(f"Test 予測値:")
print(pre1)

future_test = inputs_t[-1:]
print(future_test)
future_result = []
for i in range(5):
  test_data_f = np.reshape(future_test, (1, 20, 1))
  batch_predict = model.predict(test_data_f)
  future_test = np.delete(future_test, 0)
  future_test = np.append(future_test, batch_predict)
  future_result = np.append(future_result, batch_predict)
print("future_result :")
print(future_result)

予測値プロット

テストデ-タセット test_dataset を使って予測し、さらにその5つ先まで予測しました。
これらの値をプロットし、見える化します。
test_dataset を使用した予測値 pre はすでに計算済ですが、プロットしようとする X軸の値がまだ明確になっていません。
pre の表示位置配列 xx1 を設定します。
今回使用しているデ-タ(サンプル個数) raw_data の総数は 101個(0~100)でした。
test_dataset による最初の予測値は、
sequence_length (20個 0~19番目)のデ-タから予測しますので、20番目の位置にプロットされるべきです。
そして、 test_dataset による最後の予測値は、
sequence_length (20個 80~100番目)のデ-タから予測しますので、101番目の位置にプロットされるべきです。
これをコ-ド化すると
len_raw_data = len(raw_data)
xx1 = np.arange(sequence_length, len_raw_data + 1)
結果は、
array([20,21,22,・・・・,100,101])
となります。
--終点は (101+1)-1 となることに注意--

ここまでで、予測値プロットの準備ができました。
続いて5つ先までの予測値 future_result をプロットします。


  • 5つ先の予測値プロット に進む
  • keras-test-53 動作確認 に戻る
  • 全結合モデルファイルまとめ に戻る
  • コ-ルバックを使用 に戻る
  • 全結合モデル後半作成 に戻る
  • 大域最適解みつからず に戻る
  • Keras モデルの構築 に戻る
  • keras-test-51 動作確認 に戻る
  • 各デ-タセットの内容表示 に戻る
  • 3種の timeseries_dataset デ-タを作成 に戻る
  • CSV timeseries_dataset まとめ に戻る
  • CSV デ-タ timeseries_dataset 作成 に戻る
  • 標準化した dummy_dataset を作成 に戻る
  • dummy_dataset の内容表示 に戻る
  • RNN の理解-Ⅱ に戻る
  • 時系列のためのディ-プラ-ニング に戻る
  • ロ-ソク足表示ファイルまとめ に戻る
  • ロ-ソク足本体の表示 に戻る
  • Colab で mplfinance を使用 に戻る
  • CSV ファイルの読込 に戻る
  • Colab を始める に戻る
  • 70VPS に戻る