2016-04-03 21 views
1

Her bir (gizli katman + doğrusallık olmayan) kombinasyon arasında 3 veya 4 gizli katman ve bırakmalarla basit bir ileri besleme modeli eğitimi alıyorum. Bazen birkaç dönemden (yaklaşık 10-11) sonra model, NLL'nin hatası olarak Infs ve NaN'leri çıkarmaya başlar ve doğruluk% 0.0'a düşer. Bırakma kullanmadığımda bu sorun oluşmaz. Bu, Theano'da bırakmalarla ilgili bilinen bir sorun mu? Ben terkinde uygulamak yoludur:Bırakma kullandığımda Theano neden NaN'leri atar?

giriş biz bırakan uygulamak istediğiniz özellik vektörü
def drop(self, input): 
    mask = self.theano_rng.binomial(n=1, p=self.p, size=input.shape, dtype=theano.config.floatX) 
    return input * mask 

. Ayrıca, bırakma olasılığının (self.p) daha yüksek olması halinde NaN'lerin ortaya çıkmasının daha önce gerçekleştiğini gözlemledim. p = 0.5, NaN'lerin 1 veya 2 civarında meydana gelmesine neden olur, ancak p = 0.7, NaN'lerin 10 veya 11 civarında meydana gelmesine neden olur. Ayrıca, NaN'lerin oluşumu yalnızca gizli katman boyutları büyük olduğunda gerçekleşir. Örneğin (800,700,700) NaN verirken (500,500,500) yoktur. Tecrübelerime, NaN'ler içinde

cevap

0

, bir ağ genellikle çünkü iki problemi meydana eğitim yaparken:

  • ilk matematiksel hata, örneğin negatif değer kütüğü. Kayıp fonksiyonunuzda log() kullandığınızda olabilir.
  • İkincisi, çok büyük hale gelen bir değer var, python işleyemiyor.

Sizin durumunuzda, iyi gözleminizden, sanırım ikinci bir durumdur. Kayıp değeriniz python tarafından ele alınamayacak kadar büyük olabilir. Ağınızı genişletmeye çalıştığınızda daha küçük ağırlığı başlatmayı deneyin. Ya da sadece Glorot (2010) veya He (2015) ile açıklandığı gibi ağırlığı başlatmak için farklı bir yaklaşım kullanın. Umarım yardımcı olur.

İlgili konular