Yerleşik LSTM hücreleri size bir satırlık verir. Ancak, LSTM katmanlarından önce ve sonra statik katmanlar eklemek ve her şeyi backprop üzerinden eğitmek istiyorum. Mümkün mü?Tensorflow'un LSTM hücresi daha büyük bir grafiğin parçası olarak nasıl kullanılır?
cevap
hücre callable
bir tf.Tensor
gibi bir giriş tf.Tensor
ve mevcut durumunu alır fonksiyonudur ve bir tf.Tensor
gibi bir çıkış tf.Tensor
ve yeni durumuna döner. Giriş/çıkış ve durum tensörleri hakkında özel bir şey yoktur: bunlar diğer TensorFlow işlemlerinden gelen girişler olarak hesaplanabilir ve/veya kullanılabilir. Örnek olarak
ptb_word_lm.py
modeli bak: Burada
for time_step in range(num_steps):
# ...
(cell_output, state) = cell(inputs[:, time_step, :], state)
outputs.append(cell_output)
, inputs
bir dilim LSTM bir hücre için giriş almak için alındığı bir 3-D tensörü ve state
olduğu cell.zero_state()
kullanılarak hesaplanan initially, daha sonra her yineleme yineleme önceki yineleme durumundan kullanır.
inputs
tensörü, 'luk bir tf.nn.embedding_lookup()
işlemidir; outputs
listesi later concatenated'dir ve bir kayıp hesaplamasına girdi olarak kullanılır. TensorFlow, RNN ve gömülme aralığındaki kayıptan geri dönüp, model değişkenlerine geri dönüyor.
Açıkladığınız yöntemin dezavantajı, num_steps çok büyük olduğunda, grafiğin başlatılması için çok fazla zaman ve bellek alacağını düşünüyorum. Ayrıca eğer baştan beri zaman serisinin uzunluğunu (yani veri akışını) bilmiyorsanız, ağınız işleyecek ve işe yaramayacaktır. Yanılıyorsam düzeltin –
Evet, bazı durumlarda ['tf.nn.dynamic_rnn()'] sayfasını kullanmalısınız (https://www.tensorflow.org/versions/r0.9/api_docs/python/nn Döngüyü açmayan .html # dynamic_rnn). Şu anda akış verilerinin işlenmesi için bir kütüphane yöntemi yok, ancak asıl soru bu gereksinime sahip değildi. Akış verileri için 'tf.while_loop()' kullanarak bir şey uygulayabilirsiniz, ancak mevcut uygulama, zamanın maksimum zaman sayımını bildiğiniz zaman daha etkilidir. – mrry