TensorFlow-在计算张量的平均值时忽略无限值

ESa*_*ala 3 python numpy tensorflow

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

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

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

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

P-G*_*-Gn 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)
Run Code Online (Sandbox Code Playgroud)

请注意,这is_finite也会摆脱NaN值。

  • 关键思想是boolean_mask表示“应用掩码”,而不是“创建掩码”。boolean_mask不返回布尔值掩码。啊哈!好吧。 (2认同)

Luc*_*asB 5

给出的答案几乎是正确的。问有关忽略非有限值的问题,答案仅忽略无穷值。他们不是同一件事,特别是关于nan

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

mymean = tf.reduce_mean(tf.boolean_mask(x, tf.is_finite(x))
Run Code Online (Sandbox Code Playgroud)