TensorFlow 计算的均方误差

Mean squared error computed by TensorFlow

我正在尝试弄清楚 tensorflow 是如何计算均方误差 (MSE) 的,并且正在阅读 https://www.tensorflow.org/api_docs/python/tf/keras/metrics/mean_squared_error 的 post。

首先,MSE定义为(见https://en.wikipedia.org/wiki/Mean_squared_error):

假设我有一个输出并创建真实值和预测值。

import numpy as np
import random

y_true = np.random.randint(0, 10, size=(2, 1))
print(y_true,"\n")
y_pred = np.random.randint(0,5,size=(2, 1))
print(y_pred)

[[7]
 [5]]

[[2]
 [2]]

当我调用 tf.keras.losses.mean_squared_error(y_true, y_pred) 时,我希望看到的是 [(7-2)^2 + (5-2)^2]/2 = 17,然而,它 returns 我 array([25, 9])。为什么 tensorflow 不计算平均值?

然后,我增加列数。

y_true = np.random.randint(0, 10, size=(2, 3))
print(y_true,"\n")
y_pred = np.random.randint(0,5,size=(2, 3))
print(y_pred)

[[2 6 0]
 [3 3 4]] 

[[4 2 4]
 [3 4 2]]

tensorflow返回的答案是array([12, 1])。我无法理解这些值是如何计算的。我期待的是 [(2-4)^2+ (6-2)^2+(0-4)^2]/2 + [(3-3)^2 + (3-4)^2+ (4-2)^2]/2 .

第二个值计算为

a = np.array([2,6,0])
b = np.array([4,2,4])
((b - a)**2).mean()

[(2-4)^2+ (6-2)^2+(0-4)^2]/3

根据他们的 doc 相当于 np.mean(np.square(y_true - y_pred), axis=-1)

所以它是按行计算 mse。