Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
urhero
Paddle
提交
611dacf2
P
Paddle
项目概览
urhero
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
611dacf2
编写于
9月 26, 2017
作者:
P
peterzhang2029
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refine gradient clipping in faq
上级
0464c940
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
8 addition
and
35 deletion
+8
-35
doc/faq/index_cn.rst
doc/faq/index_cn.rst
+8
-35
未找到文件。
doc/faq/index_cn.rst
浏览文件 @
611dacf2
...
...
@@ -318,7 +318,7 @@ Paddle二进制在运行时捕获了浮点数异常,只要出现浮点数异
这里有两种有效的解决方法:
1.
对梯度值进行硬截断:设置截断阈值 a,当梯度落在 [-a, a] 区间内,取值不变,否则按照区间端点值进行截断。 可以通过在 :code:`optimizer` 中设置 :code:`gradient_clipping_threshold` 参数来实现,下面的代码片段将梯度截断的阈值设置为 10.0
:
1.
设置 :code:`gradient_clipping_threshold` 参数,示例代码如下
:
.. code-block:: python
...
...
@@ -329,7 +329,7 @@ optimizer = paddle.optimizer.RMSProp(
具体可以参考 `nmt_without_attention <https://github.com/PaddlePaddle/models/blob/develop/nmt_without_attention/train.py#L35>`_ 示例。
2.
对反向传播中每一层要传输的梯度大小进行硬截断。 可以在 :code:`paddle.attr.ExtraAttr` 中对参数 :code:`error_clipping_threshold` 进行设置来实现,下面的代码片段将传输梯度截断的阈值设置为 100.0
:
2.
设置 :code:`error_clipping_threshold` 参数,示例代码如下
:
.. code-block:: python
...
...
@@ -343,6 +343,11 @@ decoder_inputs = paddle.layer.fc(
完整代码可以参考示例 `machine translation <https://github.com/PaddlePaddle/book/blob/develop/08.machine_translation/train.py#L66>`_ 。
两种方法的区别:
1. 两者都是对梯度的截断,但截断时机不同,前者在 :code:`optimzier` 更新网络参数时应用;后者在激活函数反向计算时被调用;
2. 截断对象不同:前者截断可学习参数的梯度,后者截断回传给前层的梯度;
除此之外,还可以通过减小学习律或者对数据进行归一化处理来解决这类问题。
15. 编译安装后执行 import paddle.v2 as paddle 报ImportError: No module named v2
...
...
@@ -558,39 +563,7 @@ PaddlePaddle目前支持8种learning_rate_schedule,这8种learning_rate_schedu
出现该错误的原因一般是用户对不同layer的参数 :code:`name` 设置了相同的取值。遇到该错误时,先找出参数 :code:`name` 取值相同的layer,然后将这些layer的参数 :code:`name` 设置为不同的值。
24. PaddlePaddle V2 API中,调用infer接口时输出多个层的计算结果
------------------------------------------------------------
用户在使用多个中间网络层进行预测时,应先将需要输出的层作为接口 :code:`paddle.inference.Inference()` 中参数 :code:`output_layer` 的输入, 然后调用infer接口来获取多个层对应的计算结果。 示例代码如下:
.. code-block:: python
inferer = paddle.inference.Inference(output_layer=[layer1, layer2],
parameters=parameters)
probs = inferer.infer(input=test_batch, field=["value"])
需要注意的是:
* 如果指定了2个layer作为输出层,实际上需要的输出结果是两个矩阵;
* 假设第一个layer的输出A是一个 N1 * M1 的矩阵,第二个 Layer 的输出B是一个 N2 * M2 的矩阵;
* paddle.v2 默认会将A和B 横向拼接,当N1 和 N2 大小不一样时,会报如下的错误:
.. code-block:: python
ValueError: all the input array dimensions except for the concatenation axis must match exactly
多个层的输出矩阵的高度不一致导致拼接失败,这种情况常常发生在:
* 同时输出序列层和非序列层;
* 多个输出层处理多个不同长度的序列;
此时可以在调用infer接口时通过设置 :code:`flatten_result=False` , 跳过“拼接”步骤,来解决上面的问题。这时,infer接口的返回值是一个python list:
* list 中元素的个数等于网络中输出层的个数;
* list 中每个元素是一个layer的输出结果矩阵,类型是numpy的ndarray;
* 每一个layer输出矩阵的高度,在非序列输入时:等于样本数;序列输入时等于:输入序列中元素的总数;宽度等于配置中layer的size;
25. PaddlePaddle 中不同的 recurrent layer 的区别
24. PaddlePaddle 中不同的 recurrent layer 的区别
--------------------------------------------------
以LSTM为例,在PaddlePaddle中包含以下 recurrent layer:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录