python - bool 检查不起作用

标签 python tensorflow

我正在尝试执行 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/

相关文章:

python - 使用 pip 在 OS X 上重新安装 numpy - "can’ t 被修改或删除,因为 OS X 需要它”

python - 我怎么不小心用pip安装了一个包的两个版本?

tensorflow - Pycharm 在从终端运行的脚本上给出错误(模块 : Tensorflow)

tensorflow - tf keras SparseCategoricalCrossentropy 和 sparse_categorical_accuracy 在训练期间报告错误值

python - 'max_pooling2d_8/MaxPool' 1 减 3 导致的负维度大小

tensorflow - 如何在 Tensorflow 中制作二维高斯滤波器?

python - Cloud ML Engine 在线预测无法扩展

python - 如何在Anaconda安装的Spyder中使用arcpy模块?

python - 如何将列表中的文本作为单独的 canvas.create_text 添加到 Canvas

python - 在 Tensorflow 中,为什么 print() 在 if-else 的两个语句中都执行?