Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
c4cdddb4
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
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
...
@@ -559,28 +559,21 @@ PaddlePaddle目前支持8种learning_rate_schedule,这8种learning_rate_schedu
* :code:`paddle.networks.lstmemory_group`
* :code:`paddle.networks.lstmemory_group`
* :code:`paddle.networks.bidirectional_lstm`
* :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等);
* 用户在使用这一类recurrent layer时,可以访问由recurrent unit在一个
时间步内计算得到的中间值(例如:hidden states
, memory cells等);
* 上述的 :code:`paddle.networks.lstmemory_group` 是这一类的
recurrent layer
;
* 上述的 :code:`paddle.networks.lstmemory_group` 是这一类的
recurrent layer
;
*
将recurrent layer作为一个整体来实现:
2.
将recurrent layer作为一个整体来实现:
* 用户在使用这一类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使用;
* :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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录