由于这个链接仅描述了基于学习方法的预测的多样性,出于好奇我想了解为什么TensorFlow计算结果会略有不同。
import tensorflow as tfsess = tf.Session() # TensorFlow会话var1 = tf.placeholder(tf.float32) # 一个占位符var2 = tf.placeholder(tf.float32) # 另一个占位符addition_node = var1 + var2 # 变量加法节点array = sess.run(addition_node, {var1: [1.1, 2.2, 3.3], var2:[1,1,1]}) # 包含值的数组print(array)
预期输出:
[ 2.1000000 3.20000000 4.30000000]
实际输出:
[ 2.0999999 3.20000005 4.30000019]
回答:
对于32位浮点值来说,这是正常的。那些1.1、2.2和3.3的值在32位浮点中不能精确表示。
import numpy as npx = np.array([1.1, 2.2, 3.3], dtype=np.float32)y = np.array([1, 1, 1], dtype=np.float32)x+y>>> array([ 2.0999999 , 3.20000005, 4.30000019], dtype=float32)
如果你还没有读过,建议你谷歌搜索“What Every Computer Scientist Should Know About Floating-Point Arithmetic”来更好地理解浮点运算的局限性。