如何在TensorFlow图中添加条件?
python
tensorflow
6
0

假设我有以下代码:

x = tf.placeholder("float32", shape=[None, ins_size**2*3], name = "x_input")
condition = tf.placeholder("int32", shape=[1, 1], name = "condition")
W = tf.Variable(tf.zeros([ins_size**2*3,label_option]), name = "weights")
b = tf.Variable(tf.zeros([label_option]), name = "bias")

if condition > 0:
    y = tf.nn.softmax(tf.matmul(x, W) + b)
else:
    y = tf.nn.softmax(tf.matmul(x, W) - b)  

if语句在计算中if工作(我认为不行)?如果没有,如何将if语句添加到TensorFlow计算图中?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

TensorFlow 2.0

TF 2.0引入了一个称为AutoGraph的功能该功能使您可以通过JIT将python代码编译为Graph执行。这意味着您可以使用python控制流语句(是的,这包括if语句)。从文档中

签名支持常用的Python之类的语句whileforifbreakcontinuereturn ,以嵌套的支持。这意味着您可以在whileif语句的条件下使用Tensor表达式,或者在for循环中遍历Tensor。

您将需要定义一个实现逻辑的函数,并使用tf.function对其进行tf.function 。这是文档中的修改示例:

import tensorflow as tf

@tf.function
def sum_even(items):
  s = 0
  for c in items:
    if tf.equal(c % 2, 0): 
        s += c
  return s

sum_even(tf.constant([10, 12, 15, 20]))
#  <tf.Tensor: id=1146, shape=(), dtype=int32, numpy=42>
收藏
评论

您正确的是, if语句在这里不起作用,因为条件是在图构造时评估的,而大概您希望条件取决于运行时馈入占位符的值。 (实际上,它将始终采用第一个分支,因为condition > 0得出 Tensor ,这在Python中“真实的” 。)

为了支持条件控制流,TensorFlow提供了tf.cond()运算符,该运算符根据布尔条件评估两个分支之一。为了向您展示如何使用它,我将重写您的程序,为简单起见, condition是标量tf.int32值:

x = tf.placeholder(tf.float32, shape=[None, ins_size**2*3], name="x_input")
condition = tf.placeholder(tf.int32, shape=[], name="condition")
W = tf.Variable(tf.zeros([ins_size**2 * 3, label_option]), name="weights")
b = tf.Variable(tf.zeros([label_option]), name="bias")

y = tf.cond(condition > 0, lambda: tf.matmul(x, W) + b, lambda: tf.matmul(x, W) - b)
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号