You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.3 KiB
52 lines
1.3 KiB
7 years ago
|
# The `IfElse` Operator
|
||
8 years ago
|
|
||
7 years ago
|
PaddlePaddle's `IfElse` operator differs from TensorFlow's:
|
||
8 years ago
|
|
||
7 years ago
|
- the TensorFlow version takes a scalar boolean value as the condition so that the whole mini-batch goes to either the true or the false branch, whereas
|
||
|
- the PaddlePaddle version takes a vector of boolean value as the condition, and instances corresponding to true values go to the true branch, those corresponding to false values go to the false branch.
|
||
|
|
||
|
## Example
|
||
|
|
||
|
The following PaddlePaddle program shows the usage of the IfElse operator:
|
||
8 years ago
|
|
||
8 years ago
|
```python
|
||
|
import paddle as pd
|
||
|
|
||
7 years ago
|
x = minibatch([10, 20, 30]) # shape=[None, 1]
|
||
|
y = var(1) # shape=[1], value=1
|
||
|
z = minibatch([10, 20, 30]) # shape=[None, 1]
|
||
|
cond = larger_than(x, 15) # [false, true, true]
|
||
|
|
||
|
ie = pd.ifelse()
|
||
|
with ie.true_block():
|
||
|
d = pd.layer.add(x, y)
|
||
|
ie.output(d, pd.layer.softmax(d))
|
||
|
with ie.false_block():
|
||
|
d = pd.layer.fc(z)
|
||
|
ie.output(d, d+1)
|
||
|
o1, o2 = ie(cond)
|
||
|
```
|
||
8 years ago
|
|
||
7 years ago
|
A challenge to implement the `IfElse` operator is to infer those variables to be split, or, say, to identify the variable of the mini-batch or those derived from the mini-batch.
|
||
|
|
||
|
An equivalent C++ program is as follows:
|
||
|
|
||
|
```c++
|
||
|
namespace pd = paddle;
|
||
|
|
||
|
int x = 10;
|
||
|
int y = 1;
|
||
|
int z = 10;
|
||
|
bool cond = false;
|
||
|
int o1, o2;
|
||
|
if (cond) {
|
||
|
int d = x + y;
|
||
|
o1 = z;
|
||
|
o2 = pd::layer::softmax(z);
|
||
|
} else {
|
||
|
int d = pd::layer::fc(z);
|
||
|
o1 = d;
|
||
|
o2 = d+1;
|
||
|
}
|
||
8 years ago
|
```
|