Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
Paddle
提交
075b5502
P
Paddle
项目概览
BaiXuePrincess
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
075b5502
编写于
2月 22, 2019
作者:
T
Tao Luo
提交者:
GitHub
2月 22, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #15856 from kbinias/kbinias/activation-mkldnn-ut
MKL-DNN: Add UT to check whether primitives already exist in backward
上级
e67b402f
309ea6f2
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
60 addition
and
11 deletion
+60
-11
paddle/fluid/operators/mkldnn/activation_mkldnn_op.cc
paddle/fluid/operators/mkldnn/activation_mkldnn_op.cc
+0
-10
python/paddle/fluid/tests/unittests/mkldnn/test_activation_mkldnn_op.py
...fluid/tests/unittests/mkldnn/test_activation_mkldnn_op.py
+60
-1
未找到文件。
paddle/fluid/operators/mkldnn/activation_mkldnn_op.cc
浏览文件 @
075b5502
...
@@ -52,11 +52,6 @@ class MKLDNNActivationKernel
...
@@ -52,11 +52,6 @@ class MKLDNNActivationKernel
"Wrong layout/format set for Input x tensor"
);
"Wrong layout/format set for Input x tensor"
);
Functor
functor
;
Functor
functor
;
auto
attrs
=
functor
.
GetAttrs
();
for
(
auto
&
attr
:
attrs
)
{
*
attr
.
second
=
ctx
.
Attr
<
float
>
(
attr
.
first
);
}
functor
(
ctx
);
functor
(
ctx
);
}
}
};
};
...
@@ -76,11 +71,6 @@ class MKLDNNActivationGradKernel
...
@@ -76,11 +71,6 @@ class MKLDNNActivationGradKernel
"is_test attribute should be set to False in training phase."
);
"is_test attribute should be set to False in training phase."
);
Functor
functor
;
Functor
functor
;
auto
attrs
=
functor
.
GetAttrs
();
for
(
auto
&
attr
:
attrs
)
{
*
attr
.
second
=
ctx
.
Attr
<
float
>
(
attr
.
first
);
}
functor
(
ctx
);
functor
(
ctx
);
}
}
};
};
...
...
python/paddle/fluid/tests/unittests/mkldnn/test_activation_mkldnn_op.py
浏览文件 @
075b5502
...
@@ -18,8 +18,8 @@ import unittest
...
@@ -18,8 +18,8 @@ import unittest
import
numpy
as
np
import
numpy
as
np
import
paddle.fluid.core
as
core
import
paddle.fluid.core
as
core
from
paddle.fluid.tests.unittests.op_test
import
OpTest
from
paddle.fluid.tests.unittests.op_test
import
OpTest
from
scipy.special
import
expit
from
paddle.fluid.tests.unittests.test_activation_op
import
TestRelu
,
TestTanh
,
TestSqrt
,
TestAbs
from
paddle.fluid.tests.unittests.test_activation_op
import
TestRelu
,
TestTanh
,
TestSqrt
,
TestAbs
import
paddle.fluid
as
fluid
class
TestMKLDNNReluDim2
(
TestRelu
):
class
TestMKLDNNReluDim2
(
TestRelu
):
...
@@ -97,5 +97,64 @@ class TestMKLDNNAbsDim4(TestAbs):
...
@@ -97,5 +97,64 @@ class TestMKLDNNAbsDim4(TestAbs):
self
.
attrs
=
{
"use_mkldnn"
:
True
}
self
.
attrs
=
{
"use_mkldnn"
:
True
}
# Check if primitives already exist in backward
class
TestMKLDNNReluPrimitivesAlreadyExist
(
unittest
.
TestCase
):
def
__assert_close
(
self
,
tensor
,
np_array
,
msg
,
atol
=
1e-4
):
self
.
assertTrue
(
np
.
allclose
(
np
.
array
(
tensor
),
np_array
,
atol
=
atol
),
msg
)
def
test_check_forward_backward
(
self
):
place
=
core
.
CPUPlace
()
np
.
random
.
seed
(
123
)
x
=
np
.
random
.
uniform
(
-
1
,
1
,
[
2
,
2
]).
astype
(
np
.
float32
)
out
=
np
.
abs
(
x
)
out_grad
=
np
.
random
.
random_sample
(
x
.
shape
).
astype
(
np
.
float32
)
x_grad
=
out_grad
*
np
.
sign
(
x
)
# Abs grad calculation
var_dict
=
{
'x'
:
x
,
'out'
:
out
,
'out@GRAD'
:
out_grad
,
'x@GRAD'
:
x_grad
}
var_names
=
list
(
var_dict
.
keys
())
ground_truth
=
{
name
:
var_dict
[
name
]
for
name
in
var_names
}
program
=
fluid
.
Program
()
with
fluid
.
program_guard
(
program
):
block
=
program
.
global_block
()
for
name
in
ground_truth
:
block
.
create_var
(
name
=
name
,
dtype
=
'float32'
,
shape
=
ground_truth
[
name
].
shape
)
relu_op
=
block
.
append_op
(
type
=
"abs"
,
inputs
=
{
"X"
:
block
.
var
(
'x'
),
},
outputs
=
{
"Out"
:
block
.
var
(
'out'
)},
attrs
=
{
"use_mkldnn"
:
True
})
# Generate backward op_desc
grad_op_desc_list
,
op_grad_to_var
=
core
.
get_grad_op_desc
(
relu_op
.
desc
,
set
(),
[])
grad_op_desc
=
grad_op_desc_list
[
0
]
new_op_desc
=
block
.
desc
.
append_op
()
new_op_desc
.
copy_from
(
grad_op_desc
)
for
var_name
in
grad_op_desc
.
output_arg_names
():
block
.
desc
.
var
(
var_name
.
encode
(
"ascii"
))
grad_op_desc
.
infer_var_type
(
block
.
desc
)
grad_op_desc
.
infer_shape
(
block
.
desc
)
for
arg
in
grad_op_desc
.
output_arg_names
():
grad_var
=
block
.
desc
.
find_var
(
arg
.
encode
(
"ascii"
))
grad_var
.
set_dtype
(
core
.
VarDesc
.
VarType
.
FP32
)
exe
=
fluid
.
Executor
(
place
)
# Do at least 2 iterations
for
i
in
range
(
2
):
out
=
exe
.
run
(
program
,
feed
=
{
name
:
var_dict
[
name
]
for
name
in
[
'x'
,
'out@GRAD'
]},
fetch_list
=
[
'x@GRAD'
])
self
.
__assert_close
(
x_grad
,
out
[
0
],
"x@GRAD"
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
unittest
.
main
()
unittest
.
main
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录