2015-12-02 22 views
11

Biraz karmaşık ve kanonik olmayan NN mimarisini hata ayıklamaya çalışıyorum. İleri geçişi hesaplamak gayet iyi ve bana beklenen sonuçları veriyor, ama Adem'i veya herhangi bir standart optimize ediciyi kullanarak optimize etmeye çalıştığımda, çok küçük bir öğrenme hızına sahip bir yinelemeden sonra bile her yerde nans elde ediyorum. Onları yerelleştirmeye çalışıyorum ve bir nan'in ilk oluşumunu yakalamanın ve hangi operasyonda ortaya çıktığını tespit etmenin bir yolu olup olmadığını merak ediyordum. tf.add_check_numerics_ops()'u denedim, ancak hiçbir şey yapmıyor gibi görünüyor ya da belki yanlış kullanıyorum.Geriye doğru geçişteki nankör sayısı

cevap

18

Özellikle büyük bir ağınız varsa, NaN'leri hata ayıklamak zor olabilir. tf.add_check_numerics_ops(), grafikteki her bir kayan nokta tensörünün herhangi bir NaN değeri içermediğini, ancak bu denetimleri varsayılan olarak çalıştırılmadığını iddia eden grafiğe ekler. şöyle Bunun yerine, periyodik çalıştırın veya her adımda olabilir bir op verir: Bu

print_ops = [] 
for op in ops: 
    print_ops.append(tf.Print(op, [op], 
        message='%s :' % op.name, summarize=10)) 
print_op = tf.group(*print_ops) 
sess.run([train_op, print_op]) 

gibi

train_op = ... 
check_op = tf.add_check_numerics_ops() 

sess = tf.Session() 
sess.run([train_op, check_op]) # Runs training and checks for NaNs 
+0

Sorun şu ki, tren_op'u çalıştırdığımda, ağlar ağ boyunca yayılıyor ve bu yüzden sebebini bulmak işe yaramıyor. Yapmak istediğim şey, ileri ve geri geçişleri çalıştırmaktır ve bir nan üretilir olmaz, suç işleyen tarafından bir istisna atılır. –

+6

"train_op" ve "check_op" işlevlerini birlikte çalıştırırsanız, bir NaN içeren ilk düğümü bildiren bir hata alırsınız - bu yükseltilmiş "tf.InvalidArgumentError" ı yakalayabilir ve op'unu '' dan ayıklayabilirsiniz. op 'özelliği. İşlemin bir tanıtıcısıyla, hangi tensörün NaN değerlerine sahip olduğunu görmek için 'op.inputs [0]' özelliğine erişebilirsiniz. – mrry

+0

Tamam, teşekkürler! –

2

Belki ops baskı değerlerini şüphelenmeye Baskı op ekleyebilir şey Tüm oplara eklemek için add_check_numerics_ops satırlarında bir döngü yapabilirsiniz.

İlgili konular