TensorFlow - 计算张量平均值时忽略无穷大值

时间:2017-04-21 14:22:16

标签: python numpy tensorflow

这可能是一个基本问题,但我无法找到解决方案:

我需要计算张量的平均值忽略任何非有限值。

例如mean([2.0, 3.0, inf, 5.0])应该返回3.333而不是inf也不会2.5

我已尝试sess.run(tf.reduce_mean([2.0, 3.0, inf, 5.0])),但会返回inf

2 个答案:

答案 0 :(得分:5)

您可以使用is_finiteboolean_mask的组合。

import tensorflow as tf

x = tf.constant([2, 3, float('Inf'), 5])
mymean = tf.reduce_mean(tf.boolean_mask(x, tf.is_finite(x)))

sess = tf.Session()
sess.run(mymean)

请注意,is_finite也会删除NaN值。

答案 1 :(得分:5)

给出的答案几乎是正确的。关于忽略非有限值的问题,答案只忽略无限值。它们不是一回事,特别是 nan

要实际忽略任何非有限值(包括nan),请使用这个稍微简单的行:

mymean = tf.reduce_mean(tf.boolean_mask(x, tf.is_finite(x))