CNTK_106A_LSTM_Timeseries_with_Simulated_Data を勉強を兼ねて改造してみました。
改造の目的は、最後の学習済みモデルを使った確認方法を変えてみます。
新しく取り入れる確認方法は、
『詳解ディープラーニング TensorFlow・Kerasによる時系列データ処理』 巣籠悠輔 著
第5章リカレントニューラルネットワーク -> 5.1.4.2 TensorFlow による実装
に出ている方法を取り入れてみます。
違いは、オリジナルは、確認のために使う入力のサイン波データを、全てトレーニング用の元データを使いますが、後者の方は、入力の最初の数ステップ(N+M-1)は、元のオリジナルのサイン波形を使いますが、その後は、全て、モデルからの予測データを入力にフィードバックさせて、サイン波を生成している点です。
改造の大雑把な手順。
1.プログラムを、学習&モデルの保存 と モデルのロード&評価 の2つに分割します。
2.学習部分の変更は、 下記点だけ
N=5 -> 25,M=5 ->18
#X, Y = generate_data(np.sin, np.linspace(0, 100, 10000, dtype=np.float32), N, M)
X, Y = generate_data(np.sin, np.linspace(0, 100, 1200, dtype=np.float32), N, M)
10000 -> 1200 に変更
注) M >= 1 です。M: 予測未来ステップ
3. 後者の評価部分は、
1) 入力の波形の最初の N+M ステップ を取り出し、
2) その中からNステップを用いてモデルの入力形式に (N,1) 変換して、モデルの判定を行います。
3) 出てきた判定値を、1)の N+M ステップ の後ろに追加して、さらに、N+M ステップ の先頭を1ステップ削除して。再度 2)モデルの判定 を繰り返します。
それでは、前半の学習&モデルの保存のコードは、こちらです。
後半のモデルのロード&評価確認のコードは、こちらです。