2017-11-08 32 views
1

こんにちは、私は、LSTMを扱うときに、X、YとKerasのバッチ入力シェイプとの関係を把握していないようです。Keras LSTMバッチ入力形状

現在のデータベースは84119,190パンダのデータフレームです。私はここから取り込んでいます.XとYに分かれていますので、機能は189です。あなたが私が間違っている場所を指摘できれば、 、寸法)それは評価されるだろう。

import numpy as np 
import pandas as pd 
from keras.models import Sequential 
from keras.layers import LSTM  

# load dataset 
training_data_df = pd.read_csv("C:/Users/####/python_folders/stock_folder/XYstore/Big_data22.csv") 


X = training_data_df.drop('Change Month End Stock Price', axis=1).values 
Y = training_data_df[['Change Month End Stock Price']].values 


data_dim = 189 
timesteps = 4 
numberofSequence = 1 

X=X.reshape(numberofSequence,timesteps,data_dim) 
Y=Y.reshape(numberofSequence,timesteps, 1) 
model = Sequential() 
model.add(LSTM(200, return_sequences=True,batch_input_shape=(timesteps,data_dim))) 
model.add(LSTM(200, return_sequences=True)) 
model.add(LSTM(100,return_sequences=True)) 
model.add(LSTM(1,return_sequences=False, activation='linear')) 
model.compile(loss='mse', 
       optimizer='rmsprop', 
       metrics=['accuracy']) 
model.fit(X,Y,epochs=100) 

編集発行し、以下のヘルプに

感謝を修正します。どちらも問題を考えるのに役立ちました。それを本当に理解するためにやるべきことがまだあります。

import numpy as np 
import pandas as pd 
from keras.models import Sequential 
from keras.layers import LSTM 




training_data_df = pd.read_csv("C:/Users/TurnerJ/python_folders/stock_folder/XYstore/Big_data22.csv") 

training_data_df.replace(np.nan,value=0,inplace=True) 
training_data_df.replace(np.inf,value=0,inplace=True) 
training_data_df = training_data_df.loc[279:,:] 
X = training_data_df.drop('Change Month End Stock Price', axis=1).values 
Y = training_data_df[['Change Month End Stock Price']].values 


data_dim = 189 
timesteps = 1 
numberofSequence = 83840 

X=X.reshape(numberofSequence,timesteps,data_dim) 
Y=Y.reshape(numberofSequence,timesteps, 1) 
model = Sequential() 
model.add(LSTM(200, return_sequences=True,batch_input_shape=(32,timesteps,data_dim))) 
model.add(LSTM(200, return_sequences=True)) 
model.add(LSTM(100,return_sequences=True)) 
model.add(LSTM(1,return_sequences=True, activation='linear')) 
model.compile(loss='mse', 
       optimizer='rmsprop', 
       metrics=['accuracy']) 


model.fit(X,Y,epochs=100) 
+0

データの性質は?あなたのデータは長さ189の84419個の配列から成っていますか?それとも、189個の特徴と85Kの長さを持つ単一の配列ですか?あなたのモデルの主な目的は何ですか? –

+0

私は間違っていると教えてくださいが、私はそれが84119の長さの189シーケンスだと思います。したがって、列見出しは、純利益、1株当たりのキャッシュフロー、1株当たりの簿価... 189の機能のようなものです。行はfeb 2010などの日付です。これは84119値に戻ります。 – Atropos

+0

そして、それらを長さ4の部分列に分割したいと思いますか? –

答えて

1
  • batch_input_shapeバッチの大きさが必要:(timesteps,data_dim)(numberofSequence,timesteps,data_dim)
  • input_shape
  • は、試料の形状のみを必要とします。

今、問題があります... 84199は4の倍数ではありません。どのように4のステップでそれを再構成することができますか?

ものような他の問題があるかもしれません:あなたは1つの長いシーケンスを持っている場合は

  • 、なぜステップでそれを分割?
  • スライディングウィンドウのケースを使用する場合は、次のようにデータを準備する必要があります。サンプル1 = [step1、step2、step3、step4];サンプル2 = [ステップ2、ステップ3、ステップ4、ステップ5]。等々。これはnumberofSquence > 1(90000に近いもの)を意味します
  • メモリー/パフォーマンスの問題のために1つのシーケンスを分割する場合は、stateful=Trueを使用し、各エポックの冒頭にmodel.reset_states()を呼び出す必要があります。