Eu tenho um problema muito simples, mas não consigo encontrar a ferramenta certa para resolvê-lo.
Eu tenho uma sequência de vetores do mesmo comprimento. Agora eu gostaria de treinar o LSTM RNN na amostra de trem dessas seqüências e, em seguida, prever a nova sequência de vetores de comprimento base em vários vetores priming .
Não consigo encontrar uma implementação simples que faria isso. Minha linguagem base é Python, mas tudo o que não for instalado por dias será válido.
Tentei usar o Lasagne , mas a implementação do RNN ainda não está pronta e está no pacote nntools . Enfim, eu tentei o último, mas não consigo descobrir como treiná-lo, depois apronte-o com alguns vetores de teste e deixe prever o (s) novo (s). Os blocos são o mesmo problema - nenhuma documentação está disponível para o LSTM RNN, embora pareça que existem algumas classes e funções que poderiam funcionar (por exemplo blocks.bricks.recurrent
).
Existem vários implementação de RNN LSTM em Teano, como GroundHog
, theano-rnn
, theano_lstm
e código para alguns papéis, mas não desses têm tutorial ou orientar como fazer o que eu quero.
A única solução utilizável que encontrei foi usar o Pybrain. Infelizmente, porém, ele não possui os recursos do Theano (principalmente computação da GPU) e fica órfão (sem novos recursos e suporte).
Alguém sabe onde eu poderia encontrar o que estou pedindo? Fácil de trabalhar com o RNN LSTM para prever sequências de vetores?
Editar:
Eu tentei Keras assim:
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')
mas estou recebendo esse erro ao tentar ajustá-lo 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
e y_train
são matrizes de matrizes (de comprimento 12), por exemplo[[i for i in range(12)] for j in range(1000)]
fonte
Respostas:
Finalmente encontrei um caminho e o documentei no meu blog aqui .
Há comparação de várias estruturas e, em seguida, também uma implementação no Keras.
fonte
Eu sugeriria o seguinte:
0) Theano é realmente poderoso, mas sim, o bacalhau pode ser difícil às vezes para começar
1) Eu sugiro que você verifique o breze: https://github.com/breze-no-salt/breze/blob/master/notebooks/recurrent-networks/RNNs%20for%20Piano%20music.ipynb, que é um pouco mais fácil para ser entendido e possui também um módulo LSTM. Além disso, uma opção interessante é o autograd de Harvards, que faz a diferenciação simbólica automática das funções numpy https://github.com/HIPS/autograd/blob/master/examples/lstm.py e, portanto, você pode entender facilmente o que está acontecendo.
2) Sou fã de python, mas essa é minha preferência pessoal. Você considerou o uso do Torch7 a estrutura mais amigável para redes neurais e também é usado pelo Google Deepmind e pelo Facebook AI? Você pode conferir esta postagem do blog muito interessante sobre RNNs http://karpathy.github.io/2015/05/21/rnn-effectiveness/ . Além disso, uma implementação LSTM está disponível no repositório do post do github, enquanto uma alternativa é o pacote rnn https://github.com/Element-Research/rnn .
fonte
Testei o LSTM prevendo uma sequência de tempo com o Theano. Descobri que, para alguma curva suave, ela pode ser prevista adequadamente. No entanto, para alguma curva em zigue-zague. É difícil de prever. O artigo detalhado é o seguinte: Prever Sequência de Tempo com LSTM
O resultado previsto pode ser mostrado da seguinte forma:
fonte