Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Paddle
提交
4d7eb090
P
Paddle
项目概览
PaddlePaddle
/
Paddle
大约 1 年 前同步成功
通知
2299
Star
20931
Fork
5422
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1423
列表
看板
标记
里程碑
合并请求
543
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1,423
Issue
1,423
列表
看板
标记
里程碑
合并请求
543
合并请求
543
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录