计算布尔Tensor中“True”值的数量

时间:2016-01-04 19:26:24

标签: python tensorflow

我了解tf.where将返回True值的位置,以便我可以使用结果的shape[0]来获取True的数量。

然而,当我尝试使用它时,维度是未知的(这是有意义的,因为它需要在运行时计算)。所以我的问题是,如何访问维度并在总和中使用它?

例如:

myOtherTensor = tf.constant([[True, True], [False, True]])
myTensor = tf.where(myOtherTensor)
myTensor.get_shape() #=> [None, 2]
sum = 0
sum += myTensor.get_shape().as_list()[0] # Well defined at runtime but considered None until then.

4 个答案:

答案 0 :(得分:39)

您可以将值转换为浮点数并计算它们的总和: tf.reduce_sum(tf.cast(myOtherTensor, tf.float32))

根据您的实际使用情况,如果指定了呼叫的缩减维度,您还可以计算每行/列的总和。

答案 1 :(得分:7)

我认为这是最简单的方法:

In [38]: myOtherTensor = tf.constant([[True, True], [False, True]])

In [39]: if_true = tf.count_nonzero(myOtherTensor)

In [40]: sess.run(if_true)
Out[40]: 3

答案 2 :(得分:6)

拉法尔的答案几乎肯定是计算张量中true元素数量的最简单方法,但问题的另一部分是:

  

[H]我可以访问维度并在总和中使用它吗?

为此,您可以使用TensorFlow shape-related operations,它作用于张量的运行时值。例如,tf.size(t)生成一个标量Tensor,其中包含t中元素的数量,tf.shape(t)生成包含Tensor大小的1D t在每个维度中。

使用这些运算符,您的程序也可以写成:

myOtherTensor = tf.constant([[True, True], [False, True]])
myTensor = tf.where(myOtherTensor)
countTrue = tf.shape(myTensor)[0]  # Size of `myTensor` in the 0th dimension.

sess = tf.Session()
sum = sess.run(countTrue)

答案 3 :(得分:3)

有一个tensorflow函数可以计算非零值tf.count_nonzero。该函数还接受keep_dimsimport numpy as np import tensorflow as tf a = tf.constant(np.random.random(100)) with tf.Session() as sess: print(sess.run(tf.count_nonzero(tf.greater(a, 0.5)))) 个参数。

这是一个简单的例子:

function total_commision($ids)
{
    $query = $this->db
        ->select('SUM(commision) AS total_commision, admin_credentials.*', FALSE)
        ->from("commision")
        ->join("admin_credentials", "admin_credentials.id = commision.hierarchy_users_id", "left")
        ->where_in('commision.hierarchy_users_id', $ids)
        ->group_by('commision.hierarchy_users_id')
        ->get();

    return $query->result();
}