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回まわしで予測値を求めます。
- for 文作成
5回まわす for 文を作成します。
for i in range(5): - future_test 配列形状変換
future_test 配列を shape=(1, 20, 1) の形状に変換し
test_data_f = np.reshape(future_test, (1, 20, 1))
とします。
test_data_f は test_dataset と同じ配列形状になりました。 - 1つ先を予測
1つ先の予測値 batch_predict を求めます。
batch_predict = model.predict(test_data_f) - 最も古いデ-タ削除
20個のデ-タのなかで最も古いデ-タを削除します。
future_test = np.delete(future_test, 0)
1個減って future_test は 19個となりました。 - 予測したデ-タ追加
新たに予測した batch_predict を future_test の最後に追加します。
1個増えて future_test は 20個に戻りました。
future_test = np.append(future_test, batch_predict) - 予測値を予測結果配列に追加
予測したデ-タ 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 をプロットします。