У меня очень простая проблема, но я не могу найти правильный инструмент для ее решения.
У меня есть некоторая последовательность векторов одинаковой длины. Теперь я хотел бы обучить 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)]
источник
Ответы:
Я наконец нашел способ и задокументировал его в своем блоге здесь .
Существует сравнение нескольких фреймворков, а затем и одна реализация в Keras.
источник
Я бы предложил следующее:
0) Theano действительно мощный, но да, треска может быть трудной для начала
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) Я фанат питона, но это мое личное предпочтение. Рассматривали ли вы использование Torch7 - наиболее удобной среды для нейронных сетей, которую также используют Google Deepmind и Facebook AI? Вы можете проверить это очень интересное сообщение в блоге о RNNs http://karpathy.github.io/2015/05/21/rnn-effectiveness/ . Кроме того, реализация LSTM доступна в репозитории github, в то время как альтернативой является пакет rnn https://github.com/Element-Research/rnn .
источник
Я проверил LSTM, предсказывающий некоторую временную последовательность с Theano. Я обнаружил, что для некоторой плавной кривой это можно предсказать правильно. Однако для некоторой зигзагообразной кривой. Трудно предсказать. Подробная статья представлена ниже: Прогнозирование временной последовательности с помощью LSTM
Прогнозируемый результат может быть показан следующим образом:
источник