質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1304閲覧

RNNおよびLSTMによる時系列予測を実装したが上手く学習できない

pypypy.bom

総合スコア31

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2020/04/01 05:50

編集2022/01/12 10:55

##行ったこと
時系列予測についてRNNとLSTMの比較が行えるように実装を行った。
中間層の調整や入力時系列の長さを変えるなど行いましたが、同様の結果となってしまった。

##問題点
予測値があまりにも見当違いの値となってしまっている(波形を追うこともできていない)。
→学習がうまく行えていないのではないかと考えた。
→プログラムそのもののミスがあるかもしれないのですが、エラーは一切出ておりません。

##実現したいこと
ある1つの時系列波形を学習し予測を行うこと。

python

1import pandas as pd 2import numpy as np 3import matplotlib.pyplot as plt 4from sklearn import model_selection 5 6#データの取得(書き換え) 7data1 = pd.read_csv('C:/***/***.csv') 8 9x_data = data1.loc[0:8020:10,['num']].values 10Fz_data = data1.loc[0:8020:10,['data']].values 11 12plt.plot(x_data, Fz_data) 13plt.show() 14 15n_rnn = 10 #時系列の数(長さ) 16n_sample = len(x_data) - n_rnn #サンプル数 17x = np.zeros((n_sample, n_rnn)) #入力 18t = np.zeros((n_sample,)) #正解、最後の時刻のみ 19 20for i in range(0, n_sample): 21 x[i] = Fz_data[i:i+n_rnn].T 22 t[i] = Fz_data[i+n_rnn] #入力の時系列より1つ後の値 23 24x = x.reshape(n_sample, n_rnn, 1) #(サンプル数、時系列の数、入力層のニューロン数) 25print(x.shape) 26t = t.reshape(n_sample, 1) #(サンプル数、入力層のニューロン数) 27print(t.shape) 28 29#-------------------------------------------------# 30#モデルの構築 31from keras.models import Sequential 32from keras.layers import Dense, SimpleRNN, LSTM 33 34batch_size = 128 #バッチサイズ 35n_in = 1 #入力層のニューロン数 36n_mid = 100 #中間層のニューロン数 37n_out = 1 #出力層のニューロン数 38 39#比較の為の通常のRNN 40model_rnn = Sequential() 41model_rnn.add(SimpleRNN(n_mid, input_shape=(n_rnn, n_in), return_sequences=False)) #最後の出力のみ使用 42model_rnn.add(Dense(n_out, activation="linear")) 43model_rnn.compile(loss="mean_squared_error", optimizer="sgd") 44print(model_rnn.summary()) 45 46#LSTM 47model_lstm = Sequential() 48model_lstm.add(LSTM(n_mid, input_shape=(n_rnn, n_in), return_sequences=False)) #最後の出力のみ使用 49model_lstm.add(Dense(n_out, activation="linear")) 50model_lstm.compile(loss="mean_squared_error", optimizer="sgd") 51print(model_lstm.summary()) 52 53#-------------------------------------------------# 54#学習 55 56from keras.callbacks import EarlyStopping 57import time 58 59epochs = 100 60 61early_stopping = EarlyStopping(monitor='val_loss', patience=10, verbose=1) 62#通常のRNN 63start_time = time.time() 64history_rnn = model_rnn.fit(x, t, epochs=epochs, batch_size=batch_size, verbose=1, callbacks=[early_stopping]) #verbose=1とすると学習過程が見られる 65print("学習時間 --RNN--:", time.time() - start_time) 66 67#LSTM 68start_time = time.time() 69history_lstm = model_lstm.fit(x, t, epochs=epochs, batch_size=batch_size, verbose=1, callbacks=[early_stopping]) 70print("学習時間 --LSTM--:", time.time() - start_time) 71 72#-------------------------------------------------# 73#学習の推移 74 75loss_rnn = history_rnn.history['loss'] 76loss_lstm = history_lstm.history['loss'] 77 78plt.plot(np.arange(len(loss_rnn)), loss_rnn, label='RNN') 79plt.plot(np.arange(len(loss_lstm)), loss_lstm, label='LSTM') 80plt.legend() 81plt.show() 82 83#-------------------------------------------------# 84#学習済みモデルの使用 85predicted_rnn = x[0].reshape(-1) 86predicted_lstm = x[0].reshape(-1) 87in_rnn = x[0].reshape(-1) 88in_lstm = x[0].reshape(-1) 89 90for i in range(0, n_sample): 91 y_rnn = model_rnn.predict(predicted_rnn[-n_rnn:].reshape(1, n_rnn, 1)) 92 predicted_rnn = np.append(predicted_rnn, y_rnn[0][0]) 93 94 y_lstm = model_lstm.predict(predicted_lstm[-n_rnn:].reshape(1, n_rnn, 1)) 95 predicted_lstm = np.append(predicted_lstm, y_lstm[0][0]) 96 97#plt.plot(np.arange(len(y_test)), y_test, label="Training data") 98plt.plot(np.arange(len(predicted_rnn)), predicted_rnn, label="Predicted_RNN") 99plt.plot(np.arange(len(predicted_lstm)), predicted_lstm, label="Predicted_LSTM") 100plt.plot(np.arange(len(in_rnn)), in_rnn, label="input_RNN0") 101plt.plot(np.arange(len(in_lstm)), in_lstm, label="input_LSTM0") 102plt.legend() 103plt.show()

学習したい波形
イメージ説明

出力波形(inputの長さも変えてみるなどしています.)
イメージ説明

参考
イメージ説明

##使用環境
python3.6

##説明不足があれば解答いたします。
ご指摘よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問