Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
3b0e43aa
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看板
提交
3b0e43aa
编写于
8月 30, 2017
作者:
C
chengduoZH
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add config parse
上级
0c273ff4
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
112 addition
and
14 deletion
+112
-14
proto/ModelConfig.proto
proto/ModelConfig.proto
+2
-0
python/paddle/trainer/config_parser.py
python/paddle/trainer/config_parser.py
+81
-9
python/paddle/trainer_config_helpers/layers.py
python/paddle/trainer_config_helpers/layers.py
+11
-4
python/paddle/trainer_config_helpers/tests/configs/test_BatchNorm3D.py
.../trainer_config_helpers/tests/configs/test_BatchNorm3D.py
+17
-0
python/paddle/trainer_config_helpers/tests/layers_test.py
python/paddle/trainer_config_helpers/tests/layers_test.py
+1
-1
未找到文件。
proto/ModelConfig.proto
浏览文件 @
3b0e43aa
...
...
@@ -515,6 +515,8 @@ message LayerConfig {
// for HuberRegressionLoss
optional
double
delta
=
57
[
default
=
1.0
];
// for 3D data
optional
double
depth
=
58
[
default
=
1
];
}
message
EvaluatorConfig
{
...
...
python/paddle/trainer/config_parser.py
浏览文件 @
3b0e43aa
...
...
@@ -1172,6 +1172,20 @@ def get_img_size(input_layer_name, channels):
return
img_size
,
img_size_y
def
get_img3d_size
(
input_layer_name
,
channels
):
input
=
g_layer_map
[
input_layer_name
]
img_pixels
=
input
.
size
/
channels
img_size
=
input
.
width
img_size_y
=
input
.
height
img_size_z
=
input
.
depth
config_assert
(
img_size
*
img_size_y
*
img_size_z
==
img_pixels
,
"Input layer %s: Incorrect input image size %d * %d * %d for input image pixels %d"
%
(
input_layer_name
,
img_size
,
img_size_y
,
img_size_z
,
img_pixels
))
return
img_size
,
img_size_y
,
img_size_z
def
parse_bilinear
(
bilinear
,
input_layer_name
,
bilinear_conf
):
parse_image
(
bilinear
,
input_layer_name
,
bilinear_conf
.
image_conf
)
bilinear_conf
.
out_size_x
=
bilinear
.
out_size_x
...
...
@@ -1224,6 +1238,12 @@ def parse_image(image, input_layer_name, image_conf):
get_img_size
(
input_layer_name
,
image_conf
.
channels
)
def
parse_image3d
(
image
,
input_layer_name
,
image_conf
):
image_conf
.
channels
=
image
.
channels
image_conf
.
img_size
,
image_conf
.
img_size_y
,
image_conf
.
img_size_z
=
\
get_img3d_size
(
input_layer_name
,
image_conf
.
channels
)
def
parse_norm
(
norm
,
input_layer_name
,
norm_conf
):
norm_conf
.
norm_type
=
norm
.
norm_type
config_assert
(
...
...
@@ -1585,6 +1605,9 @@ class LayerBase(object):
self
.
config
.
height
=
height
self
.
config
.
width
=
width
def
set_layer_depth
(
self
,
depth
):
self
.
config
.
depth
=
depth
def
set_cnn_layer
(
self
,
input_layer_name
,
height
,
...
...
@@ -1788,11 +1811,19 @@ class DetectionOutputLayer(LayerBase):
@
config_layer
(
'data'
)
class
DataLayer
(
LayerBase
):
def
__init__
(
self
,
name
,
size
,
height
=
None
,
width
=
None
,
device
=
None
):
def
__init__
(
self
,
name
,
size
,
depth
=
None
,
height
=
None
,
width
=
None
,
device
=
None
):
super
(
DataLayer
,
self
).
__init__
(
name
,
'data'
,
size
,
inputs
=
[],
device
=
device
)
if
height
and
width
:
self
.
set_layer_height_width
(
height
,
width
)
if
depth
:
self
.
set_layer_depth
(
depth
)
'''
...
...
@@ -2077,6 +2108,7 @@ class BatchNormLayer(LayerBase):
name
,
inputs
,
bias
=
True
,
img3D
=
False
,
use_global_stats
=
True
,
moving_average_fraction
=
0.9
,
batch_norm_type
=
None
,
...
...
@@ -2121,15 +2153,33 @@ class BatchNormLayer(LayerBase):
input_layer
=
self
.
get_input_layer
(
0
)
image_conf
=
self
.
config
.
inputs
[
0
].
image_conf
parse_image
(
self
.
inputs
[
0
].
image
,
input_layer
.
name
,
image_conf
)
# Only pass the width and height of input to batch_norm layer
# when either of it is non-zero.
if
input_layer
.
width
!=
0
or
input_layer
.
height
!=
0
:
self
.
set_cnn_layer
(
name
,
image_conf
.
img_size_y
,
image_conf
.
img_size
,
image_conf
.
channels
,
False
)
if
img3D
:
parse_image3d
(
self
.
inputs
[
0
].
image
,
input_layer
.
name
,
image_conf
)
# Only pass the width and height of input to batch_norm layer
# when either of it is non-zero.
if
input_layer
.
width
!=
0
or
input_layer
.
height
!=
0
:
self
.
set_cnn_layer
(
input_layer_name
=
name
,
depth
=
image_conf
.
img_size_z
,
height
=
image_conf
.
img_size_y
,
width
=
image_conf
.
img_size
,
channels
=
image_conf
.
channels
,
is_print
=
True
)
else
:
self
.
set_layer_size
(
input_layer
.
size
)
else
:
self
.
set_layer_size
(
input_layer
.
size
)
parse_image
(
self
.
inputs
[
0
].
image
,
input_layer
.
name
,
image_conf
)
# Only pass the width and height of input to batch_norm layer
# when either of it is non-zero.
if
input_layer
.
width
!=
0
or
input_layer
.
height
!=
0
:
self
.
set_cnn_layer
(
input_layer_name
=
name
,
height
=
image_conf
.
img_size_y
,
width
=
image_conf
.
img_size
,
channels
=
image_conf
.
channels
,
is_print
=
True
)
else
:
self
.
set_layer_size
(
input_layer
.
size
)
psize
=
self
.
calc_parameter_size
(
image_conf
)
dims
=
[
1
,
psize
]
...
...
@@ -2139,6 +2189,28 @@ class BatchNormLayer(LayerBase):
self
.
create_bias_parameter
(
bias
,
psize
)
def
set_cnn_layer
(
self
,
input_layer_name
,
depth
=
None
,
height
=
None
,
width
=
None
,
channels
=
None
,
is_print
=
True
):
depthIsNone
=
False
if
depth
is
None
:
depth
=
1
depthIsNone
=
True
size
=
depth
*
height
*
width
*
channels
self
.
set_layer_size
(
size
)
self
.
set_layer_height_width
(
height
,
width
)
self
.
set_layer_depth
(
depth
)
if
is_print
and
depthIsNone
:
print
(
"output for %s: c = %d, h = %d, w = %d, size = %d"
%
(
input_layer_name
,
channels
,
height
,
width
,
size
))
elif
is_print
:
print
(
"output for %s: c = %d, d = %d, h = %d, w = %d, size = %d"
%
(
input_layer_name
,
channels
,
depth
,
height
,
width
,
size
))
def
calc_parameter_size
(
self
,
image_conf
):
return
image_conf
.
channels
...
...
python/paddle/trainer_config_helpers/layers.py
浏览文件 @
3b0e43aa
...
...
@@ -166,6 +166,7 @@ class LayerType(object):
EXCONVTRANS_LAYER
=
'exconvt'
CUDNNCONV_LAYER
=
'cudnn_conv'
POOL_LAYER
=
'pool'
POOL3D_LAYER
=
'pool3d'
BATCH_NORM_LAYER
=
'batch_norm'
NORM_LAYER
=
'norm'
SUM_TO_ONE_NORM_LAYER
=
'sum_to_one_norm'
...
...
@@ -894,7 +895,8 @@ def mixed_layer(size=0,
@
layer_support
()
def
data_layer
(
name
,
size
,
height
=
None
,
width
=
None
,
layer_attr
=
None
):
def
data_layer
(
name
,
size
,
depth
=
None
,
height
=
None
,
width
=
None
,
layer_attr
=
None
):
"""
Define DataLayer For NeuralNetwork.
...
...
@@ -921,15 +923,18 @@ def data_layer(name, size, height=None, width=None, layer_attr=None):
type
=
LayerType
.
DATA
,
name
=
name
,
size
=
size
,
depth
=
depth
,
height
=
height
,
width
=
width
,
**
ExtraLayerAttribute
.
to_kwargs
(
layer_attr
))
if
depth
is
None
:
depth
=
1
num_filters
=
None
if
height
is
not
None
and
width
is
not
None
:
num_filters
=
size
/
(
width
*
height
)
assert
num_filters
*
width
*
height
==
size
,
\
"size=%s width=%s height=%s
"
%
(
size
,
width
,
height
)
num_filters
=
size
/
(
width
*
height
*
depth
)
assert
num_filters
*
width
*
height
*
depth
==
size
,
\
"size=%s width=%s height=%s
depth=%s"
%
(
size
,
width
,
height
,
depth
)
return
LayerOutput
(
name
,
LayerType
.
DATA
,
size
=
size
,
num_filters
=
num_filters
)
...
...
@@ -2799,6 +2804,7 @@ def img_cmrnorm_layer(input,
def
batch_norm_layer
(
input
,
act
=
None
,
name
=
None
,
img3D
=
False
,
num_channels
=
None
,
bias_attr
=
None
,
param_attr
=
None
,
...
...
@@ -2885,6 +2891,7 @@ def batch_norm_layer(input,
(
batch_norm_type
==
"cudnn_batch_norm"
)
l
=
Layer
(
name
=
name
,
img3D
=
img3D
,
inputs
=
Input
(
input
.
name
,
image
=
Image
(
channels
=
num_channels
),
**
param_attr
.
attr
),
active_type
=
act
.
name
,
...
...
python/paddle/trainer_config_helpers/tests/configs/test_BatchNorm3D.py
0 → 100644
浏览文件 @
3b0e43aa
from
paddle.trainer_config_helpers
import
*
settings
(
batch_size
=
1000
,
learning_rate
=
1e-4
)
data
=
data_layer
(
name
=
'data'
,
size
=
180
,
width
=
30
,
height
=
6
)
#
batchNorm
=
batch_norm_layer
(
data
,
num_channels
=
1
)
#
outputs
(
batchNorm
)
# #
data3D
=
data_layer
(
name
=
'data3D22'
,
size
=
120
*
3
,
width
=
20
,
height
=
6
,
depth
=
3
)
#
print
(
data3D
)
batchNorm3D
=
batch_norm_layer
(
data3D
,
num_channels
=
1
,
img3D
=
True
)
#
outputs
(
batchNorm3D
)
python/paddle/trainer_config_helpers/tests/layers_test.py
浏览文件 @
3b0e43aa
...
...
@@ -16,4 +16,4 @@ from paddle.trainer.config_parser import parse_config_and_serialize
if
__name__
==
'__main__'
:
parse_config_and_serialize
(
'trainer_config_helpers/tests/
layers_test_config
.py'
,
''
)
'trainer_config_helpers/tests/
configs/test_BatchNorm3D
.py'
,
''
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录