除以0时张量流的奇怪行为tf.metrics.mean_绝对值_

2024-06-01 21:11:29 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我不知道是一个bug还是我的代码有问题,但我正在努力理解发生了什么。 当我运行模型,并得到估计精度使用平均相对误差。我知道在我的验证数据中有0,所以我希望得到一些错误或一些inf。但事实并非如此。 这是我的代码:

X_test_norm = preprocessing.scale(X_test)
predictions = sess.run(pred, feed_dict={x: X_test_norm})
prediction = tf.convert_to_tensor(predictions)
expectation = tf.cast(Y_test, tf.float32)

MANUAL_MRE = tf.reduce_mean(tf.abs((Y_test - tf.transpose(predictions)) / Y_test))
MAE_op, MAE = tf.metrics.mean_absolute_error(expectation, prediction)
MRE_op, MRE = tf.metrics.mean_relative_error(expectation, prediction, expectation)
tf.local_variables_initializer().run()

print("MANUAL_MRE: %4f" % sess.run(MANUAL_MRE))
print("MRE: %4f" % sess.run(MRE))
print("MAE: %4f" % sess.run(MAE))

这是输出:

^{pr2}$

当我在值大于0的数据上运行它时,我的MANUAL_MRE和MRE值应该是一样的。我查了TF的文件,第一个案子没有意义。在

有人能告诉我哪里错了吗?或者我刚发现了一个bug/新功能。在


Tags: 数据run代码testtfmeanmanualbug
1条回答
网友
1楼 · 发布于 2024-06-01 21:11:29

我想我知道发生了什么,因为MRE是每个平均相对误差的平均值,因此我认为{}只是在相加,就像这个值与预测完全不符一样。我相信这就是为什么当我用数据集计算MRE时,我知道它是负的,因为标签给了我这么高的MRE值。在

你也许可以从下面的代码中更好地理解我为什么这么认为:

MANUAL_MRE = tf.reduce_mean(tf.abs((Y_test + 100) - (tf.transpose(predictions) + 100)) / (Y_test + 100))
MANUAL_TF_MRE = tf.reduce_mean(tf.divide(tf.abs(Y_test - tf.transpose(predictions)), Y_test))
MRE_op, MRE = tf.metrics.mean_relative_error(exp, predTF, exp)
tf.initialize_local_variables().run()

print("MANUAL_TF_MRE: %4f" % sess.run(MANUAL_TF_MRE))
print("MANUAL_MRE: %4f" % sess.run(MANUAL_MRE))
print("MRE: %4f" % sess.run(MRE))

MANUAL_TF_MRE:  inf
MANUAL_MRE: 0.084013
MRE: 4.255613

相关问题 更多 >