2017-11-08 3 views
1

안녕하세요 LSTM을 처리 할 때 Keras의 일괄 입력 모양으로 X, Y를 다시 분배하는 것과 관계가없는 것 같습니다.Keras LSTM 배치 입력 모양

현재 데이터베이스는 84119,190 pandas 데이터 프레임입니다. 거기에서 가져 오는 데이터는 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) 

편집 아래의 도움말을 문제를

감사를 해결합니다. 두 가지 모두 제가이 문제를 통해 생각하도록 도왔습니다. 아직도 그것을 이해하기 위해 할 일이 있습니다. 샘플의 (numberofSequence,timesteps,data_dim)

  • input_shape 요구에만 모양 : (timesteps,data_dim)

    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

    데이터의 특성은 무엇입니까? 귀하의 데이터는 길이가 1849 인 84419 개의 시퀀스로 구성되어 있습니까? 아니면 길이가 85k이고 길이가 189 개인 단일 시퀀스입니까? 모델의 주 목적은 무엇입니까? –

    +0

    제가 틀렸다면 말해주십시오.하지만 84119 길이의 189 시퀀스라고 생각합니다. 따라서 열 머리글은 순소득, 주당 현금 흐름, 주당 장부가 등 189 개 기능에 대한 것입니다. 행은 feb 2010과 같은 날짜입니다. 이것은 84119 값으로 돌아갑니다. – Atropos

    +0

    그리고 길이 4의 하위 시퀀스로 나누고 싶습니다. 맞습니까? –

    답변

    1
    • batch_input_shape는 배치의 크기를 필요로한다.

    지금 문제가 있습니다. 84199는 4의 배수가 아닙니다. 어떻게 4 단계로 재구성 할 수 있습니까?

    또한 같은 다른 문제가있을 수 있습니다 : 하나 하나의 긴 순서가있는 경우

    • , 왜 단계에서 분할?
    • 슬라이딩 윈도우 케이스를 사용하려면 다음과 같이 데이터를 준비해야합니다. 샘플 1 = [step1, step2, step3, step4]; 샘플 2 = [step2, step3, step4, step5]; 등등. 이것은 numberofSquence > 1 (90000 근처에있는 것)을 의미합니다.
    • 메모리/성능 문제로 인해 하나의 시퀀스가 ​​분할되는 경우 stateful=True을 사용해야하며 모든 에포크의 시작 부분에 model.reset_states()으로 전화해야합니다.