我正在尝试执行布尔检查
num = tf.placeholder(tf.int32)
在会话部分中,使用feed_dict num设置为0到10
if(num != 0):
...perform action...
即使num为0,上述布尔检查输出也始终为真。
答案 0 :(得分:2)
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为假,其余为真。
修改强>
如果您想在图表中包含条件,可以使用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