我正在制作一個損失函數(shù),我在其中使用了tf.reduce_mean(). 但它返回一個近似值。我的代碼如下:import tensorflow as tfreal = [[1.0], [0.3]]pred = [[0.8], [0.2]]loss_object2 = tf.keras.losses.mean_squared_errordef 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>這應(yīng)該只是回歸0.025,為什么要回歸0.024999999?
1 回答

瀟湘沐
TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個贊
IEEE 754-2008 浮點(diǎn)運(yùn)算標(biāo)準(zhǔn)的第 3.2 條說“浮點(diǎn)運(yùn)算是實(shí)數(shù)運(yùn)算的系統(tǒng)近似……”
浮點(diǎn)運(yùn)算旨在逼近實(shí)數(shù)運(yùn)算。如果沒有對浮點(diǎn)格式和算術(shù)規(guī)則有透徹的理解,就不要指望得到準(zhǔn)確的結(jié)果。
在用于 的 IEEE 754 binary32 格式中float32
,最接近 .04 的可表示值是 0.039999999105930328369140625 (5368709?2 ?27 )。最接近 .01 的可表示值是 0.00999999977648258209228515625 (5368709?2 -29 )。當(dāng)使用 IEEE 754 規(guī)則將它們相加并除以二時,結(jié)果為 0.024999998509883880615234375 (3355443?2 -27 )。
添加回答
舉報(bào)
0/150
提交
取消