【问题标题】:TensorFlow - Ignore infinite values when calculating the mean of a tensorTensorFlow - 计算张量的平均值时忽略无限值
【发布时间】:2017-04-21 14:22:16
【问题描述】:

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

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

例如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

【问题讨论】:

    标签: python numpy tensorflow


    【解决方案1】:

    您可以使用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 值。

    【讨论】:

    • 关键思想是 boolean_mask 的意思是“应用掩码”,而不是“创建掩码”。 boolean_mask 不返回布尔掩码。啊哈!那么好吧。
    【解决方案2】:

    给出的答案几乎是正确的。关于忽略 non-finite 值的问题,答案只忽略 infinite 值。它们不是一回事,特别是关于 nan

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

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

    【讨论】:

      猜你喜欢
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 2020-12-19
      • 2021-10-08
      相关资源
      最近更新 更多