Saya memiliki masalah yang sangat sederhana tetapi saya tidak dapat menemukan alat yang tepat untuk menyelesaikannya.
Saya memiliki beberapa urutan vektor dengan panjang yang sama. Sekarang saya ingin melatih LSTM RNN pada sampel kereta dari urutan ini dan kemudian membuatnya untuk memprediksi urutan baru dari vektor panjang berdasarkan beberapa vektor priming .
Saya tidak dapat menemukan implementasi sederhana yang akan melakukan ini. Bahasa dasar saya adalah Python, tetapi apa pun yang tidak diinstal selama berhari-hari akan bertahan.
Saya mencoba menggunakan Lasagne , tetapi implementasi RNN belum siap dan itu dalam paket nntools terpisah . Ngomong-ngomong, saya mencoba yang terakhir tetapi saya tidak tahu cara melatihnya, lalu melengkapinya dengan beberapa vektor uji dan membiarkannya memprediksi yang baru. Blok adalah masalah yang sama - tidak ada dokumentasi yang tersedia untuk LSTM RNN, walaupun tampaknya ada beberapa kelas dan fungsi yang bisa berfungsi (misalnya blocks.bricks.recurrent
).
Ada beberapa pelaksanaan RNN LSTM di Theano, seperti GroundHog
, theano-rnn
, theano_lstm
dan kode untuk beberapa kertas, tetapi bukan dari mereka punya tutorial atau membimbing bagaimana melakukan apa yang saya inginkan.
Satu-satunya solusi yang dapat digunakan yang saya temukan adalah menggunakan Pybrain. Tapi sayangnya itu tidak memiliki fitur Theano (terutama perhitungan GPU) dan yatim piatu (tidak ada fitur dan dukungan baru).
Adakah yang tahu di mana saya bisa menemukan apa yang saya minta? Mudah digunakan dengan RNN LSTM untuk memprediksi urutan vektor?
Edit:
Saya mencoba Keras seperti ini:
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')
tapi saya mendapatkan kesalahan ini ketika mencoba memasangnya 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
sementara X_train
dan y_train
adalah array array (dengan panjang 12), misalnya[[i for i in range(12)] for j in range(1000)]
sumber
Jawaban:
Saya akhirnya menemukan cara dan mendokumentasikannya di blog saya di sini .
Ada perbandingan beberapa framework dan kemudian juga satu implementasi di Keras.
sumber
Saya akan menyarankan yang berikut ini:
0) Theano benar-benar kuat, tetapi ya, kadang-kadang cod bisa sulit untuk memulai
1) Saya akan menyarankan Anda untuk memeriksa breze: https://github.com/breze-no-salt/breze/blob/master/notebooks/recurrent-networks/RNNs%20for%20Piano%20music.ipynb yang sedikit lebih mudah untuk dipahami dan memiliki modul LSTM juga. Selain itu, pilihan intresting adalah autograd oleh Harvards, yang melakukan diferensiasi simbolis otomatis dari fungsi numpy https://github.com/HIPS/autograd/blob/master/examples/lstm.py dan karena itu Anda dapat dengan mudah memahami apa yang terjadi.
2) Saya penggemar python tapi ini adalah preferensi pribadi saya. Sudahkah Anda mempertimbangkan menggunakan Torch7 adalah kerangka kerja yang paling user-friendly untuk jaringan saraf dan juga digunakan oleh Google Deepmind dan Facebook AI? Anda dapat memeriksa posting blog yang sangat menarik ini tentang RNN http://karpathy.github.io/2015/05/21/rnn-effectiveness/ . Selain itu, implementasi LSTM tersedia di repo github posting, sementara alternatifnya adalah paket rnn https://github.com/Element-Research/rnn .
sumber
Saya telah menguji LSTM memprediksi beberapa urutan waktu dengan Theano. Saya menemukan bahwa untuk beberapa kurva yang halus, dapat diprediksi dengan benar. Namun untuk beberapa kurva zig-zag. Sulit diprediksi. Artikel terperinci adalah sebagai berikut: Prediksi Urutan Waktu dengan LSTM
Hasil prediksi dapat ditampilkan sebagai berikut:
sumber