tensorflow的reduce_mean()给出了一个近似值(不是精确值)
reduce_mean() of tensorflow gives an approximate value (not exact value)
我正在制作一个损失函数,我在其中使用了tf.reduce_mean()
。但它 return 是一个近似值。
我的代码如下:
import tensorflow as tf
real = [[1.0], [0.3]]
pred = [[0.8], [0.2]]
loss_object2 = tf.keras.losses.mean_squared_error
def loss_function(real, pred):
loss_ = loss_object2(real, pred)
print(loss_)
return tf.reduce_mean(loss_)
loss_function(real, pred)
给出以下输出:
tf.Tensor([0.04 0.01], shape=(2,), dtype=float32)
<tf.Tensor: shape=(), dtype=float32, numpy=0.024999999>
这应该只是 return 0.025
,为什么 returning 0.024999999
?
IEEE 754-2008 浮点运算标准的第 3.2 条说“浮点运算是实数运算的系统近似……”
浮点运算设计以逼近实数运算。如果不透彻理解浮点数格式和算术规则,就不要指望得到准确的结果。
在用于 float32
的 IEEE 754 binary32 格式中,最接近 .04 的可表示值是 0.039999999105930328369140625 (5368709•2−27)。最接近 .01 的可表示值是 0.00999999977648258209228515625 (5368709•2−29)。当使用 IEEE 754 规则将它们相加并除以二时,结果为 0.024999998509883880615234375 (3355443•2−27).
我正在制作一个损失函数,我在其中使用了tf.reduce_mean()
。但它 return 是一个近似值。
我的代码如下:
import tensorflow as tf
real = [[1.0], [0.3]]
pred = [[0.8], [0.2]]
loss_object2 = tf.keras.losses.mean_squared_error
def loss_function(real, pred):
loss_ = loss_object2(real, pred)
print(loss_)
return tf.reduce_mean(loss_)
loss_function(real, pred)
给出以下输出:
tf.Tensor([0.04 0.01], shape=(2,), dtype=float32)
<tf.Tensor: shape=(), dtype=float32, numpy=0.024999999>
这应该只是 return 0.025
,为什么 returning 0.024999999
?
IEEE 754-2008 浮点运算标准的第 3.2 条说“浮点运算是实数运算的系统近似……”
浮点运算设计以逼近实数运算。如果不透彻理解浮点数格式和算术规则,就不要指望得到准确的结果。
在用于 float32
的 IEEE 754 binary32 格式中,最接近 .04 的可表示值是 0.039999999105930328369140625 (5368709•2−27)。最接近 .01 的可表示值是 0.00999999977648258209228515625 (5368709•2−29)。当使用 IEEE 754 规则将它们相加并除以二时,结果为 0.024999998509883880615234375 (3355443•2−27).