布尔检查不起作用Tensorflow

时间:2017-04-16 08:30:47

标签: python tensorflow

我正在尝试执行布尔检查

num = tf.placeholder(tf.int32)

在会话部分中,使用feed_dict num设置为0到10

if(num != 0):
   ...perform action...

即使num为0,上述布尔检查输出也始终为真。

1 个答案:

答案 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