Zamanlama vektörlerini tahmin etmek için RNN (LSTM) kullanma (Theano)


19

Çok basit bir sorunum var ama bunu çözmek için doğru bir araç bulamıyorum.

Aynı uzunlukta bazı vektörler dizilim var. Şimdi bu dizilerin tren örnek LSTM RYSA tren ve sonra uzunluğu vektörleri yeni dizisini tahmin yapmak isteyen birkaç göre hazırlama vektörleri.n

Bunu yapacak basit bir uygulama bulamıyorum. Temel dilim Python, ancak günlerce yüklenmeyen her şey geçerli olacak.

Lasagne kullanmaya çalıştım , ancak RNN ​​uygulaması henüz hazır değil ve ayrılmış pakette nntools . Her neyse, ikincisini denedim ama nasıl eğitileceğini anlayamıyorum, sonra bazı test vektörleriyle hazırlayın ve yenileri tahmin etmesine izin veremiyorum. Bloklar aynı sorundur - LSTM RNN için herhangi bir belge yoktur, ancak çalışabilecek bazı sınıflar ve işlevler var gibi görünmektedir (örn. blocks.bricks.recurrent).

Orada Theano gibi içinde RYSA LSTM çeşitli uygulama vardır GroundHog, theano-rnn, theano_lstmbazı gazeteler için ve kod, ama öğretici olanların olmayanlara veya istediğimi nasıl yol gösterir.

Bulduğum tek kullanışlı çözüm Pybrain kullanmaktı. Ancak ne yazık ki Theano'nun (çoğunlukla GPU hesaplaması) özelliklerinden yoksun ve yetim kaldı (yeni özellik ve destek yok).

İstediğimi nerede bulabileceğimi bilen var mı? Vektör dizilerini tahmin etmek için RNN LSTM ile çalışmak kolay mı?

Düzenle:

Keras'ı şu şekilde denedim:

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')

ama uydurmaya çalışırken bu hatayı alıyorum 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

iken X_trainve y_traindizilerin dizisi (uzunluk 12), ör.[[i for i in range(12)] for j in range(1000)]


1
Tüm dizileriniz aynı uzunlukta ise neden RNN'ye ihtiyacınız var? YSA üzerinden statik giriş vektörünün çalıştırılması daha kolay ve hızlı olacaktır.
itdxer

Vektörler zamanlardan gelir. Yani RNN gerekli sanırım?
kotrfa

1
RNN, girdi veya çıktı vektör boyutunu bilmediğinizde görevler için mükemmeldir. Örneğin, resimde ne görebileceğinizi İngilizce olarak açıklayan bir ağ oluşturmak istiyorsunuz, böylece girişiniz statik görüntü olabilir, ancak çıktı resimde görebildiğinize bağlı olarak değişecektir. Metin çevirisi almak istediğinizde başka bir örnek, hem giriş hem de çıkışınız bilinmiyor.
itdxer

Açıklama için teşekkür ederim. Bu nedenle bu görevde RNN kullanmak için hiçbir neden yoktur. Tamam.
kotrfa

2
@ itdxer'ın yorumu yanıltıcı. Verileriniz her yerde aynı uzunlukta olsa bile, bir RNN kullanmak faydalı olabilir. Bir RNN, verilerin temelde sıralı nitelikte olduğu varsayımını getirir. Örneğin, zaman ekseni boyunca çeviri RNN'ler tarafından zarif bir şekilde ele alınır, ancak ileri besleme yöntemleriyle değil - bunu gerçekleştirmek için çok daha fazla eğitim verisine ihtiyaç duyarlar ve tahmin etmek için daha fazla parametreye sahip olurlar. Bir ANN'nin RNN yerine kullanıldığında çöküp yanacağı daha birçok durum vardır.
bayerj

Yanıtlar:


10

Sonunda bir yol buldum ve buradaki blogumda belgeledim .

Keras'ta birkaç çerçevenin ve sonra bir uygulamanın karşılaştırılması var.


5

Aşağıdakileri öneririm:

0) Theano gerçekten güçlü ama evet morina bazen başlamak için zor olabilir

1) Breze'ye göz atmanızı öneririm: https://github.com/breze-no-salt/breze/blob/master/notebooks/recurrent-networks/RNNs%20for%20Piano%20music.ipynb biraz daha kolay anlaşılacak ve LSTM modülüne sahip olacak. Ayrıca, ilginç bir seçim Harvards tarafından autograd, bu da numps fonksiyonlarının otomatik sembolik olarak farklılaşmasını sağlayan https://github.com/HIPS/autograd/blob/master/examples/lstm.py ve böylece neler olup bittiğini kolayca anlayabilirsiniz.

2) Ben bir python hayranıyım ama bu benim kişisel tercihim. Torch7'yi sinir ağları için en kullanıcı dostu çerçeve olarak mı düşünüyorsunuz ve Google Deepmind ve Facebook AI tarafından da kullanılıyor mu? RNN'ler hakkındaki bu çok ilginç blog gönderisini http://karpathy.github.io/2015/05/21/rnn-efftivity/ adresinden kontrol edebilirsiniz . Buna ek olarak, bir LSTM uygulaması yazının github deposunda kullanılabilirken, alternatif olarak rnn paketi https://github.com/Element-Research/rnn .


1
Karpathy'nin çalışmalarını son birkaç haftadır başarıyla kullandım. Ne yazık ki, karakter dizilerini değil vektörleri tahmin etmek için algoritmasını değiştiremiyorum. Ayrıca Lua'ya çok aşina olmadığım için de. Bu nedenle, ben de pasif olarak Torch7 kullandım, ama gerçekten çok kolay bulmuyorum. Thank you
kotrfa

Mükemmel. Öyleyse lineer değerlere sahip bazı dizileriniz olduğunu ve ? N ve S her zaman sabit mi? SN-N-
Yannis Assael

Her saniye için ölçümden 12 elemandan oluşan vektörüm var. Ağı eğitmek, daha sonra örneğin 5 vektör (12 uzunluğunda) ile astarlamak ve aşağıdaki vektörü tahmin etmesine izin vermek istiyorum. Başka bir şey yok. Keras'ı kullanmayı denemeyle sorumu güncelledim.
kotrfa

ayrıca, vektörleriniz bir zaman serisinden gelse bile, bunun için basit bir ileri besleme kullanabilirsiniz. Sadece sekans sayısının sabit olduğundan emin olun.
Yannis Assael

Karpathy gibi okuduğum birkaç makaleden, LSTM'nin diziler için en iyi seçim olduğunu anlıyorum, değil mi? Basit ileri besleme NN'de "bellek özelliği" var mı?
kotrfa

0

LSTM'yi Theano ile zaman dizisini tahmin ederek test ettim. Düzgün bir eğri için düzgün tahmin edilebileceğini buldum. Ancak bazı zikzak eğrisi için. Tahmin etmek zor. Ayrıntılı makale aşağıdaki gibidir: LSTM ile Zaman Sırasını Tahmin Edin

Öngörülen sonuç aşağıdaki gibi gösterilebilir:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.