Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
FluidDoc
提交
544c76f1
F
FluidDoc
项目概览
PaddlePaddle
/
FluidDoc
通知
5
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
23
列表
看板
标记
里程碑
合并请求
111
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
FluidDoc
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
23
Issue
23
列表
看板
标记
里程碑
合并请求
111
合并请求
111
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
544c76f1
编写于
10月 11, 2019
作者:
Z
Zhaolong Xing
提交者:
GitHub
10月 11, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refine ifelse api doc (#1456)
test=develop
上级
a719d86f
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
18 addition
and
19 deletion
+18
-19
doc/fluid/api_cn/layers_cn/IfElse_cn.rst
doc/fluid/api_cn/layers_cn/IfElse_cn.rst
+18
-19
未找到文件。
doc/fluid/api_cn/layers_cn/IfElse_cn.rst
浏览文件 @
544c76f1
...
@@ -5,7 +5,7 @@ IfElse
...
@@ -5,7 +5,7 @@ IfElse
.. py:class:: paddle.fluid.layers.IfElse(cond, name=None)
.. py:class:: paddle.fluid.layers.IfElse(cond, name=None)
该类用于实现IfElse分支控制功能, IfElse包含两个Block,true_block
,
false_block,IfElse会将满足True或False条件的数据分别放入不同的block运行。
该类用于实现IfElse分支控制功能, IfElse包含两个Block,true_block
,
false_block,IfElse会将满足True或False条件的数据分别放入不同的block运行。
cond是一个shape为[N, 1]、数据类型为bool的2-D tensor,表示输入数据对应部分的执行条件。
cond是一个shape为[N, 1]、数据类型为bool的2-D tensor,表示输入数据对应部分的执行条件。
...
@@ -14,20 +14,20 @@ IfElse OP同其他的OP在使用上有一定的区别,可能会对一些用户
...
@@ -14,20 +14,20 @@ IfElse OP同其他的OP在使用上有一定的区别,可能会对一些用户
.. code-block:: python
.. code-block:: python
# 以下代码完成的功能:对x中大于0的数据减去10,对x中小于0的数据加上10
# 以下代码完成的功能:对x中大于0的数据减去10,对x中小于0的数据加上10
,并将所有的数据求和
import numpy as np
import numpy as np
import paddle.fluid as fluid
import paddle.fluid as fluid
x = fluid.layers.data(name='x', shape=[4, 1], dtype='float32', append_batch_size=False)
x = fluid.layers.data(name='x', shape=[4, 1], dtype='float32', append_batch_size=False)
y = fluid.layers.data(name='y', shape=[4, 1], dtype='float32', append_batch_size=False)
y = fluid.layers.data(name='y', shape=[4, 1], dtype='float32', append_batch_size=False)
x_d = np.array([[3], [1], [-
1
], [-3]]).astype(np.float32)
x_d = np.array([[3], [1], [-
2
], [-3]]).astype(np.float32)
y_d = np.zeros((4, 1)).astype(np.float32)
y_d = np.zeros((4, 1)).astype(np.float32)
# 比较x, y对元素的大小,输出cond, cond是shape为[4, 1],数据类型为bool的2-D tensor。
# 比较x, y对元素的大小,输出cond, cond是shape为[4, 1],数据类型为bool的2-D tensor。
# 根据输入数据x_d, y_d,可以推断出cond中的数据为[[true], [true], [false], [false]]
# 根据输入数据x_d, y_d,可以推断出cond中的数据为[[true], [true], [false], [false]]
cond = fluid.layers.greater_than(x, y)
cond = fluid.layers.greater_than(x, y)
# 同其他常见OP不同的是,该OP返回的ie
不是Variable而
是一个IfElse OP的对象
# 同其他常见OP不同的是,该OP返回的ie是一个IfElse OP的对象
ie = fluid.layers.IfElse(cond)
ie = fluid.layers.IfElse(cond)
with ie.true_block():
with ie.true_block():
...
@@ -41,18 +41,18 @@ IfElse OP同其他的OP在使用上有一定的区别,可能会对一些用户
...
@@ -41,18 +41,18 @@ IfElse OP同其他的OP在使用上有一定的区别,可能会对一些用户
out_1 = out_1 + 10
out_1 = out_1 + 10
ie.output(out_1)
ie.output(out_1)
# 根据cond条件将两个block中处理后的数据进行合并,此处的output为输出的Variable
# 根据cond条件将两个block中处理后的数据进行合并,此处的output为输出,类型为List,List中的元素类型为Variable。
output = ie()
output = ie() # [array([[-7.], [-9.], [ 8.], [ 7.]], dtype=float32)]
# 将输出List中的第一个Variable获取出来,并计算所有元素和
out = fluid.layers.reduce_sum(output[0])
exe = fluid.Executor(fluid.CPUPlace())
exe = fluid.Executor(fluid.CPUPlace())
exe.run(fluid.default_startup_program())
exe.run(fluid.default_startup_program())
res = exe.run(fluid.default_main_program(), feed={"x":x_d, "y":y_d}, fetch_list=[out
put[0]
])
res = exe.run(fluid.default_main_program(), feed={"x":x_d, "y":y_d}, fetch_list=[out])
print res
print res
# [array([[-7.],
# [array([-1.], dtype=float32)]
# [-9.],
# [ 9.],
# [ 7.]], dtype=float32)]
参数:
参数:
- **cond** (Variable)- cond是一个shape为[N, 1]、数据类型为bool的2-D tensor,表示N个输入数据的对应的执行条件。数据类型为bool。
- **cond** (Variable)- cond是一个shape为[N, 1]、数据类型为bool的2-D tensor,表示N个输入数据的对应的执行条件。数据类型为bool。
...
@@ -60,18 +60,17 @@ IfElse OP同其他的OP在使用上有一定的区别,可能会对一些用户
...
@@ -60,18 +60,17 @@ IfElse OP同其他的OP在使用上有一定的区别,可能会对一些用户
**返回:**
**返回:**
同其他常见OP不同的是:该OP调用返回一个IfElse OP对象(如例子中的 ie)而非Variable,需要调用对象内部函数对不同cond下的输入进行处理。
同其他常见OP不同的是,该OP调用返回一个IfElse OP对象(如例子中的 ie),通过调用对象内部函数 ``true_block()`` , ``false_block()`` , ``input()`` , ``output()`` 对输入数据进行分支处理,
通过调用内部的 ``__call__()`` 函数,将不同分支处理的数据进行整合,作为整体的输出,输出类型为列表,列表中每个元素的类型为Variable。
**内部函数:**
**内部函数:**
通过调用对象中的 ``with ie.true_block()`` 函数构建block,将条件为true下的计算逻辑放入此block中。如果没有构建相应的block,则对应条件维度下的输入数据不做改变。
- 通过调用对象中的 ``with ie.true_block()`` 函数构建block,将条件为true下的计算逻辑放入此block中。如果没有构建相应的block,则对应条件维度下的输入数据不做改变。
``out = ie.input(x)`` 会将x中对应条件维度的数据获取出来放入到out中,支持block内部处理多个输入。
``ie.output(out)`` 会将结果写入对应条件的输出中。
对象内部有 ``__call__()`` 函数,即通过对 ``output = ie()`` 的调用,将条件分别为True,False的block内部所有的输出进行融合作为整体的输出,输出的类型为列表,列表中每个元素的类型为Variable。
- 通过调用对象中的 ``with ie.false_block()`` 函数构建block,将条件为false下的计算逻辑放入此block中。如果没有构建相应的block,则对应条件维度下的输入数据不做改变。
- ``out = ie.input(x)`` 会将x中对应条件维度的数据获取出来放入到out中,支持block内部处理多个输入。
- ``ie.output(out)`` 会将结果写入对应条件的输出中。
- 对象内部有 ``__call__()`` 函数,即通过对 ``output = ie()`` 的调用,将条件分别为True,False的block内部所有的输出进行融合作为整体的输出,输出的类型为列表,列表中每个元素的类型为Variable。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录