我理解tf.where
将返回True
值的位置,以便我可以使用结果shape[0]
来获取True
s 的数量.
但是,当我尝试使用它时,维度是未知的(这是有意义的,因为它需要在运行时计算).所以我的问题是,我如何访问一个维度并在一个像总和的操作中使用它?
例如:
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))
根据您的实际使用情况,如果指定调用的减小尺寸,您还可以计算每行/列的总和.
您可以将值转换为浮点数并计算它们的总和:
tf.reduce_sum(tf.cast(myOtherTensor, tf.float32))
根据您的实际使用情况,如果指定调用的减小尺寸,您还可以计算每行/列的总和.
我认为这是最简单的方法:
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
拉法尔的答案几乎肯定是计算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)