Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Paddle
提交
c4cdddb4
P
Paddle
项目概览
PaddlePaddle
/
Paddle
1 年多 前同步成功
通知
2302
Star
20931
Fork
5422
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1423
列表
看板
标记
里程碑
合并请求
543
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1,423
Issue
1,423
列表
看板
标记
里程碑
合并请求
543
合并请求
543
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
c4cdddb4
编写于
9月 26, 2017
作者:
P
peterzhang2029
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refine the diff of recurrent layers
上级
458b726a
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
9 addition
and
16 deletion
+9
-16
doc/faq/index_cn.rst
doc/faq/index_cn.rst
+9
-16
未找到文件。
doc/faq/index_cn.rst
浏览文件 @
c4cdddb4
...
...
@@ -559,28 +559,21 @@ PaddlePaddle目前支持8种learning_rate_schedule,这8种learning_rate_schedu
* :code:`paddle.networks.lstmemory_group`
* :code:`paddle.networks.bidirectional_lstm`
上述不同的recurrent layer
可以归纳为2类:
按照具体实现方式
可以归纳为2类:
* 由recurrent_group实现的
recurrent layer:
1. 由 recurrent_group 实现的
recurrent layer:
* 用户在使用这一类recurrent layer时,可以访问由recurrent unit在一个
time step里计算得到的中间值(例如:hidden states, input-to-hidden mapping
, memory cells等);
* 上述的 :code:`paddle.networks.lstmemory_group` 是这一类的
recurrent layer
;
* 用户在使用这一类recurrent layer时,可以访问由recurrent unit在一个
时间步内计算得到的中间值(例如:hidden states
, memory cells等);
* 上述的 :code:`paddle.networks.lstmemory_group` 是这一类的
recurrent layer
;
*
将recurrent layer作为一个整体来实现:
2.
将recurrent layer作为一个整体来实现:
* 用户在使用这一类recurrent layer,只能访问它们的输出值;
* 上述的 :code:`paddle.networks.lstmemory_group`
, :code:`paddle.networks.simple_lstm` 和 :code:`paddle.networks.bidirectional_lstm` 是这一类的recurrent layer
;
* 上述的 :code:`paddle.networks.lstmemory_group`
、 :code:`paddle.networks.simple_lstm` 和 :code:`paddle.networks.bidirectional_lstm` 属于这一类的实现
;
在第一类recurrent layer的实现中,recurrent_group中包含许多基础layer的计算(例如:add, element-wise multiplication和matrix multiplication等),计算较为繁琐,而第二类的实现将recurrent layer作为一个整体,针对CPU和GPU计算做了更多优化。 所以,在实际应用中,第二类recurrent layer计算效率更高。 如果用户不需要访问LSTM的中间变量(例如:hidden states, input-to-hidden mapping, memory cells等),而只需要recurrent layer计算的输出,我们建议使用第二类recurrent layer
。
将recurrent layer作为一个整体来实现, 能够针对CPU和GPU的计算做更多优化, 所以相比于recurrent group的实现方式, 第二类 recurrent layer 计算效率更高。 在实际应用中,如果用户不需要访问LSTM的中间变量,而只需要获得recurrent layer计算的输出,我们建议使用第二类实现
。
除此之
外,关于LSTM, PaddlePaddle中还包含 :code:`paddle.networks.lstmemory_unit` 这一计算单元:
此
外,关于LSTM, PaddlePaddle中还包含 :code:`paddle.networks.lstmemory_unit` 这一计算单元:
* 不同于上述介绍的recurrent layer , :code:`paddle.networks.lstmemory_unit` 定义了LSTM单元在一个
time step里
的计算过程,它并不是一个完整的recurrent layer,也不能接收序列数据作为输入;
* 不同于上述介绍的recurrent layer , :code:`paddle.networks.lstmemory_unit` 定义了LSTM单元在一个
时间步内
的计算过程,它并不是一个完整的recurrent layer,也不能接收序列数据作为输入;
* :code:`paddle.networks.lstmemory_unit` 只能在recurrent_group中作为step function使用;
在LSTM和GRU中,隐状态的计算需要将输入数据进行线性映射(input-to-hidden mapping)。 在PaddlePaddle中,并不是所有的recurrent layer都将 input-to-hidden mapping 操作放在recurrent layer外面来执行来提升LSTM和GRU单元的计算速度。以 :code:`paddle.layer.lstmemory` 和 :code:`paddle.networks.simple_lstm` 为例:
* :code:`paddle.layer.lstmemory` 内部不包含 input-to-hidden mapping 操作, 所以它并不是 `原有文献 <https://arxiv.org/abs/1308.0850>`_ 定义的LSTM完整形式;
* 而 :code:`paddle.networks.simple_lstm` 中包含input-to-hidden mapping 操作,并结合 :code:`paddle.layer.lstmemory` 定义了完整的LSTM形式;
需要注意的是, :code:`paddle.networks.simple_lstm` 和 :code:`paddle.layer.lstmemory` 中定义的LSTM形式都包含了peephole connections,这也使得它们比不包含peephole connections的LSTM实现拥有更多的参数。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录