Mam bardzo prosty problem, ale nie mogę znaleźć odpowiedniego narzędzia do jego rozwiązania.
Mam sekwencję wektorów o tej samej długości. Teraz chciałbym trenować LSTM RNN na próbce pociągu tych sekwencji, a następnie sprawić, by przewidział nową sekwencję wektorów o długości na podstawie kilku wektorów startowych .
Nie mogę znaleźć prostej implementacji, która by to zrobiła. Moim podstawowym językiem jest Python, ale wszystko, co nie instaluje się przez kilka dni, będzie działać.
Próbowałem użyć Lasagne , ale implementacja RNN nie jest jeszcze gotowa i znajduje się w osobnym pakiecie nntools . W każdym razie wypróbowałem ten drugi, ale nie mogę wymyślić, jak go wyszkolić, a następnie zalać go kilkoma wektorami testowymi i pozwolić przewidzieć nowy. Bloki są tym samym problemem - brak dokumentacji dla LSTM RNN, chociaż wydaje się, że istnieją pewne klasy i funkcje, które mogłyby działać (np blocks.bricks.recurrent
.).
Istnieje kilka realizacja RNN LSTM w Theano, jak GroundHog
, theano-rnn
, theano_lstm
i kod dla niektórych gazetach, ale nie z nich ma poradnik lub przewodnik, jak to zrobić, co chcę.
Jedynym użytecznym rozwiązaniem, jakie znalazłem, było użycie Pybrain. Niestety nie ma w nim funkcji Theano (głównie obliczeń na GPU) i jest osierocony (brak nowych funkcji i wsparcia).
Czy ktoś wie, gdzie mogę znaleźć to, o co proszę? Łatwy w obsłudze z RNN LSTM do przewidywania sekwencji wektorów?
Edytować:
Próbowałem Keras w ten sposób:
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')
ale pojawia się ten błąd, gdy próbuję go dopasować 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
natomiast X_train
i y_train
są tablicami tablic (o długości 12), np[[i for i in range(12)] for j in range(1000)]