TensorFlow 计算的均方误差
Posted
技术标签:
【中文标题】TensorFlow 计算的均方误差【英文标题】:Mean squared error computed by TensorFlow 【发布时间】:2022-01-14 16:12:37 【问题描述】:我试图弄清楚tensorflow
是如何计算均方误差 (MSE) 的,并且正在阅读https://www.tensorflow.org/api_docs/python/tf/keras/metrics/mean_squared_error 的帖子。
首先,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
,但是,它返回给我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
。
【问题讨论】:
你检查过 tensorflow 代码吗?你不明白什么。当您遇到无法解决的特定问题时,最好使用本网站,寻求指导的一般问题不符合 SO 的目标。 不,我没有,我决定突然问这个问题(!) 【参考方案1】:第二个值计算为
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。
【讨论】:
好的,但是第二行是如何计算的呢?它应该返回5/3
我认为是因为您使用的是整数
所以如果我用整数训练网络,我必须将所有内容都转换为浮点数才能得到正确的结果?
嗯,我想是的。为什么要用整数训练 NN?
我的参数是整数,输出也是整数。以上是关于TensorFlow 计算的均方误差的主要内容,如果未能解决你的问题,请参考以下文章