为什么张量流会给出纳数而不是数

时间:2017-01-12 13:40:31

标签: python machine-learning tensorflow

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 我是这个张量流和机器学习领域的初学者 我认为我的源代码是对的。如果有错误请告诉我。

2 个答案:

答案 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_遗失了。如果不纠正所有这两个问题,很难调试。