Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
FluidDoc
提交
868c7049
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看板
提交
868c7049
编写于
3月 04, 2020
作者:
G
gfwm2013
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Modify chinese documents of While and while_loop
test=develop
上级
afcfae7b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
30 addition
and
4 deletion
+30
-4
doc/fluid/api_cn/layers_cn/While_cn.rst
doc/fluid/api_cn/layers_cn/While_cn.rst
+26
-4
doc/fluid/api_cn/layers_cn/while_loop_cn.rst
doc/fluid/api_cn/layers_cn/while_loop_cn.rst
+4
-0
未找到文件。
doc/fluid/api_cn/layers_cn/While_cn.rst
浏览文件 @
868c7049
...
...
@@ -14,12 +14,15 @@ While
如果参数 ``cond`` 的形状为[1],强烈建议您使用新的OP :ref:`cn_api_fluid_layers_while_loop` 而不是 ``While``。
OP :ref:`cn_api_fluid_layers_while_loop` 的使用方式更简单,并且调用该OP所用的代码更少且功能与 ``While`` 一样。
``While`` 类似于C++中的while,在 ``While`` 中创建的局部变量是无法通过 ``Executor`` 中的 ``fetch_list`` 来捕获的。
若想实现该功能,请参考示例代码2 或参考 `issue#22724 <https://github.com/PaddlePaddle/Paddle/issues/22724>`_ 。
参数:
- **cond** (Variable) – 用于判断循环继续进行的条件,为数据类型bool型的Tensor,其shape必须为[1]。
- **is_test** (bool,可选) – 用于表明是否在测试阶段执行,默认值为False。
- **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name` ,一般无需设置,默认值为None。
**代码示例**
**代码示例
1
**
.. code-block:: python
...
...
@@ -44,13 +47,32 @@ While
print(res) # [array([10])]
**代码示例 2**
.. code-block:: python
import paddle.fluid as fluid
import numpy as np
i = fluid.layers.fill_constant(shape=[1], dtype='int64', value=0)
loop_len = fluid.layers.fill_constant(shape=[1], dtype='int64', value=10)
one = fluid.layers.fill_constant(shape=[1], dtype='float32', value=1)
data = fluid.data(name='data', shape=[1], dtype='float32')
sums = fluid.layers.fill_constant(shape=[1], dtype='float32', value=0) # 在 While 外先定义要捕获的变量,需和要捕获的 While 内部的变量名称不同
cond = fluid.layers.less_than(x=i, y=loop_len)
while_op = fluid.layers.While(cond=cond)
with while_op.block():
sums_tensor = fluid.layers.elementwise_add(x=data, y=data)
fluid.layers.assign(input=sums_tensor, output=sums) # 将 While 内定义的变量 sums_tenosr 通过 layers.assign 更新至 While 外的变量 sums 中
i = fluid.layers.increment(x=i, value=1, in_place=True)
data = fluid.layers.elementwise_add(x=data, y=one)
fluid.layers.less_than(x=i, y=loop_len, cond=cond)
feed_data = np.ones([1]).astype('float32')
exe = fluid.Executor(fluid.CPUPlace())
exe.run(fluid.default_startup_program())
res = exe.run(fluid.default_main_program(), feed={'data': feed_data}, fetch_list=sums)
print(res[0]) # [2.] # 因 While 内的 data 没有将值更新到 While 外,故循环过后此处 sums 的值为 [2.]
doc/fluid/api_cn/layers_cn/while_loop_cn.rst
浏览文件 @
868c7049
...
...
@@ -10,6 +10,10 @@ ____________________________________
该API用于实现类似while的循环控制功能,只要循环条件 ``cond`` 的返回值为True,``while_loop`` 则会循环执行循环体 ``body`` ,直到 ``cond`` 的返回值为False。
**注意**:
``body`` 中定义的局部变量无法使用 ``Executor`` 的 ``fetch_list`` 来捕获的,变量需在 ``body`` 外定义并将其置于 ``loop_vars`` 中进行循环更新后才可通过 ``fetch_list`` 捕获。
参数:
- **cond** (callable) - 返回boolean类型张量的可调用函数,用以判断循环是否继续执行。 ``cond`` 的参数和 ``loop_vars`` 相对应。
- **body** (callable) - 循环执行的结构体。其返回一个包含tensor或LoDTensorArray的列表或元组,且这些tensor或LoDTensorArray的长度,结构,类型和 ``loop_vars`` 中的相同。 且``body`` 的参数与 ``loop_vars`` 相对应。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录