Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
cabb9501
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看板
未验证
提交
cabb9501
编写于
9月 17, 2019
作者:
Z
Zeng Jinle
提交者:
GitHub
9月 17, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix leaky_relu op when alpha is zero, test=develop (#19833)
上级
9cbc1eff
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
18 addition
and
8 deletion
+18
-8
paddle/fluid/operators/activation_op.h
paddle/fluid/operators/activation_op.h
+7
-7
paddle/fluid/operators/test_leaky_relu_grad_grad_functor.cc
paddle/fluid/operators/test_leaky_relu_grad_grad_functor.cc
+5
-0
paddle/fluid/operators/test_leaky_relu_grad_grad_functor.cu
paddle/fluid/operators/test_leaky_relu_grad_grad_functor.cu
+5
-0
paddle/fluid/operators/test_leaky_relu_grad_grad_functor.h
paddle/fluid/operators/test_leaky_relu_grad_grad_functor.h
+1
-1
未找到文件。
paddle/fluid/operators/activation_op.h
浏览文件 @
cabb9501
...
...
@@ -1073,8 +1073,8 @@ struct LeakyReluGradFunctor : public BaseActivationFunctor<T> {
typename
dX
>
void
operator
()(
Device
d
,
X
x
,
Out
out
,
dOut
dout
,
dX
dx
)
const
{
auto
temp1
=
static_cast
<
T
>
(
alpha
)
*
(
out
<
static_cast
<
T
>
(
0
)).
template
cast
<
T
>();
auto
temp2
=
(
out
>
=
static_cast
<
T
>
(
0
)).
template
cast
<
T
>();
static_cast
<
T
>
(
alpha
)
*
(
out
<
=
static_cast
<
T
>
(
0
)).
template
cast
<
T
>();
auto
temp2
=
(
out
>
static_cast
<
T
>
(
0
)).
template
cast
<
T
>();
dx
.
device
(
d
)
=
dout
*
(
temp1
+
temp2
).
template
cast
<
T
>();
}
...
...
@@ -1418,11 +1418,11 @@ struct LeakyReluGradGradFunctor : public BaseActivationFunctor<T> {
auto
ddx
=
framework
::
EigenVector
<
T
>::
Flatten
(
detail
::
Ref
(
ddX
));
auto
out
=
framework
::
EigenVector
<
T
>::
Flatten
(
detail
::
Ref
(
Out
));
auto
ddout
=
framework
::
EigenVector
<
T
>::
Flatten
(
detail
::
Ref
(
ddOut
));
ddout
.
device
(
*
d
)
=
ddx
*
((
out
>=
static_cast
<
T
>
(
0
)).
template
cast
<
T
>()
+
static_cast
<
T
>
(
alpha
)
*
(
out
<
static_cast
<
T
>
(
0
)).
template
cast
<
T
>())
.
template
cast
<
T
>();
ddout
.
device
(
*
d
)
=
ddx
*
((
out
>
static_cast
<
T
>
(
0
)).
template
cast
<
T
>()
+
static_cast
<
T
>
(
alpha
)
*
(
out
<=
static_cast
<
T
>
(
0
)).
template
cast
<
T
>())
.
template
cast
<
T
>();
}
}
static
constexpr
ActBwdOpFwdDeps
FwdDeps
()
{
return
kDepOut
;
}
...
...
paddle/fluid/operators/test_leaky_relu_grad_grad_functor.cc
浏览文件 @
cabb9501
...
...
@@ -22,5 +22,10 @@ TEST(leaky_relu_grad_grad, test_cpu) {
TestLeakyReluGradGradMain
<
float
>
({
32
,
64
},
platform
::
CPUPlace
(),
0.02
));
}
TEST
(
leaky_relu_grad_grad
,
test_cpu_zero_alpha
)
{
ASSERT_TRUE
(
TestLeakyReluGradGradMain
<
float
>
({
32
,
64
},
platform
::
CPUPlace
(),
0.0
));
}
}
// namespace operators
}
// namespace paddle
paddle/fluid/operators/test_leaky_relu_grad_grad_functor.cu
浏览文件 @
cabb9501
...
...
@@ -22,5 +22,10 @@ TEST(leaky_relu_grad_grad, test_gpu) {
TestLeakyReluGradGradMain
<
float
>
({
32
,
64
},
platform
::
CUDAPlace
(
0
),
0.15
));
}
TEST
(
leaky_relu_grad_grad
,
test_gpu_zero_alpha
)
{
ASSERT_TRUE
(
TestLeakyReluGradGradMain
<
float
>
({
32
,
64
},
platform
::
CUDAPlace
(
0
),
0.0
));
}
}
// namespace operators
}
// namespace paddle
paddle/fluid/operators/test_leaky_relu_grad_grad_functor.h
浏览文件 @
cabb9501
...
...
@@ -46,7 +46,7 @@ struct LeakyReluGradGradEachElementFunctor {
:
ddx_
(
ddx
),
out_
(
out
),
alpha_
(
alpha
),
ddout_
(
ddout
)
{}
HOSTDEVICE
void
operator
()(
int
idx
)
{
if
(
out_
[
idx
]
>
=
0
)
{
if
(
out_
[
idx
]
>
0
)
{
ddout_
[
idx
]
=
ddx_
[
idx
];
}
else
{
ddout_
[
idx
]
=
ddx_
[
idx
]
*
alpha_
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录