Python 安全地检查tf.张量是否满足某些条件
如果我想检查Python 安全地检查tf.张量是否满足某些条件,python,tensorflow,Python,Tensorflow,如果我想检查tnsr=tf.constant(…)中的所有元素是否大于3,我可以tf.reduce\u all(tnsr>3)得到一个标量布尔张量。如果我使用的是急切执行,或者@tf.function,那么我可以将其用作正常的bool: @tf.function def foo(tnsr): if tf.reduce_all(tnsr > 3): ... 但是这个。那我该怎么办 我尝试过的其他事情: tf.cond返回tf.Tensor即使对于true\u fn
tnsr=tf.constant(…)
中的所有元素是否大于3,我可以tf.reduce\u all(tnsr>3)
得到一个标量布尔张量。如果我使用的是急切执行,或者@tf.function
,那么我可以将其用作正常的bool
:
@tf.function
def foo(tnsr):
if tf.reduce_all(tnsr > 3):
...
但是这个。那我该怎么办
我尝试过的其他事情:
返回tf.cond
即使对于tf.Tensor
true\u fn=lambda:true
失败的原因与上述相同bool(tf.reduce_all(tnsr>3))
tf.cond
不允许将tf.Tensor
作为这种情况下的第一个参数”-如何?是专门为这个目的设计的,你能举例说明你不能使用它吗?@jdehesa我错了。我认为问题在于tf.cond
返回一个tf.Tensor
,这并不能解决我的问题。对,但这就是tf.cond
的工作原理,其思想是在true\u fn
callable中执行在if
的第一部分中要执行的操作,在false\fn
中执行else
部分。也许你可以给出一个完整的小例子,说明你不知道如何从if
转换到tf.cond
?@jdehesa好的,我明白你的意思,但这并不总是可能的。特别是,我定义了一个\uuuu contains\uuu
方法,它接受一个参数并返回bool
(尽管我的方法有时返回标量布尔张量)。无法将tf.cond
放在\uuuuuu包含的方法中:这必须由调用方决定