2017-03-09 14 views
1

私は、LSTMがKerasを使ってどのように動作するかを理解するために、ダミーの例を取り上げています。 データの入出力を再構成する方法に問題があります。Keras reshape input LSTM

とValueError:入力0は層の再発と互換性がありません:ndim = 3、見つけ予想ndim = 2

import random 
import numpy as np 

from keras.layers import Input, LSTM, Dense 
from keras.layers.wrappers import TimeDistributed 
from keras.models import Model 

def gen_number(): 
    return np.random.choice([random.random(), 1], p=[0.2, 0.8])  
truth_input = [gen_number() for i in range(0,2000)]  
# shift input by one 
truth_shifted = truth_input[1:] + [np.mean(truth_input)]  
truth = np.array(truth_input) 
test_ouput = np.array(truth_shifted)   
truth_reshaped = truth.reshape(1, len(truth), 1)  
shifted_truth_reshaped = test_ouput.reshape(1, len(test_ouput), 1) 
yes = Input(shape=(len(truth_reshaped),), name = 'truth_in')  
recurrent = LSTM(20, return_sequences=True, name='recurrent')(yes)  
TimeDistributed_output = TimeDistributed(Dense(1), name='test_pseudo')(recurrent)  
model_built = Model(input=yes, output=TimeDistributed_output)  
model_built.compile(loss='mse', optimizer='adam')  
model_built.fit(truth_reshaped, shifted_truth_reshaped, nb_epoch=100) 

どのように私が正しく入力にデータを行う必要があるでしょうか?

+0

[ケラスLSTMの入力および出力シェイプの処理方法](http://stackoverflow.com/questions/39969717/how-to-process-input-and-output-shape-for-keras-lstm) ) –

答えて

1
yes = Input(shape=(len(truth_reshaped),), name = 'truth_in') 

レン(truth_reshaped)あなたは(1,2000,1)のようにそれを形ので、1を返します。ここで最初の1はシーケンスの数、2000はシーケンス内のタイムステップの数、2番目の1はシーケンスの各要素の値の数です。

だからあなたの入力は、入力が長さlenのシーケンス(真実、1)と要素のための1の大きさとなり、ネットワークに教えてくれます

yes = Input(shape=(len(truth),1), name = 'truth_in') 

でなければなりません。