Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Crayon鑫
Paddle
提交
4d7eb090
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看板
提交
4d7eb090
编写于
10月 24, 2017
作者:
T
tensor-tang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add python interface of mkldnn_batch_norm
上级
ad6b5319
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
22 addition
and
11 deletion
+22
-11
python/paddle/trainer/config_parser.py
python/paddle/trainer/config_parser.py
+10
-3
python/paddle/trainer_config_helpers/layers.py
python/paddle/trainer_config_helpers/layers.py
+12
-8
未找到文件。
python/paddle/trainer/config_parser.py
浏览文件 @
4d7eb090
...
@@ -2420,6 +2420,7 @@ class BatchNormLayer(LayerBase):
...
@@ -2420,6 +2420,7 @@ class BatchNormLayer(LayerBase):
# If not use is_static, even set learning_rate = 0, decay_rate = 0,
# If not use is_static, even set learning_rate = 0, decay_rate = 0,
# these paras will change if set average_window in configure.
# these paras will change if set average_window in configure.
use_gpu
=
bool
(
int
(
g_command_config_args
.
get
(
"use_gpu"
,
0
)))
use_gpu
=
bool
(
int
(
g_command_config_args
.
get
(
"use_gpu"
,
0
)))
use_mkldnn
=
bool
(
int
(
g_command_config_args
.
get
(
"use_mkldnn"
,
0
)))
is_shared
=
True
if
not
use_gpu
else
False
is_shared
=
True
if
not
use_gpu
else
False
for
i
in
xrange
(
2
):
for
i
in
xrange
(
2
):
inputs
.
append
(
inputs
.
append
(
...
@@ -2433,11 +2434,17 @@ class BatchNormLayer(LayerBase):
...
@@ -2433,11 +2434,17 @@ class BatchNormLayer(LayerBase):
parallel_nn
=
bool
(
int
(
g_command_config_args
.
get
(
"parallel_nn"
,
0
)))
parallel_nn
=
bool
(
int
(
g_command_config_args
.
get
(
"parallel_nn"
,
0
)))
cudnn_version
=
int
(
g_command_config_args
.
get
(
"cudnn_version"
,
0
))
cudnn_version
=
int
(
g_command_config_args
.
get
(
"cudnn_version"
,
0
))
# Automatically select cudnn_batch_norm for GPU and batch_norm for CPU.
# Automatically select cudnn_batch_norm for GPU, batch_norm for CPU
# Also based on cudnn version.
# and mkldnn_batch_norm for MKLDNN. Also based on cudnn version.
if
batch_norm_type
==
"mkldnn_batch_norm"
:
config_assert
(
use_mkldnn
,
"mkldnn_batch_norm only support MKLDNN"
)
use_cudnn
=
use_gpu
and
batch_norm_type
!=
"batch_norm"
and
\
use_cudnn
=
use_gpu
and
batch_norm_type
!=
"batch_norm"
and
\
not
use_mkldnn
and
batch_norm_type
!=
"mkldnn_batch_norm"
and
\
((
not
parallel_nn
)
or
self
.
config
.
device
>
-
1
)
((
not
parallel_nn
)
or
self
.
config
.
device
>
-
1
)
self
.
layer_type
=
"cudnn_batch_norm"
if
use_cudnn
else
"batch_norm"
if
use_cudnn
:
self
.
layer_type
=
"cudnn_batch_norm"
else
:
self
.
layer_type
=
"mkldnn_batch_norm"
if
use_mkldnn
else
"batch_norm"
super
(
BatchNormLayer
,
self
).
__init__
(
super
(
BatchNormLayer
,
self
).
__init__
(
name
,
self
.
layer_type
,
0
,
inputs
=
inputs
,
**
xargs
)
name
,
self
.
layer_type
,
0
,
inputs
=
inputs
,
**
xargs
)
...
...
python/paddle/trainer_config_helpers/layers.py
浏览文件 @
4d7eb090
...
@@ -3014,16 +3014,19 @@ def batch_norm_layer(input,
...
@@ -3014,16 +3014,19 @@ def batch_norm_layer(input,
:param input: batch normalization input. Better be linear activation.
:param input: batch normalization input. Better be linear activation.
Because there is an activation inside batch_normalization.
Because there is an activation inside batch_normalization.
:type input: LayerOutput
:type input: LayerOutput
:param batch_norm_type: We have batch_norm and cudnn_batch_norm. batch_norm
:param batch_norm_type: We have batch_norm, mkldnn_batch_norm and cudnn_batch_norm.
supports both CPU and GPU. cudnn_batch_norm requires
batch_norm supports CPU, MKLDNN and GPU. cudnn_batch_norm
cuDNN version greater or equal to v4 (>=v4). But
requires cuDNN version greater or equal to v4 (>=v4).
cudnn_batch_norm is faster and needs less memory
But cudnn_batch_norm is faster and needs less
than batch_norm. By default (None), we will
memory than batch_norm. mkldnn_batch_norm requires
automaticly select cudnn_batch_norm for GPU and
enable use_mkldnn. By default (None), we will
batch_norm for CPU. Otherwise, select batch norm
automaticly select cudnn_batch_norm for GPU,
type based on the specified type. If you use cudnn_batch_norm,
mkldnn_batch_norm for MKLDNN and batch_norm for CPU.
Otherwise, select batch norm type based on the
specified type. If you use cudnn_batch_norm,
we suggested you use latest version, such as v5.1.
we suggested you use latest version, such as v5.1.
:type batch_norm_type: None | string, None or "batch_norm" or "cudnn_batch_norm"
:type batch_norm_type: None | string, None or "batch_norm" or "cudnn_batch_norm"
or "mkldnn_batch_norm"
:param act: Activation Type. Better be relu. Because batch
:param act: Activation Type. Better be relu. Because batch
normalization will normalize input near zero.
normalization will normalize input near zero.
:type act: BaseActivation
:type act: BaseActivation
...
@@ -3063,6 +3066,7 @@ def batch_norm_layer(input,
...
@@ -3063,6 +3066,7 @@ def batch_norm_layer(input,
else
:
else
:
num_channels
=
input
.
size
num_channels
=
input
.
size
assert
(
batch_norm_type
is
None
)
or
(
batch_norm_type
==
"batch_norm"
)
or
\
assert
(
batch_norm_type
is
None
)
or
(
batch_norm_type
==
"batch_norm"
)
or
\
(
batch_norm_type
==
"mkldnn_batch_norm"
)
or
\
(
batch_norm_type
==
"cudnn_batch_norm"
)
(
batch_norm_type
==
"cudnn_batch_norm"
)
l
=
Layer
(
l
=
Layer
(
name
=
name
,
name
=
name
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录