У меня очень простая проблема, но я не могу найти правильный инструмент для ее решения.
У меня есть некоторая последовательность векторов одинаковой длины. Теперь я хотел бы обучить LSTM RNN на выборке из этих последовательностей, а затем сделать это для предсказания новой последовательности векторов длины на основе нескольких векторов праймирования .
Я не могу найти простую реализацию, которая бы сделала это. Мой базовый язык - Python, но все, что не устанавливается в течение нескольких дней, сохранится.
Я пытался использовать Lasagne , но реализация RNN еще не готова, и он находится в отдельном пакете nntools . Во всяком случае, я попробовал последний, но я не могу понять, как его обучить, затем проиллюстрировать его некоторыми тестовыми векторами и позволить ему предсказать новые. Блоки - та же самая проблема - нет никакой документации для LSTM RNN, хотя кажется, что есть некоторые классы и функции, которые могли бы работать (например blocks.bricks.recurrent
).
Есть несколько реализация РНН LSTM в Theano, как GroundHog
, theano-rnn
, theano_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_train
и y_train
являются массивами массивов (длиной 12), например[[i for i in range(12)] for j in range(1000)]