RNN(LSTM)を使用して時系列ベクトルを予測する(Theano)


19

私は非常に単純な問題を抱えていますが、それを解決する適切なツールを見つけることができません。

同じ長さのベクトルのシーケンスがいくつかあります。ここで、これらのシーケンスのトレーニングサンプルでLSTM RNNをトレーニングし、いくつかのプライミングベクトルに基づいて長さのベクトルの新しいシーケンスを予測するようにします。n

これを行う簡単な実装は見つかりません。私の基本言語はPythonですが、何日間もインストールされないものはすべて保持されます。

Lasagneを使用しようとしましたが、RNNの実装はまだ準備ができておらず、別個のパッケージnntoolsにあります。とにかく、私は後者を試しましたが、それを訓練する方法を理解できず、いくつかのテストベクトルでそれを準備し、新しい人を予測させることができません。ブロックも同じ問題です-LSTM RNNのドキュメントはありませんが、動作する可能性のあるクラスと関数がいくつかあるようです(例:)blocks.bricks.recurrent

そこいくつかのTheanoにおけるRNN LSTMの実装、などがあるGroundHogtheano-rnntheano_lstmおよびいくつかの論文のためのコードは、しかし、それらの非は私がやりたいことがどのようにチュートリアルやガイドを持っています。

私が見つけた唯一の使用可能な解決策は、Pybrainを使用することでした。しかし、残念なことに、Theanoの機能(主にGPU計算)が欠けており、孤立しています(新しい機能やサポートはありません)。

誰が私が求めているものを見つけることができる場所を知っていますか?ベクトルのシーケンスを予測するためにRNN LSTMを使いやすいですか?

編集:

私はこのようにケラスを試しました:

from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.layers.embeddings import Embedding
from keras.layers.recurrent import LSTM

model = Sequential()
model.add(Embedding(12, 256))
model.regularizers = []
model(LSTM(256, 128, activation='sigmoid', 
               inner_activation='hard_sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(128, 12))
model.add(Activation('sigmoid'))
model.compile(loss='mean_squared_error', optimizer='rmsprop')

しかし、フィットしようとするとこのエラーが発生します model.fit(X_train, y_train, batch_size=16, nb_epoch=10)

IndexError: index 800 is out of bounds for axis 1 with size 12

while X_trainy_trainは、配列の配列(長さ12)です。例えば[[i for i in range(12)] for j in range(1000)]


1
すべてのシーケンスの長さが同じ場合、なぜRNNが必要なのですか?ANNを介した静的入力ベクトルのトレーニングは、より簡単かつ高速になります。
itdxer

ベクトルは時系列から取得されます。だからRNNが必要だと思う?
kotrfa

1
RNNは、入力または出力ベクトルサイズがわからない場合のタスクに最適です。たとえば、写真で見ることができるものを英語で記述するネットワークを構築したいので、入力は静的な画像でも構いませんが、出力は写真で見ることができるものによって異なります。テキスト翻訳を取得する別の例では、入力と出力の両方が不明です。
itdxer

説明をありがとう。したがって、このタスクでRNNを使用する理由はありません。OK。
kotrfa

2
@itdxerのコメントは誤解を招くものです。データがどこでも同じ長さであっても、RNNを使用することは有益です。RNNは、主にシーケンシャルな性質であるというデータの仮定を導入します。たとえば、時間軸に沿った変換はRNNによって適切に処理されますが、フィードフォワードメソッドによって処理されるわけではありません。それを実現するには、さらに多くのトレーニングデータが必要であり、さらに多くのパラメーターを推定する必要があります。RNNの代わりにANNを使用すると、ANNがクラッシュして焼きつく場合が多くあります。
バイエルジ

回答:



5

次のことをお勧めします。

0)テアノは本当に強力ですが、はい、タラは時には難しいかもしれません

:1)私はbrezeチェックアウトするあなたを示唆しているであろうhttps://github.com/breze-no-salt/breze/blob/master/notebooks/recurrent-networks/RNNs%20for%20Piano%20music.ipynb少し簡単です理解され、LSTMモジュールも備えています。さらに、興味深い選択肢は、ハーバードによる自動グラッドです。これは、numpy関数https://github.com/HIPS/autograd/blob/master/examples/lstm.pyの自動シンボリック差別化を行うため、何が起こっているかを簡単に理解できます。

2)私はpythonファンですが、これは私の個人的な好みです。Torch7の使用は、ニューラルネットワークにとって最も使いやすいフレームワークであり、Google DeepmindおよびFacebook AIでも使用されていると考えましたか?RNNに関するhttp://karpathy.github.io/2015/05/21/rnn-effectiveness/についてのこの非常に興味深いブログ投稿を確認できます。さらに、投稿のgithubリポジトリでLSTM実装を使用できますが、代わりにrnnパッケージhttps://github.com/Element-Research/rnnがあります


1
ここ数週間、カルパシーの作品を無事に使用しました。残念ながら、文字のシーケンスではなくベクトルを予測するために彼のアルゴリズムを微調整することはできません。また、私はLuaにあまり詳しくないからです。したがって、私は受動的に Torch7を使用しましたが、あまりフレンドリーではありません。ありがとう
-kotrfa

SNN

1秒ごとに測定した12個の要素のベクトルがあります。ネットをトレーニングし、たとえば5つのベクトル(長さ12)でプライミングし、次のベクトルを予測させたいと思います。これ以上何もない。Kerasを使用して、質問を更新しました。
kotrfa

ベクトルが時系列からのものであっても、そのための単純なフィードフォワードを使用することもできます。シーケンスの数が一定であることを確認してください。
ヤニスアサエル

Karpathyのような私が読んだいくつかの記事から、私はLSTMがシーケンスに最適な選択であることを理解していますか?シンプルフィードフォワードNNには「メモリ機能」がありますか?
kotrfa

0

Theanoで時系列を予測するLSTMをテストしました。滑らかな曲線の場合、適切に予測できることがわかりました。しかし、いくつかのジグザグ曲線の場合。予測するのは難しいです。詳細な記事は以下のとおりです 。LSTMを使用した時間シーケンスの予測

予測結果は次のように表示できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.