我有一个关于使用 MeanSquaredError() 进行舍入的小问题。考虑以下程序
import tensorflow as tf
import numpy as np
tf.keras.backend.set_floatx('float64')
print(tf.keras.backend.floatx())
mse = tf.keras.losses.MeanSquaredError()
y_true = np.asarray([0.0, 0.0, 0.0])
y_pred = np.asarray([0.0, 1.0, 0.0])
tf_mse = mse(y_true,y_pred).numpy()
np_mse = np.sum((y_true-y_pred)**2)/3.0
print('tf mse = ', tf_mse)
print('numpy_mse = ', np_mse)
在 Windows 10 上的 WSL2 上使用 TensorFlow 2.7 和 Numpy 1.21.4,我得到
tf mse = 0.3333333432674408
numpy_mse = 0.3333333333333333
我不会预料到小数点后 8 位的舍入错误,我会预料到小数点后 12 位后的不匹配。不匹配的根源可能是什么?无论如何,这对我来说都不是一个表演障碍,但我对这种不匹配感到好奇。
答案与其他输入相匹配,例如
y_true = np.asarray([0.0, 0.0, 0.0])
y_pred = np.asarray([0.0, 12.0, 0.0])