为什么Tensorflow输出这些简单的结果?

时间:2017-12-24 19:34:39

标签: tensorflow

我是Tensorflow的新手,但我想弄清楚为什么这些结果会以...001...002等结尾。

我在这里关注教程:https://www.tensorflow.org/get_started/get_started

代码:

"""This is a Tensorflow learning script."""
import tensorflow as tf

sess = tf.Session()

W = tf.Variable([.3], dtype=tf.float32)
b = tf.Variable([-.3], dtype=tf.float32)
x = tf.placeholder(tf.float32)
linear_model = W*x + b

sess.run(tf.global_variables_initializer()) #This is the same as the above 2 lines

print(sess.run(linear_model, {x: [1, 2, 3, 4]}))

它看起来像一个简单的数学函数,如果我使用2作为输入,它将是(0.3 * 2) + -0.3 = 0.3

输出:

  

[0. 0.30000001 0.60000002 0.90000004]

我希望:

  

[0. 0.3 0.6 0.9]

2 个答案:

答案 0 :(得分:1)

这可能是浮点错误,因为您将变量引入为tf.float32 dtype。您可以使用tf.round(https://www.tensorflow.org/api_docs/python/tf/round)但它似乎没有圆到最近的小数位数功能。为此,请查看以下内容中的回复:tf.round() to a specified precision

答案 1 :(得分:1)

问题是floating point variable(如tf.float32)由于存储在二进制文件中而无法存储完全 0.3。这就像尝试将完全 1/3存储在十进制中一样,它是0.33...但你必须走出无穷大才能得到确切的数字(这不是可能是我们凡人的王国!)。

有关该主题的深入审核,请参阅the python docs

Tensorflow还没有处理十进制数的方法(据我所知)!但是一旦这些数字返回到python,你就可以绕过&然后转换为Decimal