问题描述
我想使用占位符控制函数的执行,但不断收到错误不允许将 tf.Tensor 用作 Python bool".这是产生此错误的代码:
将 tensorflow 导入为 tf定义 foo(c):如果 c:print('这是真的')#重代码在这里返回 10别的:print('这是假的')#这里的代码不同返回 0a = tf.placeholder(tf.bool) #单个布尔值的占位符b = foo(a)sess = tf.InteractiveSession()res = sess.run(b, feed_dict = {a: True})sess.close()
我将 if c
更改为 if c is not None
没有运气.那么如何通过打开和关闭占位符 a
来控制 foo
呢?
更新:正如@nessuno 和@nemo 指出的,我们必须使用tf.cond
而不是if..else
.我的问题的答案是像这样重新设计我的功能:
将 tensorflow 导入为 tf定义 foo(c):返回 tf.cond(c, func1, func2)a = tf.placeholder(tf.bool) #单个布尔值的占位符b = foo(a)sess = tf.InteractiveSession()res = sess.run(b, feed_dict = {a: True})sess.close()
你必须使用 tf.cond
来定义图中的条件操作并改变张量的流动.
将 tensorflow 导入为 tfa = tf.placeholder(tf.bool) #单个布尔值的占位符b = tf.cond(tf.equal(a, tf.constant(True)), lambda: tf.constant(10), lambda: tf.constant(0))sess = tf.InteractiveSession()res = sess.run(b, feed_dict = {a: True})sess.close()打印(资源)
10
I want to control the execution of a function using a placeholder, but keep getting an error "Using a tf.Tensor as a Python bool is not allowed". Here is the code that produces this error:
import tensorflow as tf
def foo(c):
if c:
print('This is true')
#heavy code here
return 10
else:
print('This is false')
#different code here
return 0
a = tf.placeholder(tf.bool) #placeholder for a single boolean value
b = foo(a)
sess = tf.InteractiveSession()
res = sess.run(b, feed_dict = {a: True})
sess.close()
I changed if c
to if c is not None
without luck. How can I control foo
by turning on and off the placeholder a
then?
Update: as @nessuno and @nemo point out, we must use tf.cond
instead of if..else
. The answer to my question is to re-design my function like this:
import tensorflow as tf
def foo(c):
return tf.cond(c, func1, func2)
a = tf.placeholder(tf.bool) #placeholder for a single boolean value
b = foo(a)
sess = tf.InteractiveSession()
res = sess.run(b, feed_dict = {a: True})
sess.close()
You have to use tf.cond
to define a conditional operation within the graph and change, thus, the flow of the tensors.
import tensorflow as tf
a = tf.placeholder(tf.bool) #placeholder for a single boolean value
b = tf.cond(tf.equal(a, tf.constant(True)), lambda: tf.constant(10), lambda: tf.constant(0))
sess = tf.InteractiveSession()
res = sess.run(b, feed_dict = {a: True})
sess.close()
print(res)
这篇关于tensorflow:检查标量布尔张量是否为真的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!