当前位置:  开发笔记 > 编程语言 > 正文

计算布尔Tensor中"True"值的数量

如何解决《计算布尔Tensor中"True"值的数量》经验,为你挑选了3个好方法。

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

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

例如:

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.

Rafał Józefo.. 42

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

根据您的实际使用情况,如果指定调用的减小尺寸,您还可以计算每行/列的总和.



1> Rafał Józefo..:

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

根据您的实际使用情况,如果指定调用的减小尺寸,您还可以计算每行/列的总和.



2> Lerner Zhang..:

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

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



3> mrry..:

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

[H]我可以访问一个维度并在一个像总和的操作中使用它吗?

为此,您可以使用TensorFlow的形状相关操作,这些操作作用于张量的运行时值.例如,tf.size(t)生成一个Tensor包含元素数量的标量t,并tf.shape(t)生成Tensor包含t每个维度大小的1D .

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

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)

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有