2015-01-29 35 views
9

Theano işlevinin parametre güncelleştirmeleri, her bir çiftin işlev çıktılarını hesapladıktan sonra paylaşılan bir sembolik değişken ve yeni ifadesini içerdiği çiftin bir listesini alır. Güncelleme prosedürü için herhangi bir sipariş olup olmadığını merak ediyorum. İki sembolik değişkenin yeni ifadesi birbirine bağlıysa ve güncelleme prosedürü, ona güvenen diğer sembolik değişkenleri güncellemek için güncellenmiş sembolik değişkeni kullanacaksa, sipariş önemli olacaktır. Örnekler için , bu liste kudreti bu test etmek için bazı fonksiyon yazdımTheano işlevinin güncelleme listesi güncelleme listesi

[(a, b + a), (b, b+ 1)] 

, buna benzer. Sonuç yani

a_new = b_old + a_old 
b_new = b_old + 1 

bu tanımlanmış bir davranış mı, her zaman ilk dönemde sembolik değişken güncelleştirmek için ifadesinde (çiftinde ikinci dönemini) eski değerini kullanmak olduğunu gösteriyor gibi? param_updates çünkü Burada ivme here uygulanmasını bulundu Bununla

, ,

param_update = theano.shared(param.get_value()*0., broadcastable=param.broadcastable) 
updates += [(param, param - learning_rate*param_update), 
(param_update, momentum * param_update + (1. - momentum)*T.grad(cost, param)) 

Sonra birinci tekrarda, param güncellenen olmayacak sembolik değişkenler güncelleme listesini oluşturmak için kodlardır ve param_update hepsi sıfır. Anlayışımda, önce param_update güncellenmeli ve ardından param güncellemesi için kullanılmalıdır.

cevap

7

Güncelleme için her zaman önceki değeri kullanın (Theano işlev çağrısından önceki değer). Yani doğru olanı buldun.

Momentum için bir gecikme olduğu normaldir.