Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Crayon鑫
Paddle
提交
1511a049
P
Paddle
项目概览
Crayon鑫
/
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看板
未验证
提交
1511a049
编写于
1月 15, 2018
作者:
Y
Yang yaming
提交者:
GitHub
1月 15, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #7540 from pkuyym/fix-7533
Add reorder flag for DynamicRNN's memory function.
上级
052c05be
c01bb26f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
26 addition
and
2 deletion
+26
-2
python/paddle/v2/fluid/layers/control_flow.py
python/paddle/v2/fluid/layers/control_flow.py
+26
-2
未找到文件。
python/paddle/v2/fluid/layers/control_flow.py
浏览文件 @
1511a049
...
@@ -1343,20 +1343,44 @@ class DynamicRNN(object):
...
@@ -1343,20 +1343,44 @@ class DynamicRNN(object):
else
:
else
:
return
self
.
outputs
return
self
.
outputs
def
memory
(
self
,
init
=
None
,
shape
=
None
,
value
=
0.0
,
dtype
=
'float32'
):
def
memory
(
self
,
init
=
None
,
shape
=
None
,
value
=
0.0
,
need_reorder
=
False
,
dtype
=
'float32'
):
self
.
_assert_in_rnn_block_
(
'memory'
)
self
.
_assert_in_rnn_block_
(
'memory'
)
if
init
is
not
None
:
if
init
is
not
None
:
if
not
isinstance
(
init
,
Variable
):
if
not
isinstance
(
init
,
Variable
):
raise
TypeError
(
raise
TypeError
(
"The input arg `init` of memory() must be a Variable"
)
"The input arg `init` of memory() must be a Variable"
)
parent_block
=
self
.
_parent_block_
()
parent_block
=
self
.
_parent_block_
()
init_tensor
=
init
if
need_reorder
==
True
:
if
self
.
lod_rank_table
is
None
:
raise
ValueError
(
'If set need_reorder to True, make sure step_input be '
'invoked before '
'memory(init=init, need_reordered=True, ...).'
)
init_reordered
=
parent_block
.
create_var
(
name
=
unique_name
(
'dynamic_rnn_mem_init_reordered'
),
type
=
core
.
VarDesc
.
VarType
.
LOD_TENSOR
,
dtype
=
init
.
dtype
)
parent_block
.
append_op
(
type
=
'reorder_lod_tensor_by_rank'
,
inputs
=
{
'X'
:
[
init_tensor
],
'RankTable'
:
[
self
.
lod_rank_table
]
},
outputs
=
{
'Out'
:
[
init_reordered
]})
init_tensor
=
init_reordered
mem_array
=
parent_block
.
create_var
(
mem_array
=
parent_block
.
create_var
(
name
=
unique_name
(
'dynamic_rnn_mem_array'
),
name
=
unique_name
(
'dynamic_rnn_mem_array'
),
type
=
core
.
VarDesc
.
VarType
.
LOD_TENSOR_ARRAY
,
type
=
core
.
VarDesc
.
VarType
.
LOD_TENSOR_ARRAY
,
dtype
=
init
.
dtype
)
dtype
=
init
.
dtype
)
parent_block
.
append_op
(
parent_block
.
append_op
(
type
=
'write_to_array'
,
type
=
'write_to_array'
,
inputs
=
{
'X'
:
init
,
inputs
=
{
'X'
:
init
_tensor
,
'I'
:
self
.
zero_idx
},
'I'
:
self
.
zero_idx
},
outputs
=
{
'Out'
:
mem_array
})
outputs
=
{
'Out'
:
mem_array
})
retv
=
array_read
(
array
=
mem_array
,
i
=
self
.
step_idx
)
retv
=
array_read
(
array
=
mem_array
,
i
=
self
.
step_idx
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录