【发布时间】:2016-01-23 05:08:17
【问题描述】:
如何使用布尔张量创建 if 语句?更准确地说,我试图将大小为 1 的张量与常数进行比较,检查张量中的值是否小于常数。我发现我必须将常量设为自己的大小 1 张量并使用 this 方法检查第一个张量是否小于第二个张量,但我不确定如何使生成的布尔张量正确适合if 语句。只需将其作为 if 语句的查询放入 if 语句总是返回 true。
编辑:这或多或少是代码的样子。但是,无论是否有参数,我都会收到错误 'bool' object has no attribute 'name',这让我认为问题在于它没有返回 TensorFlow 对象。
pred = tf.placeholder(tf.bool)
def if_true(x, y, z):
#act on x, y, and z
return True
def if_false():
return False
# Will be `tf.cond()` in the next release.
from tensorflow.python.ops import control_flow_ops
from functools import partial
x = ...
y = ...
z = ...
result = control_flow_ops.cond(pred, partial(if_true, x, y, z), if_false)
【问题讨论】:
-
我认为您需要从
if_true和if_false函数返回Tensor对象。这些可以分别是tf.constant(True)和tf.constant(False)。如果您对x、y和z的操作有副作用,请务必在返回的张量中添加对它们的控制依赖,否则它们可能无法执行。 -
这违背了原始条件的目的。不过,对于我的特定变量,我可能已经找到了解决方法。
-
嗯,如果将输出作为
Tensor不满足您的需求,那么我认为您没有将结果提供给进一步的 TensorFlow 子图。在这种情况下,使用sess.run()和简单的 Pythonif语句可能是最简单的。
标签: tensorflow