2017-01-12 8 views
0
import tensorflow as tf 

x = tf.placeholder(tf.float32, [None, 1]) 
y = tf.placeholder(tf.float32, [None, 1]) 

w = tf.Variable(tf.zeros([1, 1], tf.float32)) 
# b = tf.Variable(tf.random_uniform([1, 1], -1, 1)) 
hypothesis = tf.nn.softmax(tf.matmul(x, w)) 
cost = tf.reduce_mean(-tf.reduce_sum(hypothesis* tf.log(y), reduction_indices=[1])) 
train = tf.train.GradientDescentOptimizer(0.001).minimize(cost) 
init = tf.initialize_all_variables() 

with tf.Session() as sess: 
    sess.run(init) 
    for i in range(5000): 
     #print (sess.run(w)) 
     sess.run(train, feed_dict={x:x_, y:y_}) 
    print (sess.run(w)) 

私のソースコードは上記と同じです なぜ結果がNANであるのか分かりません。
私はこのテンソルフローと機械学習領域で初心者です。
私のソースコードは正しいと思います。間違っていると教えてください。なぜテンソルの流れが数値の代わりにナノを与えるのですか

答えて

0

x_の値を見て、わかりにくいです。しかし、教育された推測は、ゼロまたは負の入力を受け取ったあなたが使用しているtf.logです。だからではなく、

cost = tf.reduce_mean(-tf.reduce_sum(hypothesis* tf.log(y), reduction_indices=[1])) 

の指摘する価値も

cost = tf.reduce_mean(-tf.reduce_sum(hypothesis* tf.log(tf.clip_by_value(y, 1e-8, 1.0)), reduction_indices=[1])) 

のようなものを試してみたバージョンのよう1.0.0-αTensorFlowは、特に、問題のこの種を診断するのに役立ちます専門的なデバッガを持っていること。参照:https://www.tensorflow.org/versions/master/how_tos/debugger/

sess.run(init)の後に試してみてください。次sess.run呼び出しに現れるコマンド・ライン・インターフェースで

from tensorflow.python import debug as tf_debug 
sess = tf_debug.LocalCLIDebugWrapperSession(sess) 
sess.add_tensor_filter("has_inf_or_nan", tf_debug.has_inf_or_nan) 

0

単純なロジスティック回帰を試みているようですが、変数がすべて混ざっています。

まず、クロスエントロピーはでなければなりません:

y*tf.log(hypothesis) 

ない他の方法で回避。第二に、yはデータラベルからサンプリングする必要があります。 x_およびy_がありません。これらの2つの問題をすべて修正することなくデバッグするのは難しいです。

関連する問題