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 :(得分:0)
看不到您的['\n ', '\n ', '\n ', 'foo\n ', '\n ', 'bar\n']
值,很难确定。但是一个有根据的猜测是你正在使用的x_
操作收到零或负输入。而不是
tf.log
尝试类似
的内容cost = tf.reduce_mean(-tf.reduce_sum(hypothesis* tf.log(y), reduction_indices=[1]))
另外值得指出的是,从版本1.0.0-alpha开始,TensorFlow有一个专门的调试器,可帮助诊断此类问题。请参阅:https://www.tensorflow.org/versions/master/how_tos/debugger/
在您的行cost = tf.reduce_mean(-tf.reduce_sum(hypothesis* tf.log(tf.clip_by_value(y, 1e-8, 1.0)), reduction_indices=[1]))
添加后,尝试一下。
sess.run(init)
在下一个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)
电话上显示的命令行界面中。
sess.run
答案 1 :(得分:0)
看起来你正在尝试一个简单的逻辑回归,但变量都混淆了。
首先,交叉熵必须是:
y*tf.log(hypothesis)
不是相反。其次,y
必须从您的数据标签中采样 - 您没有做的事情。 x_
和y_
遗失了。如果不纠正所有这两个问题,很难调试。