正弦波 (sine wave) の RNN (LSTM) による予測の TensorFlow による実装
定番ですが、sine wave の RNN による予測をやっていなかったので、例によって TensorFlow で簡単に実装してみました。普通の regression と異なるのは、履歴 sequence から next value を予測することです。
訓練サンプルデータは以下のように安直に生成。取りあえずノイズなしです :
x = np.sin(np.arange(0, 10*math.pi, 0.01)) seq = [] next_val = [] steps_of_history = 100 for i in range(0, len(x) - steps_of_history, 1): seq.append(x[i: i + steps_of_history]) next_val.append(x[i + steps_of_history]) seq = np.reshape(seq, [-1, steps_of_history, 1]) next_val = np.reshape(next_val, [-1, 1]) trainX = np.array(seq) trainY = np.array(next_val)
モデルは下左図の tensorboard の出力のように LSTM 層を3つ並べて FC (全結合)層を追加してみましたが、実際には simple な RNN 層 + FC 層でも十分だったようです。
下右図は損失グラフで、20 epochs も必要なし。
![]() | ![]() |
問題が単純過ぎたようですが、一応 matplotlib で描画してみました。
履歴 sequence の長さは 100 です :
以上