gpt4 book ai didi

tensorflow - 如何使用 bool 张量制作 if 语句

转载 作者:行者123 更新时间:2023-12-03 23:21:39 25 4
gpt4 key购买 nike

如何使用 bool 张量制作 if 语句?更准确地说,我试图将大小为 1 的张量与常数进行比较,检查张量中的值是否小于常数。我发现我必须将常量设为自己的大小 1 张量并使用 this检查第一个张量是否小于第二个张量的方法,但我不确定如何使生成的 bool 张量正确适合 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)

最佳答案

TL;DR: 您需要使用 Session.run() 获得 Python bool 值,但还有其他方法可以实现相同的结果,可能更有效。

看起来您已经想出了如何从您的值中获取 bool 张量,但为了其他读者的利益,它看起来像这样:

computed_val = ...
constant_val = tf.constant(37.0)
pred = tf.less(computed_val, constant_val) # N.B. Types of the two args must match

下一部分是如何将其用作条件。最简单的方法是使用 Python if声明,但要做到这一点,您必须 评价 张量 pred使用 Session.run() :
sess = tf.Session()

if sess.run(pred):
# Do something.
else:
# Do something else.

关于使用 Python 的一个警告 if声明是您必须评估整个表达式,直到 pred ,这使得重用已经计算的中间值变得很棘手。我想提请您注意使用 TensorFlow 计算条件表达式的另外两种方法,它们不需要您评估谓词并返回 Python 值。

第一种方式使用 tf.select() op 有条件地通过作为参数传递的两个张量的值:
pred = tf.placeholder(tf.bool)  # Can be any computed boolean expression.
val_if_true = tf.constant(28.0)
val_if_false = tf.constant(12.0)
result = tf.select(pred, val_if_true, val_if_false)

sess = tf.Session()
sess.run(result, feed_dict={pred: True}) # ==> 28.0
sess.run(result, feed_dict={pred: False}) # ==> 12.0
tf.select() op 在其所有参数上按元素工作,这允许您组合来自两个输入张量的值。见 its documentation更多细节。 tf.select() 的缺点是它同时评估 val_if_trueval_if_false在计算结果之前,如果它们是复杂的表达式,这可能会很昂贵。

第二种方式使用 tf.cond() op,它有条件地计算两个表达式之一。如果表达式很昂贵,这是特别有用的,如果它们 have side effects 是必不可少的。 .基本模式是指定两个 Python 函数(或 lambda 表达式)来构建将在真或假分支上执行的子图:
# Define some large matrices
a = ...
b = ...
c = ...

pred = tf.placeholder(tf.bool)

def if_true():
return tf.matmul(a, b)

def if_false():
return tf.matmul(b, c)

# Will be `tf.cond()` in the next release.
from tensorflow.python.ops import control_flow_ops

result = tf.cond(pred, if_true, if_false)

sess = tf.Session()
sess.run(result, feed_dict={pred: True}) # ==> executes only (a x b)
sess.run(result, feed_dict={pred: False}) # ==> executes only (b x c)

关于tensorflow - 如何使用 bool 张量制作 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34959853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com