【问题标题】:Where do these nan come from?这些 nan 是从哪里来的?
【发布时间】:2016-07-23 10:46:39
【问题描述】:

编辑:
我的数据中有一些 nan 但 anwser 是正确的,你必须用一些噪音来初始化你的体重! 谢谢!

我正在使用 tensorflow 编写我的第一个脚本。我在打印值时遇到了一些问题,但现在我明白了。 我想尝试一个简单的逻辑回归开始,我正在研究 kaggle titanic 数据集。

我的问题是我不知道为什么,但是我的 Weight 和 Bias 中有一些 nan,所以在我的 y(预测)向量中也有 ...

编辑: 我的权重被初始化为 0,所以我猜我是一个零梯度。 根据提供的答案,我添加了

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

而不是

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

但我仍然有一些问题。我的 b 变量 a y 变量仍然是 nan,当我为 b 尝试相同的操作时,出现以下错误: ValueError:没有要优化的变量
我尝试了几种方法来分配张量 [1, 1] 的偏差,但看起来我错过了一些东西
看起来 y 是 nan 因为交叉熵是 nan 因为 b 是 nan ... :( 结束 - 编辑

我读了这篇文章 (Why does TensorFlow return [[nan nan]] instead of probabilities from a CSV file?),他给了我一个提示,在我的交叉熵计算 0*log(0) return nan 期间,我应用了给出的解决方案,即添加 1e-50,例如:

cross_entropy = -tf.reduce_sum(y_*tf.log(y + 1e-50))

不幸的是,我猜这不是问题,我仍然到处都有 nan :(

这是我非常简单的模型的有趣(我猜)部分:

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}))

它当然返回 0.0 精度,并且在 2 个 nan 数组之后 我试图到处打印值,但到处都是 nan :'(

有人有想法吗?我可能忘记了什么或做错了

问题是我尝试了一个带有包含数据的 mnist(谷歌教程)的类似脚本,并且它有效(没有 nan)。我通过 panda 读取 csv 文件获取数据。

感谢阅读!

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    您在tf.nn.softmax 中除以零,因为您的权重矩阵为零。使用不同的标准化方法,例如 MNIST 示例中的 truncated_normal

    【讨论】:

    • 您好,感谢您的回答,我在上面编辑了我的帖子,它实际上适用于我的体重,但是当我对 Bias 执行相同操作但它不起作用时!它抛出了我在编辑部分中描述的一些错误,我刷新了代码。你有什么主意吗 ?谢谢你的回答:)
    • 我有一些与 nan 相关的数据,这就是问题所在...谢谢您的回答!
    猜你喜欢
    • 2021-12-14
    • 1970-01-01
    • 2018-02-26
    • 2021-12-28
    • 1970-01-01
    • 2020-07-31
    • 2013-10-28
    • 2019-11-18
    • 2018-09-25
    相关资源
    最近更新 更多