Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion doc/fluid/api/api_guides/low_level/layers/conv.rst
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
对于depthwise convolution,可以设置groups等于输入通道数,此时,2D卷积的卷积核形状为[C_o, 1, f_h, f_w]。
对于pointwise convolution,卷积核的形状为[C_o, C_in, 1, 1]。

**注意**:Fluid针对depthwise convolution的GPU计算做了高度优化,您可以通过在:code:`fluid.layers.conv2d`接口设置:code:`use_cudnn=False`来使用Fluid自身优化的CUDA程序。
**注意**:Fluid针对depthwise convolution的GPU计算做了高度优化,您可以通过在 :code:`fluid.layers.conv2d`接口设置 :code:`use_cudnn=False`来使用Fluid自身优化的CUDA程序。

- 空洞卷积(dilated convolution):

Expand Down
96 changes: 96 additions & 0 deletions doc/fluid/api/executor_cn.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@


.. cn_api_fluid_executor:

Executor
=======================


*class* paddle.fluid.executor. Executor *(place)*
---------------------------------------------------------



执行引擎(Executor)使用python脚本驱动,仅支持在单GPU环境下运行。多卡环境下请参考 ``ParallelExecutor`` 。
Python Executor可以接收传入的program,并根据feed map(输入映射表)和fetch_list(结果获取表)
向program中添加feed operators(数据输入算子)和fetch operators(结果获取算子)。
feed map为该program提供输入数据。fetch_list提供program训练结束后用户预期的变量(或识别类场景中的命名)。

应注意,执行器会执行program中的所有算子而不仅仅是依赖于fetch_list的那部分。

Executor将全局变量存储到全局作用域中,并为临时变量创建局部作用域。
当每一mini-batch上的前向/反向运算完成后,局部作用域的内容将被废弃,
但全局作用域中的变量将在Executor的不同执行过程中一直存在。

program中所有的算子会按顺序执行。

参数:
- place (core.CPUPlace|core.CUDAPlace(n)) – 指明了 ``Executor`` 的执行场所



提示:你可以用Executor来调试基于并行GPU实现的复杂网络,他们有完全一样的参数也会产生相同的结果。


``close()``
++++++++++++++++++++++++

关闭这个执行器(Executor)。调用这个方法后不可以再使用这个执行器。 对于分布式训练, 该函数会释放在PServers上涉及到目前训练器的资源。

**示例代码**

.. code-block:: python

cpu = core.CPUPlace()
exe = Executor(cpu)
...
exe.close()



``run(program=None, feed=None, fetch_list=None, feed_var_name='feed', fetch_var_name='fetch', scope=None, return_numpy=True, use_program_cache=False)``
*************************************************************************************************************************************************************************

调用该执行器对象的此方法可以执行program。通过feed map提供待学习数据,以及借助fetch_list得到相应的结果。
Python执行器(Executor)可以接收传入的program,并根据输入映射表(feed map)和结果获取表(fetch_list)
向program中添加数据输入算子(feed operators)和结果获取算子(fetch operators)。
feed map为该program提供输入数据。fetch_list提供program训练结束后用户预期的变量(或识别类场景中的命名)。

应注意,执行器会执行program中的所有算子而不仅仅是依赖于fetch_list的那部分。

参数:
- program (Program) – 需要执行的program,如果没有给定那么默认使用default_main_program
- feed (dict) – 前向输入的变量,数据,词典dict类型, 例如 {“image”: ImageData, “label”: LableData}
- fetch_list (list) – 用户想得到的变量或者命名的列表, run会根据这个列表给与结果
- feed_var_name (str) – 前向算子(feed operator)变量的名称
- fetch_var_name (str) – 结果获取算子(fetch operator)的输出变量名称
- scope (Scope) – 执行这个program的域,用户可以指定不同的域。缺省为全局域
- return_numpy (bool) – 如果为True,则将结果张量(fetched tensor)转化为numpy
- use_program_cache (bool) – 当program较上次比没有改动则将其置为True
**示例代码**

.. code-block:: python


data = layers.data(name='X', shape=[1], dtype='float32')
hidden = layers.fc(input=data, size=10)
layers.assign(hidden, out)
loss = layers.mean(out)
adam = fluid.optimizer.Adam()
adam.minimize(loss)


.. code-block:: python


cpu = core.CPUPlace()
exe = Executor(cpu)
exe.run(default_startup_program())

.. code-block:: python

x = numpy.random.random(size=(10, 1)).astype('float32')
outs = exe.run(
feed={'X': x},
fetch_list=[loss.name])

102 changes: 102 additions & 0 deletions doc/fluid/api/fluid_cn.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
.. cn_api_fluid_default_startup_program:


default_startup_program
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

paddle.fluid.default_startup_program()
""""""""""""""""""""""""""""""""""""""""""


该函数可以获取默认/全局 startup program (启动程序)。

``fluid.layers`` 中的layer函数会新建参数、读取器(readers)、NCCL句柄作为全局变量。

startup_program会使用内在的算子(operators)去初始化他们,并由layer函数将这些operators追加到startup program中。

该函数将返回默认的或当前的startup_program。用户可以使用 ``fluid.program_guard`` 去切换program。

返回: startup program

返回类型: Program






.. cn_api_fluid_default_main_program:


default_main_program
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

paddle.fluid.default_main_program()
""""""""""""""""""""""""""""""""""""""""""




此函数用于获取默认或全局main program(主程序)。该主程序用于训练和测试模型。

``fluid.layers`` 中的所有layer函数可以向 ``default_main_program`` 中添加算子(operators)和变量(variables)。

``default_main_program`` 是fluid的许多编程接口(API)的Program参数的缺省值。例如,当用户program没有传入的时候,
``Executor.run()`` 会默认执行 ``default_main_program`` 。


返回: main program

返回类型: Program






.. cn_api_fluid_program_guard:


program_guard
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

paddle.fluid.program_guard(*args, **kwds)
""""""""""""""""""""""""""""""""""""""""""


该函数应配合使用python的“with”语句来改变全局主程序(main program)和启动程序(startup program)。

“with”语句块中的layer函数将在新的主程序(main program)后添加算子(operators)和变量(variables)。

**代码示例**

.. code-block:: python

import paddle.fluid as fluid
main_program = fluid.Program()
startup_program = fluid.Program()
with fluid.program_guard(main_program, startup_program):
data = fluid.layers.data(...)
hidden = fluid.layers.fc(...)

需要注意的是,如果用户不需要构建自己的启动程序或者主程序,一个临时的program将会发挥作用。

.. The temporary Program can be used if the user does not need to construct either of startup program or main program.

**代码示例**

.. code-block:: python

import paddle.fluid as fluid
main_program = fluid.Program()
# does not care about startup program. Just pass a temporary value.
with fluid.program_guard(main_program, fluid.Program()):
data = ...


参数:
- **main_program** (Program) – “with”语句中将使用的新的主程序(main program)。
- **startup_program** (Program) – “with”语句中将使用的新的启动程序(startup program)。若传入 ``None`` 则不改变当前的启动程序。



139 changes: 139 additions & 0 deletions doc/fluid/api/layers_cn.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@

.. _cn_api_fluid_layers_While:

While
>>>>>>>>>>>>

*class* paddle.fluid.layers. While *(cond, is_test=False, name=None)*
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

该类用于实现while循环控制功能。


参数:
- cond (Variable) – 用于比较的条件
- is_test (bool) – 用于表明是不是在测试阶段执行


**代码示例**

.. code-block:: python

d0 = layers.data("d0", shape=[10], dtype='float32')
data_array = layers.array_write(x=d0, i=i)
array_len = layers.fill_constant(shape=[1],dtype='int64', value=3)
cond = layers.less_than(x=i, y=array_len)
while_op = layers.While(cond=cond)
with while_op.block():
d = layers.array_read(array=data_array, i=i)
i = layers.increment(x=i, in_place=True)
layers.array_write(result, i=i, array=d)
layers.less_than(x=i, y=array_len, cond=cond)



.. _cn_api_fluid_layers_Switch:

Switch
>>>>>>>>>>>>>>>>>>>>
*class* paddle.fluid.layers. Switch *(name=None)*
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

Switch类实现的功能十分类似if-elif-else。它可以在学习率调度器(learning rate scheduler)中调整学习率。
::
语义上,
1. switch控制流挨个检查cases
2. 各个case的条件是一个布尔值(boolean),它是一个标量(scalar)变量
3. 它将执行第一个匹配的case后面的分支,如果没有匹配的case,但若存在一个default case,则会执行default case后面的语句
4. 一旦匹配了一个case,它降会执行这个case所对应的分支,且仅此分支。

**代码示例**

.. code-block:: python

lr = fluid.layers.tensor.create_global_var(
shape=[1],
value=0.0,
dtype='float32',
persistable=True,
name="learning_rate")
one_var = tensor.fill_constant(
shape=[1], dtype='float32', value=1.0)
two_var = tensor.fill_constant(
shape=[1], dtype='float32', value=2.0)

with fluid.layers.control_flow.Switch() as switch:
with switch.case(global_step == zero_var):
fluid.layers.tensor.assign(input=one_var, output=lr)
with switch.default():
fluid.layers.tensor.assign(input=two_var, output=lr)

``case(condition)``
""""""""""""""""""""""""""""""""""
为该condition(情况,条件)建立新的block(块)。


``default()``
""""""""""""""""""""""""""""""""""""""
为该switch建立default case。







.. _cn_api_fluid_layers_increment:

increment
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

paddle.fluid.layers. increment(x, value=1.0, in_place=True)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

该函数为x中的每一个值增加 ``value`` 大小, ``value`` 即函数中待传入的参数。该函数默认直接在原变量x上进行运算。

参数:
- x (Variable|list) – 含有输入值的张量(tensor)
- value (float) – 需要增加在x变量上的值
- in_place (bool) – 是否在x变量本身进行增加操作,而非返回其增加后的一个副本本身不改变。默认为True, 即在其本身进行操作。

返回: 每个元素增加后的对象
返回类型:变量(variable)

**代码示例**

.. code-block:: python

data = fluid.layers.data(name='data', shape=[32, 32], dtype='float32')
data = fluid.layers.increment(x=data, value=3.0, in_place=True)





.. _cn_api_fluid_layers_array_write:

array_write
>>>>>>>>>>>>>>>>>>>>>>
paddle.fluid.layers. array_write(x, i, array=None)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
该函数将给定的输入变量(即 ``x`` )写入一个作为输出的 ``LOD_TENSOR_ARRAY`` 变量的某一指定位置中,
这一位置由数组下标(即 ``i`` )指明。 如果 ``LOD_TENSOR_ARRAY`` (即 ``array`` )未指定(即为None值), 一个新的 ``LOD_TENSOR_ARRAY`` 将会被创建并作为结果返回。

参数:
- x (Variable|list) – 待从中读取数据的输入张量(tensor)
- i (Variable|list) – 输出结果 ``LOD_TENSOR_ARRAY`` 的下标, 该下标指向输入张量 ``x`` 写入输出数组的位置
- array (Variable|list) – 会被输入张量 ``x`` 写入的输出结果 ``LOD_TENSOR_ARRAY`` 。如果该项值为None, If this parameter is NONE, 一个新的 ``LOD_TENSOR_ARRAY`` 将会被创建并作为结果返回

返回: 输入张量 ``x`` 所写入的输出结果 ``LOD_TENSOR_ARRAY``
返回类型: 变量(Variable)

**代码示例**

.. code-block:: python

tmp = fluid.layers.zeros(shape=[10], dtype='int32')
i = fluid.layers.fill_constant(shape=[1], dtype='int64', value=10)
arr = layers.array_write(tmp, i=i)