gpt4 book ai didi

python - Tensorflow均方误差计算与sklearn不同

转载 作者:行者123 更新时间:2023-11-30 22:11:04 27 4
gpt4 key购买 nike

我正在尝试使用tensorflow计算mse并将结果与​​sklearn.metrics.mean_squared_error方法进行比较。

def mse(y,y_hat):
return tf.reduce_mean(tf.squared_difference(y, y_hat)).eval()

compute_mse = lambda vector1, vector2: mse(vector1,vector2)

我的测试循环

for n in [1,5,10,10**3]:

elems = [np.arange(n),np.arange(n,0,-1), np.zeros(n),
np.ones(n),np.random.random(n),np.random.randint(100,size=n)]

for el in elems:
for el_2 in elems:
true_mse = np.array(mean_squared_error(el,el_2))
my_mse = compute_mse(el,el_2)
if not np.allclose(true_mse,my_mse):
print('Wrong result:')

print("All tests passed")

但我的 tf 函数总是返回 0 或 1。请您指出我哪里错了。

UPD

感谢 @apnorton 指出类型问题。

def mse(y,y_hat):
y_ = tf.Variable(y, tf.float64)
y_hat_ = tf.Variable(y_hat, tf.float64)
return tf.reduce_mean(tf.squared_difference(y_, y_hat_).eval()

最佳答案

如果打印 tf 函数的所有输出,您会发现它不仅返回 1 和 0,而且仅返回整数。这是因为 elems 的值都是 numpy.int32 类型。在执行平均步骤时,sklearn 函数似乎将这些转换为 float ,而 tensorflow 方法则不会。

要查看固定变体,请考虑将 compute_mse 行更改为:

my_mse = compute_mse(el.astype(float),el_2.astype(float))
<小时/>

编辑:为了回答评论中的问题,我会避免仅出于强制转换的目的创建变量。相反,我建议使用 tf.to_float方法:

def mse(y,y_hat):
return tf.reduce_mean(tf.squared_difference(tf.to_float(y), tf.to_float(y_hat))).eval()

关于python - Tensorflow均方误差计算与sklearn不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51531156/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com