2016-04-04 34 views
0

DÜZENLEME:
Verilerimde biraz nan var, ancak anwser doğru, biraz gürültüyle ağırlığınızı başlatmanız gerekiyor! Teşekkürler!Bu nan nereden geliyor?

İlk komutumu tensorflow ile yapıyorum. Yazdırma sorunuyla ilgili bazı problemlerim vardı ama şimdi anladım. Başlamak için basit bir lojistik regresyon denemek istedim, kaggle titanik veri kümesi üzerinde çalışıyorum.

Sorunum ama benim de y (öngörü) vektörü içinde yani benim Ağırlık ve Bias bazı nan var neden ben ...

DÜZENLEMEYİ bilmiyoruz ki: Kilom 0'dan başlatıldı yüzden Sanırım boş bir degrade sanırım. yanıta göre i

W = tf.truncated_normal([5, 1], stddev=0.1) 

yerine

W = tf.Variable(tf.zeros([5, 1])) #weight for softmax 

eklemek sağlanan Ama hala bazı sorunlar var. Benim b değişken ay değişkeni hala nan ve bi için de aynı şeyi denediğimde şu hatayı aldım:ValueError:
Optimize etmek için değişken yok Bir tensör [1, 1] biaisimi atamak için birkaç yol denedim ama görünüyor b nan çünkü çapraz entropi nan çünkü böyle i bir şey
y benziyor kaçırıyorum SON :(... nan olduğunu - DÜZENLEME

i sırasında bana bir ipucu vermek Bu yayını (Why does TensorFlow return [[nan nan]] instead of probabilities from a CSV file?), okumak benim çapraz entropi calcul 0 * log (0) return nan, verilen çözümü uyguladıktan sonra, yani 1e-50 gibi eklemek için:

cross_entropy = -tf.reduce_sum (y_ * tf.log (y + 1e-50)) 01 maalesef bu sanırım sorun değildi, hala nan her yerde var :(

bu interisting (sanırım) benim çok basit modelinin parçasıdır:

x = tf.placeholder(tf.float32, [None, 5]) #placeholder for input data 

W = tf.truncated_normal([5, 1], stddev=0.1) 

b = tf.Variable(tf.zeros([1])) # no error but nan 
#b = tf.truncated_normal([1, 1], stddev=0.1) Thow the error descript above 
#b = [0.1] no error but nan 

y = tf.nn.softmax(tf.matmul(x, W) + b) #our model -> pred from model 

y_ = tf.placeholder(tf.float32, [None, 1])#placeholder for input 

cross_entropy = -tf.reduce_sum(y_*tf.log(y)) # crossentropy cost function 

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) 
init = tf.initialize_all_variables() # create variable 

sess = tf.InteractiveSession() 
sess.run(init) 

testacc = [] 
trainacc = [] 
for i in range(15): 
    batch_xs = train_input[i*50:(i + 1) * 50] 
    batch_ys = train_label[i*50:(i + 1) * 50] 

    result = sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) 

correct_prediction = tf.equal(y,y_) 
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 
print(sess.run([accuracy, W, y] , feed_dict={x: test_input, y_: test_label})) 

Beni döndürür Bir 0.0 doğruluk ve tabii ki 2 dizi nan Ben her yerde değerleri yazdırmaya çalıştım ama her yerde nan: '(

Birisi bir fikriniz var mı? Bir şeyi unutmuş ya da yanlış yapmış olabilirim

Buradaki şey, dahil edilen verilerle mnist (google öğreticisi) ile benzer bir betik denedim ve çalışmalarım (nan yok). Verilerimi panda csv dosyasını okuyarak aldım.

Okumak için teşekkürler!

cevap

2

Ağırlık matrisleriniz sıfır olduğu için tf.nn.softmax numaralı telefona sıfırdan bir bölüm ayırıyorsunuz. MNIST örneğindeki truncated_normal gibi farklı bir normalizasyon yöntemi kullanın

+0

Cevabınız için teşekkürler, Yukarıdaki yazımı düzenledim, aslında Ağırlıkm için çalışıyor, ancak Bias için de aynısını yaptığımda işe yaramıyor! Düzenleme bölümünde açıklanan bazı hatalar atıyor ve kodu yeniliyorum. Herhangi bir fikrin var mı? Cevabınız için teşekkürler :) –

+0

Ben de problem olan nan ile bazı veriler vardı ... Cevabınız için teşekkür ederiz! –

İlgili konular