提交 6e2aed80 编写于 作者: T Tink_Y 提交者: Cheerego

Cherry-pick form develop to 1.2 (#499)

* fix the ref for api_guides

* update_book

* fix for python3 support (#488)

* fix for python3 support
test=develop

* test=develop

* backward.rst

* Update backward.rst

* Update programming_guide.md (#493)
上级 64609673
.. _api_guide_backward:
########
反向传播
########
神经网络对模型的表达能力依赖于优化算法,优化是一个不断计算梯度并调整可学习参数的过程,Fluid中的优化算法可参考 :ref:`api_guide_optimizer` 。
在网络的训练过程中,梯度计算分为两个步骤:前向计算与 `反向传播 <https://en.wikipedia.org/wiki/Backpropagation>`_ 。
- 前向计算会根据您搭建的网络结构,将输入单元的状态传递到输出单元。
- 反向传播借助 `链式法则 <https://en.wikipedia.org/wiki/Chain_rule>`_ ,计算两个或两个以上复合函数的导数,将输出单元的梯度反向传播回输入单元,根据计算出的梯度,调整网络的可学习参数。
详细实现过程可以参考阅读 `反向传导算法 <http://deeplearning.stanford.edu/wiki/index.php/%E5%8F%8D%E5%90%91%E4%BC%A0%E5%AF%BC%E7%AE%97%E6%B3%95>`_ 。
在Fluid中,我们并不推荐直接调用 :code:`fluid` 中反向传播相关API,因为这是一个极底层的API,请考虑使用 :ref:`api_guide_optimizer` 中的相关API替代。当您使用优化相关API时,Fluid会自动为您计算复杂的反向传播过程。
如想自己实现,您也可以使用 :ref:`cn_api_fluid_backward_append_backward` 中的 :code:`callback` 自
定义Operator的梯度计算形式。更多用法,请参考:
* :ref:`cn_api_fluid_backward_append_backward`
...@@ -7,14 +7,14 @@ ...@@ -7,14 +7,14 @@
:code:`Executor` 即 :code:`执行器` 。PaddlePaddle Fluid中有两种执行器可以选择。 :code:`Executor` 即 :code:`执行器` 。PaddlePaddle Fluid中有两种执行器可以选择。
:code:`Executor` 实现了一个简易的执行器,所有Operator会被顺序执行。用户可以使用 :code:`Executor` 实现了一个简易的执行器,所有Operator会被顺序执行。用户可以使用
Python脚本驱动 :code:`Executor` 执行。默认情况下 :code:`Executor` 是单线程的,如果 Python脚本驱动 :code:`Executor` 执行。默认情况下 :code:`Executor` 是单线程的,如果
想使用数据并行,请参考另一个执行器, :ref:`cn_api_guide_parallel_executor` 。 想使用数据并行,请参考另一个执行器, :ref:`api_guide_parallel_executor` 。
:code:`Executor` 的代码逻辑非常简单。建议用户在调试过程中,先使用 :code:`Executor` 的代码逻辑非常简单。建议用户在调试过程中,先使用
:code:`Executor` 跑通模型,再切换到多设备计算,甚至多机计算。 :code:`Executor` 跑通模型,再切换到多设备计算,甚至多机计算。
:code:`Executor` 在构造的时候接受一个 :code:`Place`, 它们可以是 :ref:`cn_api_fluid_CPUPlace` :code:`Executor` 在构造的时候接受一个 :code:`Place`, 它们可以是 :ref:`cn_api_fluid_CPUPlace`
或 :ref:`cn_api_fluid_CUDAPlace` 。 :code:`Executor` 在执行的时候可以选择执行的 或 :ref:`cn_api_fluid_CUDAPlace` 。 :code:`Executor` 在执行的时候可以选择执行的
:ref:`cn_api_guide_low_level_program` 。 :ref:`api_guide_low_level_program` 。
简单的使用方法,请参考 `quick_start_fit_a_line <http://paddlepaddle.org/documentation/docs/zh/1.1/beginners_guide/quick_start/fit_a_line/README.cn.html>`_ , API Reference 请参考 简单的使用方法,请参考 `quick_start_fit_a_line <http://paddlepaddle.org/documentation/docs/zh/1.1/beginners_guide/quick_start/fit_a_line/README.cn.html>`_ , API Reference 请参考
:ref:`cn_api_fluid_Executor` 。 :ref:`cn_api_fluid_Executor` 。
...@@ -57,4 +57,4 @@ API Reference 请参考 :ref:`cn_api_fluid_layers_sigmoid_cross_entropy_with_log ...@@ -57,4 +57,4 @@ API Reference 请参考 :ref:`cn_api_fluid_layers_sigmoid_cross_entropy_with_log
对于一些较为复杂的损失函数,可以尝试使用其他损失函数组合实现;Paddle Fluid 中提供的用于图像分割任务的 :ref:`cn_api_fluid_layers_dice_loss` 即是使用其他 OP 组合(计算各像素位置似然概率的均值)而成;多目标损失函数也可看作这样的情况,如 Faster RCNN 就使用 cross entropy 和 smooth_l1 loss 的加权和作为损失函数。 对于一些较为复杂的损失函数,可以尝试使用其他损失函数组合实现;Paddle Fluid 中提供的用于图像分割任务的 :ref:`cn_api_fluid_layers_dice_loss` 即是使用其他 OP 组合(计算各像素位置似然概率的均值)而成;多目标损失函数也可看作这样的情况,如 Faster RCNN 就使用 cross entropy 和 smooth_l1 loss 的加权和作为损失函数。
**注意**,在定义损失函数之后为能够使用 :ref:`cn_api_guide_optimizer` 进行优化,通常需要使用 :ref:`cn_api_fluid_layers_mean` 或其他操作将损失函数返回的高维 Tensor 转换为 Scalar 值。 **注意**,在定义损失函数之后为能够使用 :ref:`api_guide_optimizer` 进行优化,通常需要使用 :ref:`cn_api_fluid_layers_mean` 或其他操作将损失函数返回的高维 Tensor 转换为 Scalar 值。
\ No newline at end of file \ No newline at end of file
...@@ -147,12 +147,6 @@ equal ...@@ -147,12 +147,6 @@ equal
API Reference 请参考 :ref:`cn_api_fluid_layers_equal` API Reference 请参考 :ref:`cn_api_fluid_layers_equal`
not_equal
------------------
对两个 :code:`Tensor` 逐元素判断是否不等, 对应数学操作符 :code:`!=`
API Reference 请参考 :ref:`cn_api_fluid_layers_elementwise_not_equal`
less_than less_than
------------------ ------------------
...@@ -161,26 +155,7 @@ less_than ...@@ -161,26 +155,7 @@ less_than
API Reference 请参考 :ref:`cn_api_fluid_layers_less_than` API Reference 请参考 :ref:`cn_api_fluid_layers_less_than`
less_equal
------------------
对两个 :code:`Tensor` 逐元素判断是否满足小于或等于关系, 对应数学操作符 :code:`<=`
API Reference 请参考 :ref:`cn_api_fluid_layers_less_equal`
greater_than
------------------
对两个 :code:`Tensor` 逐元素判断是否满足大于关系, 对应数学操作符 :code:`>`
API Reference 请参考 :ref:`cn_api_fluid_layers_greater_than`
greater_equal
------------------
对两个 :code:`Tensor` 逐元素判断是否满足大于或等于关系, 对应数学操作符 :code:`>=`
API Reference 请参考 :ref:`cn_api_fluid_layers_greater_equal`
sum sum
------------------ ------------------
...@@ -189,19 +164,19 @@ sum ...@@ -189,19 +164,19 @@ sum
API Reference 请参考 :ref:`cn_api_fluid_layers_sum` API Reference 请参考 :ref:`cn_api_fluid_layers_sum`
min elementwise_min
------------------ ------------------
对两个 :code:`Tensor` 逐元素进行 :code:`min(x, y)` 操作。 对两个 :code:`Tensor` 逐元素进行 :code:`min(x, y)` 操作。
API Reference 请参考 :ref:`cn_api_fluid_layers_min` API Reference 请参考 :ref:`cn_api_fluid_layers_elementwise_min`
max elementwise_max
------------------ ------------------
对两个 :code:`Tensor` 逐元素进行 :code:`max(x, y)` 操作。 对两个 :code:`Tensor` 逐元素进行 :code:`max(x, y)` 操作。
API Reference 请参考 :ref:`cn_api_fluid_layers_max` API Reference 请参考 :ref:`cn_api_fluid_layers_elementwise_max`
matmul matmul
------------------ ------------------
......
...@@ -39,7 +39,7 @@ API详细使用方法参考 :ref:`cn_api_fluid_layers_embedding` ,以下是一 ...@@ -39,7 +39,7 @@ API详细使用方法参考 :ref:`cn_api_fluid_layers_embedding` ,以下是一
- :code:`is_sparse` : 反向计算的时候梯度是否为sparse tensor。如果不设置,梯度是一个 `LodTensor <https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/fluid/user_guides/howto/prepare_data/lod_tensor.md>`_ 。默认为False。 - :code:`is_sparse` : 反向计算的时候梯度是否为sparse tensor。如果不设置,梯度是一个 `LodTensor <https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/fluid/user_guides/howto/prepare_data/lod_tensor.md>`_ 。默认为False。
- :code:`is_distributed` : 标志是否是用在分布式的场景下。一般大规模稀疏更新(embedding的第0维维度很大,比如几百万以上)才需要设置。具体可以参考大规模稀疏的API guide :ref:`cn_api_guide_async_training` 。默认为False。 - :code:`is_distributed` : 标志是否是用在分布式的场景下。一般大规模稀疏更新(embedding的第0维维度很大,比如几百万以上)才需要设置。具体可以参考大规模稀疏的API guide :ref:`api_guide_async_training` 。默认为False。
- API汇总: - API汇总:
- :ref:`cn_api_fluid_layers_embedding` - :ref:`cn_api_fluid_layers_embedding`
...@@ -10,12 +10,12 @@ ...@@ -10,12 +10,12 @@
变量、持久性变量和参数 变量、持久性变量和参数
==================== ====================
在 :code:`Paddle` 中,算子(:code:`Operator`)的每一个输入和输出都是一个变量(:code:`Variable`),而参数(:code:`Parameter`)是变量(:code:`Variable`)的子类。持久性变量(:code:`Persistables`)是一种在每次迭代结束后均不会被删除的变量。参数是一种持久性变量,其在每次迭代后都会被优化器(:ref:`cn_api_guide_optimizer`)更新。训练神经网络本质上就是在更新参数。 在 :code:`Paddle` 中,算子(:code:`Operator`)的每一个输入和输出都是一个变量(:code:`Variable`),而参数(:code:`Parameter`)是变量(:code:`Variable`)的子类。持久性变量(:code:`Persistables`)是一种在每次迭代结束后均不会被删除的变量。参数是一种持久性变量,其在每次迭代后都会被优化器(:ref:`api_guide_optimizer`)更新。训练神经网络本质上就是在更新参数。
模型保存API介绍 模型保存API介绍
==================== ====================
- :code:`fluid.io.save_vars`:通过执行器(:ref:`cn_api_guide_executor`)保存变量到指定的目录中。保存变量的方式有两种: - :code:`fluid.io.save_vars`:通过执行器(:ref:`api_guide_executor`)保存变量到指定的目录中。保存变量的方式有两种:
1)通过接口中的 :code:`vars` 指定需要保存的变量列表。 1)通过接口中的 :code:`vars` 指定需要保存的变量列表。
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
API Reference 请参考 :ref:`cn_api_fluid_io_save_persistables`。 API Reference 请参考 :ref:`cn_api_fluid_io_save_persistables`。
- :code:`fluid.io.save_inference_model`:请参考 :ref:`cn_api_guide_inference`。 - :code:`fluid.io.save_inference_model`:请参考 :ref:`api_guide_inference`。
模型加载API介绍 模型加载API介绍
==================== ====================
...@@ -56,4 +56,4 @@ ...@@ -56,4 +56,4 @@
API Reference 请参考 :ref:`cn_api_fluid_io_load_persistables`。 API Reference 请参考 :ref:`cn_api_fluid_io_load_persistables`。
- :code:`fluid.io.load_inference_model`:请参考 :ref:`cn_api_guide_inference`。 - :code:`fluid.io.load_inference_model`:请参考 :ref:`api_guide_inference`。
...@@ -27,10 +27,10 @@ Windows系统下可使用`cpu-z`这类软件来检测您的处理器是否支持 ...@@ -27,10 +27,10 @@ Windows系统下可使用`cpu-z`这类软件来检测您的处理器是否支持
* 首先,**检查您的计算机和操作系统**是否满足以下要求: * 首先,**检查您的计算机和操作系统**是否满足以下要求:
For python2: 使用Python官方下载的python2.7.15 For python2: 使用Python官方下载的python2.7.15
For python3: 使用Python官方下载的python3.5.x For python3: 使用Python官方下载的python3.5.x, python3.6.x 或 python3.7.x
* Python2.7.xpip >= 9.0.1 * Python2.7.xpip >= 9.0.1
* Python3.5.xpip3 >= 9.0.1 * Python3.5.x, python3.6.x 或 python3.7.x :pip3 >= 9.0.1
下面将说明如何安装PaddlePaddle: 下面将说明如何安装PaddlePaddle:
......
...@@ -62,10 +62,10 @@ a = fluid.layers.data(name="a",shape=[3,4],dtype='int64') ...@@ -62,10 +62,10 @@ a = fluid.layers.data(name="a",shape=[3,4],dtype='int64')
#若图片的宽度和高度在运行时可变,将宽度和高度定义为None。 #若图片的宽度和高度在运行时可变,将宽度和高度定义为None。
#shape的三个维度含义分别是:channel、图片的宽度、图片的高度 #shape的三个维度含义分别是:channel、图片的宽度、图片的高度
b = fluid.layers.data(name="image",shape=[3,None,None],dtpye="float32") b = fluid.layers.data(name="image",shape=[3,None,None],dtype="float32")
``` ```
其中,dtpye=“int64”表示有符号64位整数数据类型,更多Fluid目前支持的数据类型请查看:[Fluid目前支持的数据类型](../../user_guides/howto/prepare_data/feeding_data.html#fluid) 其中,dtype=“int64”表示有符号64位整数数据类型,更多Fluid目前支持的数据类型请查看:[Fluid目前支持的数据类型](../../user_guides/howto/prepare_data/feeding_data.html#fluid)
**3. 常量 Tensor** **3. 常量 Tensor**
......
Subproject commit ef2934505b87eeb516eed7d083900ec88a62fb20 Subproject commit 64c82c575ff842eaf02c62e61ec6cce78ecc0f42
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册