# 如何在TensorFlow圖中添加if條件？ - How to add if condition in a TensorFlow graph? -开发者知识库 Let's say I have following code:

``````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)
``````

Would the `if` statement work in the calculation (I do not think so)? If not, how can I add an `if` statement into the TensorFlow calculation graph?

if語句是否適用於計算（我不這么認為）？如果沒有，我如何在TensorFlow計算圖中添加if語句？

## 1 个解决方案

### #1

62

You're correct that the `if` statement doesn't work here, because the condition is evaluated at graph construction time, whereas presumably you want the condition to depend on the value fed to the placeholder at runtime. (In fact, it will always take the first branch, because `condition > 0` evaluates to a `Tensor`, which is "truthy" in Python.)

To support conditional control flow, TensorFlow provides the `tf.cond()` operator, which evaluates one of two branches, depending on a boolean condition. To show you how to use it, I'll rewrite your program so that `condition` is a scalar `tf.int32` value for simplicity:

``````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)
``````

0条回复