21 votos

Utilizando RNN (LSTM) para la predicción de los vectores de series (Theano)

Tengo problema muy simple, pero no puedo encontrar una herramienta adecuada para resolverlo.

Tengo alguna secuencia de vectores de la misma longitud. Ahora me gustaría entrenar LSTM RNN en el tren de la muestra de estas secuencias, y luego hacen para predecir nueva secuencia de vectores de longitud $n$ basado en varios de cebado de los vectores.

No puedo encontrar la simple implementación que habría hecho esto. Mi idioma base es el de Python, pero nada de lo que no se instala por días se espera.

He intentado utilizar la Lasaña, pero la ejecución de la RNN aún no está listo y es en separaron paquete nntools. De todos modos, he probado la última, pero no puedo averiguar cómo se entrena, el entonces primer algunos vectores de pruebas y vamos a predecir el newone(s). Los bloques son el mismo problema - la documentación está disponible para LSTM RNN, aunque parece que hay algunas clases y funciones que podrían trabajo (por ejemplo blocks.bricks.recurrent).

Hay varios implementación de la RNN LSTM en Theano, como GroundHog, theano-rnn, theano_lstm y el código para algunos papeles, pero no de los que han tutorial o guía de cómo hacer lo que quiero.

La única utilizable solución que he encontrado es que el uso de Pybrain. Pero, por desgracia, carece de las características de Theano (principalmente de la computación de la GPU) y es huérfano (no nuevas características y soporte).

¿Alguien sabe donde podría encontrar lo que estoy pidiendo? Fácil de trabajar con RNN LSTM para la predicción de secuencias de vectores?

Editar:

Traté de Keras como este:

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')

pero que estoy recibiendo este mensaje de error al intentar encajar 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

mientras X_train y y_train son matrices de matrices (de longitud 12), por ejemplo [[i for i in range(12)] for j in range(1000)]

10voto

MaxK Puntos 1032

Finalmente encontró un camino y había documentado en mi blog aquí.

No hay comparación de varios marcos y entonces también una implementación de Keras.

6voto

Paul Woolcock Puntos 4028

Sugiero los siguientes:

0) Theano es realmente potente, pero sí el bacalao puede ser muy difícil a veces para iniciar con

1) yo sugeriría que usted echa un vistazo breze: https://github.com/breze-no-salt/breze/blob/master/notebooks/recurrent-networks/RNNs%20for%20Piano%20music.ipynb que es un poco más fácil de ser entendido y tiene un LSTM módulo. Además, un intresting elección es autograd por Harvards, que hace automático simbólico de la diferenciación de funciones numpy https://github.com/HIPS/autograd/blob/master/examples/lstm.py y por lo tanto, usted puede fácilmente entender lo que pasa.

2) soy un fan de python, pero este es mi preferencia personal. Ha considerado el uso de Torch7 es el más fácil de marco para las redes neuronales y también es utilizado por Google Deepmind y Facebook AI? Usted puede comprobar esto muy intresting entrada de blog acerca de RNNs http://karpathy.github.io/2015/05/21/rnn-effectiveness/. Además, un LSTM la aplicación está disponible en la repo de github del post, mientras que una alternativa es la rnn paquete https://github.com/Element-Research/rnn.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X