J'ai un problème très simple mais je ne trouve pas le bon outil pour le résoudre.
J'ai une séquence de vecteurs de même longueur. Maintenant, je voudrais former LSTM RNN sur un échantillon de train de ces séquences et ensuite le faire pour prédire une nouvelle séquence de vecteurs de longueur basée sur plusieurs vecteurs d' amorçage .
Je ne trouve pas de mise en œuvre simple qui ferait cela. Ma langue de base est Python, mais tout ce qui ne s'installe pas pendant des jours est valable.
J'ai essayé d'utiliser Lasagne , mais l'implémentation de RNN n'est pas encore prête et elle est dans un paquet séparé nntools . Quoi qu'il en soit, j'ai essayé le dernier mais je ne peux pas comprendre comment l'entraîner, puis l'amorcer avec des vecteurs de test et le laisser prédire le (s) nouveau (s). Les blocs sont le même problème - aucune documentation n'est disponible pour LSTM RNN, bien qu'il semble qu'il existe certaines classes et fonctions qui pourraient fonctionner (par exemple blocks.bricks.recurrent
).
Il y a plusieurs de mise en œuvre RNN LSTM dans Théano, comme GroundHog
, theano-rnn
, theano_lstm
et code pour des papiers, mais non de ceux -ci ont tutoriel ou de guide comment faire ce que je veux.
La seule solution utilisable que j'ai trouvée était d'utiliser Pybrain. Mais malheureusement, il manque les fonctionnalités de Theano (principalement le calcul GPU) et est orphelin (pas de nouvelles fonctionnalités et support).
Est-ce que quelqu'un sait où je pourrais trouver ce que je demande? Facile à travailler avec RNN LSTM pour prédire les séquences de vecteurs?
Éditer:
J'ai essayé Keras comme ceci:
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')
mais je reçois cette erreur en essayant de l'adapter 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
tandis que X_train
et y_train
sont des tableaux de tableaux (de longueur 12), p.ex.[[i for i in range(12)] for j in range(1000)]
la source
Réponses:
J'ai finalement trouvé un moyen et je l'ai documenté sur mon blog ici .
Il y a comparaison de plusieurs frameworks et ensuite aussi d'une implémentation dans Keras.
la source
Je suggérerais ce qui suit:
0) Theano est vraiment puissant mais oui la morue peut parfois être difficile à démarrer
1) Je vous suggère de consulter breze: https://github.com/breze-no-salt/breze/blob/master/notebooks/recurrent-networks/RNNs%20for%20Piano%20music.ipynb qui est légèrement plus facile à comprendre et dispose également d'un module LSTM. En outre, un choix intéressant est autograd par Harvards, qui fait une différenciation symbolique automatique des fonctions numpy https://github.com/HIPS/autograd/blob/master/examples/lstm.py et donc vous pouvez facilement comprendre ce qui se passe.
2) Je suis un fan de python mais c'est ma préférence personnelle. Avez-vous envisagé d'utiliser Torch7 est le cadre le plus convivial pour les réseaux de neurones et est également utilisé par Google Deepmind et Facebook AI? Vous pouvez consulter cet article de blog très intéressant sur les RNN http://karpathy.github.io/2015/05/21/rnn-effectiveness/ . De plus, une implémentation LSTM est disponible dans le référentiel github de la publication, tandis qu'une alternative est le package rnn https://github.com/Element-Research/rnn .
la source
J'ai testé LSTM prédisant une séquence temporelle avec Theano. J'ai trouvé que pour une courbe lisse, elle peut être prédite correctement. Cependant pour une courbe en zigzag. C'est difficile à prévoir. L'article détaillé est le suivant: Prédire la séquence temporelle avec LSTM
Le résultat prévu peut être affiché comme suit:
la source