2016-11-14 42 views
1

RNNとケラスの新機能です。多対多のシナリオでLSTMを使用してTimeDistributed(dense())を明確にする必要があります

私は、逐次データ(必ずしも時系列ではなく順番に)でLSTMのパフォーマンスを従来の機械学習アルゴリズム(RFやGBMなど)と比較しようとしています。私のデータには、276の予測変数と、8564のレトロな観察結果(例えば、株式の会社の様々な情報が276の株価など)が含まれています。 LSTMは連続的な傾向を捕捉するのに優れているので、私は300のtime_stepを使用することに決めました。下の図から、多対多ネットワークを作成する作業があると思います。 (PIC:http://karpathy.github.io/2015/05/21/rnn-effectiveness/

enter image description here

それぞれピンクの箱のサイズ276(予測変数の数)と300(time_steps)1 batch.Howeverでこのようなピンクの箱のことで、私は私が設計方法を確認するために苦労しています各青いボックスは各インスタンスの出力(株価)でなければなりません。 Keras gihubフォーラム#2403#2654の他の記事から、私はTimeDistributed(Dense())を実装する必要があると思いますが、私は方法がわかりません。これは、それが動作するかどうかを確認するために私のコードです(train_idvから予測するデータとtrain_dvは株価です)

train_idv.shape 
#(8263, 300, 276) 
train_dv.shape 
#(8263, 300, 1) 
batch_size = 1 
time_Steps=300 
model = Sequential() 

model.add(LSTM(300, 
     batch_input_shape=(batch_size, time_Steps, train_idv.shape[2]), 
     stateful=True, 
     return_sequences=True)) 
model.add(Dropout(0.3)) 

model.add(TimeDistributed(Dense(300))) 

# Model Compilation 
model.compile(loss='mean_squared_error',optimizer='adam',metrics=['accuracy']) 

model.fit(train_idv, traindv, nb_epoch=1, batch_size=batch_size, verbose=2, shuffle=False) 

model.fitを実行すると、

トレースバック(最新の呼び出し最後にこのエラーが発生します): ファイル ""、行1、 ファイル "/home/user/.local/lib/python2.7/site-packages/keras/models.py"、行627、適合 sample_weight = sample_weight) ファイル "/home/user/.local/lib/python2.7/site-packages/keras/engine/training.py"、行1052、適合 batch_size = batch_size) ファイル "/home/user/.local/lib/python2.7/site-packages/keras/engine/training.py"、983行目、_standardize_user_data exception_prefix = 'model target') ファイル "/ home/user//local/lib/python2.7/site-packages/keras/engine/training.py "、111行目、standardize_input_data str(array.shape)) 例外:モデルターゲットをチェックしているときにエラーが発生しました:予想されるtimedistributed_4がシェイプを持つ(1、300、300)が配列を持っています(8263,300,1)

ここで、time_step = 1で正常に実行し、Dense(1)を最後の層として使用しました。しかし、train_dv(トレーニングでの出力)やTimeDistributed(Dense())の使い方を正しく設定するかどうかはわかりません。最後に、私は使用したい

trainPredict = model.predict(train_idv,batch_size=1) 

任意のデータの得点を予測する。

私はkeras githubフォーラムにthis questionと投稿しました。

+0

私はTimeDistributed(Dense)に注意します。モデルのある部分(例えばLSTMの間)では必須ですが、最終層として使用すると損失計算を破るように見えます。関連する問題については、Keras on githubを参照してください。https://github.com/fchollet/keras/issues/8055 – Phil

答えて

3

あなたの記事から、各LSTMタイムステップが単一のスカラーを正しく予測することを理解していますか?次に、Time Distributed Denseレイヤーは300ではなく1(つまりTimeDistributed(Dense(1)))の出力を持つはずです。

また、Time Distributed Denseを使用するケラスのレポの例があります。この例では

異なる可能なクラスが異なる可能桁の文字である場合一つは、各時間ステップのために(共有重みを有する)多クラス分類器を訓練するために基本的にたい:

# For each of step of the output sequence, decide which character should be chosen 
model.add(TimeDistributed(Dense(len(chars)))) 

時間ステップの数先の反復層によって定義される。

+0

help @cortexのおかげで、ネットワークは現在パフォーマンスが向上しています。 – Shikhar

関連する問題