Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
Paddle
提交
4fcf01a8
P
Paddle
项目概览
BaiXuePrincess
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
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看板
提交
4fcf01a8
编写于
11月 21, 2016
作者:
Y
Yu Yang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Refine code, found a bad design
上级
a146fcf8
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
62 addition
and
7 deletion
+62
-7
doc_cn/algorithm/rnn/hrnn_rnn_api_compare.rst
doc_cn/algorithm/rnn/hrnn_rnn_api_compare.rst
+13
-7
doc_cn/algorithm/rnn/simple_full_hierarchical_recurrent.dot
doc_cn/algorithm/rnn/simple_full_hierarchical_recurrent.dot
+30
-0
doc_cn/algorithm/rnn/simple_full_recurrent.dot
doc_cn/algorithm/rnn/simple_full_recurrent.dot
+19
-0
未找到文件。
doc_cn/algorithm/rnn/hrnn_rnn_api_compare.rst
浏览文件 @
4fcf01a8
...
...
@@ -107,23 +107,29 @@
在该配置中,名称为\ :code:`rnn_state`\ 的全连接层暂存到了\ :ref:`glossary_Memory`\ 中。这个\ :ref:`glossary_Memory`\ 变量\ :code:`mem`\ 中可以保存到上一个\ :ref:`glossary_timestep`\ 中的全连接层的输出。从而实现一个全连接的\ :ref:`glossary_RNN`\ 。
以数据\ :code:`[4, 5, 2, 0, 9, 8, 1, 4]`\ 举例,单层\ :ref:`glossary_RNN`\ 的网络图如下\:
.. graphviz:: simple_full_recurrent.dot
而对于\ :ref:`glossary_双层RNN`\ 来说,等价的网络配置如下\:
.. literalinclude:: ../../../paddle/gserver/tests/sequence_nest_rnn.conf
:language: python
:lines: 39-66
:linenos:
:emphasize-lines: 4-6
- 双层序列,外层memory是一个元素:
- 内层inner_step的recurrent_group和单层序列的几乎一样。除了boot_layer=outer_mem,表示将外层的outer_mem作为内层memory的初始状态。外层outer_step中,outer_mem是一个子句的最后一个向量,即整个双层group是将前一个子句的最后一个向量,作为下一个子句memory的初始状态。
- 从输入数据上看,单双层序列的句子是一样的,只是双层序列将其又做了子序列划分。因此双层序列的配置中,必须将前一个子句的最后一个元素,作为boot_layer传给下一个子句的memory,才能保证和单层序列的配置中“每一个时间步都用了上一个时间步的输出结果”一致。
- 在该配置中,外层的\ :code:`outer_mem`\ 和内层的\ :code:`inner_mem`\ 两个变量配合,实现了和单层\ :ref:`glossary_RNN`\ 等价的全连接\ :ref:`glossary_RNN`\ 。
- 外层\ :code:`outer_step`\ 中的\ :code:`outer_mem`\ 会将神经网络中每个子序列的最后一个结果记录下来。即将第18行的\ :code:`last`\ 变量记录下来。
- 内层\ :code:`inner_step`\ 中的\ :code:`inner_mem`\ 会将神经网络中子序列中的每一个元素的结果记录下来。即将第7行的\ :code:`out`\ 变量记录下来。
- 内层的\ :code:`inner_mem`\ 初始值是\ :code:`outer_mem`(:code:`boot_layer`)。于是前一个子序列的最后结果,是新的子序列的初试结果。即完成了简单的全连接\ :code:`glossary_RNN`\ 。
本例中的\ :ref:`glossary_双层RNN`\ ,以数据\ :code:`[ [4, 5, 2], [0, 9], [8, 1, 4]]`\ 举例,配置图如下\:
- 双层序列,外层memory是单层序列:
.. graphviz:: simple_full_hierarchical_recurrent.dot
- 由于外层每个时间步返回的是一个子句,这些子句的长度往往不等长。因此当外层有is_seq=True的memory时,内层是**无法直接使用**它的,即内层memory的boot_layer不能链接外层的这个memory。
- 如果内层memory想**间接使用**这个外层memory,只能通过`pooling_layer`、`last_seq`或`first_seq`这三个layer将它先变成一个元素。但这种情况下,外层memory必须有boot_layer,否则在第0个时间步时,由于外层memory没有任何seq信息,因此上述三个layer的前向会报出“**Check failed: input.sequenceStartPositions**”的错误。
这里有一点注意事项,Paddle目前实现的\ :ref:`glossary_双层RNN`\ 不完全支持内层\ :ref:`glossary_RNN`\ 的\ :ref:`glossary_Memory`\ 引用外层\ :ref:`glossary_RNN`\ 的某一层序列输入。即\ :code:`inner_mem`的\ :code:`boot_layer`\ 需要是非序列类型的,或者可以是序列类型,但是每个时间步下,序列长度是一致的。从序列类型转换为非序列类型,可以使用\ :code:`pooling_layer`, :code:`last_seq`, :code:`first_seq`\ 等操作进行转换。
示例3:双进双出,输入不等长
===========================
...
...
doc_cn/algorithm/rnn/simple_full_hierarchical_recurrent.dot
0 → 100644
浏览文件 @
4fcf01a8
digraph
G
{
rankdir
=
LR
;
subgraph
cluster_t0
{
a
[
label
=
"4"
]
b
[
label
=
"5"
]
c
[
label
=
"2"
]
}
subgraph
cluster_t1
{
d
[
label
=
"0"
]
e
[
label
=
"9"
]
}
subgraph
cluster_t2
{
f
[
label
=
"8"
]
g
[
label
=
"1"
]
h
[
label
=
"4"
]
}
a
->
b
;
b
->
c
;
c
->
d
[
constraint
=
false
]
;
d
->
e
;
e
->
f
[
constraint
=
false
]
;
f
->
g
;
g
->
h
;
}
\ No newline at end of file
doc_cn/algorithm/rnn/simple_full_recurrent.dot
0 → 100644
浏览文件 @
4fcf01a8
digraph
G
{
rankdir
=
LR
;
a
[
label
=
"4"
]
b
[
label
=
"5"
]
c
[
label
=
"2"
]
d
[
label
=
"0"
]
e
[
label
=
"9"
]
f
[
label
=
"8"
]
g
[
label
=
"1"
]
h
[
label
=
"4"
]
a
->
b
;
b
->
c
;
c
->
d
;
d
->
e
;
e
->
f
;
f
->
g
;
g
->
h
;
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录