時系列データを予測するためにTensorFlowのRNNを用いた予測をしています。
しかしどう組んでも以下の図のように学習曲線が直線にしかなりません。色々な層を作って試しましたが一向に時系列の予測にならないので、NNについて知見のある方、ご指導お願いいたします。
以下、コードになります。
python
1import pandas as pd 2import numpy as np 3 4from keras.models import Sequential 5from keras.optimizers import Adam 6from keras.callbacks import EarlyStopping 7from keras.layers import Dense 8from keras.layers.recurrent import LSTM 9 10import warnings 11warnings.filterwarnings('ignore') 12 13df = pd.read_csv('df.csv') 14 15def _load_data(data, n_prev = 3): 16 docX, docY = [], [] 17 for i in range(len(data)-n_prev): 18 docX.append(data.iloc[i:i+n_prev].as_matrix()) 19 docY.append(data.iloc[i+n_prev].as_matrix()) 20 alsX = np.array(docX) 21 alsY = np.array(docY) 22 return alsX, alsY 23 24def train_test_split(df, test_size=0.4, n_prev = 3): 25 ntrn = round(len(df) * (1 - test_size)) 26 ntrn = int(ntrn) 27 X_train, y_train = _load_data(df.iloc[0:ntrn], n_prev) 28 X_test, y_test = _load_data(df.iloc[ntrn:], n_prev) 29 return (X_train, y_train), (X_test, y_test) 30 31length_of_sequences = 3 32(X_train, y_train), (X_test, y_test) = train_test_split(df, n_prev =length_of_sequences) 33 34max_len = 3 35dim = 1 36input_shape=(max_len, dim) 37epochs = 20 38batch_size = 3 39 40model = Sequential() 41model.add(LSTM(units=128, input_shape=input_shape, return_sequences = True)) 42model.add(LSTM(units=128, input_shape=input_shape, return_sequences = True)) 43model.add(LSTM(units=128, input_shape=input_shape, return_sequences = True)) 44model.add(LSTM(units=128, input_shape=input_shape)) 45model.add(Dense(input_shape[1],activation="linear")) 46 47model.compile(loss="mse", optimizer=Adam(lr=10)) 48 49early_stopping = EarlyStopping(monitor='mse', patience=3) 50 51hist = model.fit( 52 X_train, 53 y_train, 54 batch_size=batch_size, 55 epochs=epochs, 56 callbacks=[early_stopping] 57)
あなたの回答
tips
プレビュー