Ich habe ein sehr einfaches Problem, aber ich kann kein passendes Werkzeug finden, um es zu lösen.
Ich habe eine Folge von Vektoren gleicher Länge. Jetzt möchte ich LSTM RNN auf dem Zugmuster dieser Sequenzen trainieren und es dann machen, um eine neue Sequenz von Vektoren der Länge basierend auf mehreren Priming- Vektoren vorherzusagen .
Ich kann keine einfache Implementierung finden, die dies tun würde. Meine Basissprache ist Python, aber alles, was seit Tagen nicht installiert wird, wird Bestand haben.
Ich habe versucht, Lasagne zu verwenden , aber die Implementierung von RNN ist noch nicht fertig und befindet sich in einem separaten Paket nntools . Wie auch immer, ich habe das letztere ausprobiert, aber ich kann nicht herausfinden, wie es trainiert werden soll. Dann habe ich es mit einigen Testvektoren vorbereitet und lasse es das / die Neue (n) vorhersagen. Blöcke sind das gleiche Problem - für LSTM RNN ist keine Dokumentation verfügbar, obwohl es anscheinend einige Klassen und Funktionen gibt, die funktionieren könnten (z blocks.bricks.recurrent
. B. ).
Es gibt mehrere Implementierung von RNN LSTM in Theano, wie GroundHog
, theano-rnn
, theano_lstm
und den Code für einige Papiere, aber nicht von denen haben Tutorial oder führt , wie zu tun , was ich will.
Die einzige brauchbare Lösung, die ich gefunden habe, war die Verwendung von Pybrain. Aber leider fehlen die Funktionen von Theano (hauptsächlich GPU-Berechnung) und sie sind verwaist (keine neuen Funktionen und Unterstützung).
Weiß jemand, wo ich finden könnte, wonach ich bitte? Einfach mit RNN LSTM zu arbeiten, um Sequenzen von Vektoren vorherzusagen?
Bearbeiten:
Ich habe Keras so ausprobiert:
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')
aber ich erhalte diesen Fehler, wenn ich versuche, ihn anzupassen 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_train
und y_train
sind Arrays von Arrays (Länge 12), z[[i for i in range(12)] for j in range(1000)]
quelle
Antworten:
Ich habe endlich einen Weg gefunden und ihn hier in meinem Blog dokumentiert .
Es werden mehrere Frameworks verglichen und dann auch eine Implementierung in Keras.
quelle
Ich würde folgendes vorschlagen:
0) Theano ist wirklich mächtig, aber ja, der Kabeljau kann manchmal schwierig sein
1) Ich empfehle Ihnen, breze: https://github.com/breze-no-salt/breze/blob/master/notebooks/recurrent-networks/RNNs%20for%20Piano%20music.ipynb auszuprobieren, was etwas einfacher ist zu verstehen und hat auch ein LSTM-Modul. Darüber hinaus bietet Harvards eine interessante Möglichkeit, die Numpy-Funktionen automatisch symbolisch zu unterscheiden: https://github.com/HIPS/autograd/blob/master/examples/lstm.py. Sie können also leicht nachvollziehen, was vor sich geht.
2) Ich bin ein Python-Fan, aber das ist meine persönliche Vorliebe. Haben Sie in Betracht gezogen, dass Torch7 das benutzerfreundlichste Framework für neuronale Netzwerke ist und auch von Google Deepmind und Facebook AI verwendet wird? Sie können diesen sehr interessanten Blog-Beitrag über RNNs unter http://karpathy.github.io/2015/05/21/rnn-effectiveness/ nachlesen . Zusätzlich ist eine LSTM-Implementierung im Github-Repo des Posts verfügbar, während eine Alternative das RNN-Paket https://github.com/Element-Research/rnn ist .
quelle
Ich habe LSTM getestet und mit Theano eine bestimmte Zeitsequenz vorhergesagt. Ich fand, dass für einige glatte Kurven es richtig vorhergesagt werden kann. Allerdings für einige Zick-Zack-Kurve. Es ist schwer vorherzusagen. Der detaillierte Artikel lautet wie folgt : Vorhersage der Zeitsequenz mit LSTM
Das vorhergesagte Ergebnis kann wie folgt angezeigt werden:
quelle