Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
GoAI
Paddle
提交
dc9f31b3
P
Paddle
项目概览
GoAI
/
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
dc9f31b3
编写于
7月 31, 2017
作者:
H
hedaoyuan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add SliceProjection and slice_projection.
上级
b9767aea
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
71 addition
and
1 deletion
+71
-1
proto/ModelConfig.proto
proto/ModelConfig.proto
+2
-1
python/paddle/trainer/config_parser.py
python/paddle/trainer/config_parser.py
+29
-0
python/paddle/trainer_config_helpers/layers.py
python/paddle/trainer_config_helpers/layers.py
+40
-0
未找到文件。
proto/ModelConfig.proto
浏览文件 @
dc9f31b3
...
...
@@ -225,7 +225,8 @@ message ProjectionConfig {
optional
PoolConfig
pool_conf
=
12
;
// For slice
repeated
SliceConfig
slice
=
13
;
// Each slice output is the input[start, end)
repeated
SliceConfig
slices
=
13
;
}
message
OperatorConfig
{
...
...
python/paddle/trainer/config_parser.py
浏览文件 @
dc9f31b3
...
...
@@ -565,6 +565,35 @@ class IdentityOffsetProjection(Projection):
return
[]
@
config_class
class
SliceProjection
(
Projection
):
type
=
'slice'
def
__init__
(
self
,
input_layer_name
,
slices
,
**
xargs
):
super
(
SliceProjection
,
self
).
__init__
(
input_layer_name
,
**
xargs
)
input
=
g_layer_map
[
input_layer_name
]
if
input
.
type
in
[
"exconv"
,
"cudnn_conv"
]:
# the slice operator is for the channel dimension
assert
input
.
num_filters
is
not
None
channels
=
input
.
num_filters
image_size
=
input
.
size
/
channels
assert
slices
[
len
(
slices
)
-
1
][
1
]
<=
channels
for
i
in
xrange
(
len
(
slices
)):
slice
=
self
.
proj_conf
.
slices
.
add
()
slice
.
start
=
slices
[
i
][
0
]
*
image_size
slice
.
end
=
slices
[
i
][
1
]
*
image_size
self
.
size
+=
slice
.
end
-
slice
.
start
else
:
config_assert
(
False
,
'Currently the input should be convolution layer'
)
def
calc_parameter_size
(
self
,
input_size
,
output_size
):
return
0
def
calc_parameter_dims
(
self
,
input_size
,
output_size
):
return
[]
# DotMulProjection performs element-wise multiplication with weight
@
config_class
class
DotMulProjection
(
Projection
):
...
...
python/paddle/trainer_config_helpers/layers.py
浏览文件 @
dc9f31b3
...
...
@@ -128,6 +128,7 @@ __all__ = [
'prelu_layer'
,
'gated_unit_layer'
,
'crop_layer'
,
'slice_projection'
,
]
...
...
@@ -536,6 +537,45 @@ def identity_projection(input, offset=None, size=None):
return
proj
def
slice_projection
(
input
,
slices
):
"""
slice_projection can get multiple outputs, and each output is a slice
of the input.
.. math::
output[i] = input.slice(slices[i])
The example usage is:
.. code-block:: python
proj = slice_projection(input=layer, slices=[(0, 10), (20, 30)])
Note that slice_projection should not have any parameter.
:param input: Input Layer.
:type input: LayerOutput
:param slices: An array of slice parameters.
Each slice contains the start and end offsets based
on the input.
:type offset: pair of int
:return: A SliceProjection object
:rtype: SliceProjection
"""
assert
len
(
slices
)
>=
1
start
=
0
for
i
in
xrange
(
len
(
slices
)):
assert
len
(
slices
[
i
])
==
2
# The start position of the next slice needs to be greater than
# or equal to the end position of the previous slice.
assert
slices
[
i
][
0
]
>=
start
assert
slices
[
i
][
1
]
>=
slices
[
i
][
0
]
start
=
slices
[
i
][
1
]
proj
=
SliceProjection
(
input_layer_name
=
input
.
name
,
slices
=
slices
)
proj
.
origin
=
input
return
proj
@
wrap_param_attr_default
()
def
scaling_projection
(
input
,
param_attr
=
None
):
"""
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录