我正在尝试执行 bool 检查
num = tf.placeholder(tf.int32)
在 session 部分,使用 feed_dict num 设置为 0 到 10
if(num != 0):
...perform action...
即使 num 为 0,上述 bool 检查输出也始终为 true。
最佳答案
TensorFlow程序由两部分组成:构建阶段和执行阶段:
- 在构建阶段,您构建一个计算图。该阶段实际上没有执行任何计算。创建占位符时,您只是在(默认)图中创建一个节点。
- 然后在执行阶段(使用
tf.Session()
),运行图表(通常多次)。占位符 num 本身只是图中的一个节点,因此它始终为“True”。但是,如果您想运行图形来计算其值,则必须调用num.eval()
(或等效的session.run(num)
)。评估节点时,如果它(直接或不直接)依赖于占位符,那么您必须使用feed_dict
指定该占位符的值。
所以这是正确的程序:
>>> import tensorflow as tf
>>> num = tf.placeholder(tf.int32)
>>> with tf.Session():
... for val in range(11):
... if num.eval(feed_dict={num: val}):
... print(val, "is True")
... else:
... print(val, "is False")
...
0 is False
1 is True
2 is True
3 is True
4 is True
5 is True
6 is True
7 is True
8 is True
9 is True
10 is True
正如您所看到的,一切都按预期进行,特别是 0 为 False,其余为 True。
编辑
如果你想在图表本身中有一个条件,你可以使用tf.cond()
,例如:
>>> import tensorflow as tf
>>> num = tf.placeholder(tf.int32)
>>> a = tf.constant(3)
>>> b = tf.constant(5)
>>> calc = tf.cond(num > 0, lambda: a+b, lambda: a*b)
>>> with tf.Session():
... print(calc.eval(feed_dict={num: +10}))
... print(calc.eval(feed_dict={num: -10}))
8
15
关于python - bool 检查不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43435309/