RNNとケラスの新機能です。多対多のシナリオでLSTMを使用してTimeDistributed(dense())を明確にする必要があります
私は、逐次データ(必ずしも時系列ではなく順番に)でLSTMのパフォーマンスを従来の機械学習アルゴリズム(RFやGBMなど)と比較しようとしています。私のデータには、276の予測変数と、8564のレトロな観察結果(例えば、株式の会社の様々な情報が276の株価など)が含まれています。 LSTMは連続的な傾向を捕捉するのに優れているので、私は300のtime_stepを使用することに決めました。下の図から、多対多ネットワークを作成する作業があると思います。 (PIC:http://karpathy.github.io/2015/05/21/rnn-effectiveness/)
それぞれピンクの箱のサイズ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と投稿しました。
私はTimeDistributed(Dense)に注意します。モデルのある部分(例えばLSTMの間)では必須ですが、最終層として使用すると損失計算を破るように見えます。関連する問題については、Keras on githubを参照してください。https://github.com/fchollet/keras/issues/8055 – Phil