Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
11a1284c
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看板
未验证
提交
11a1284c
编写于
7月 25, 2019
作者:
Q
qingqing01
提交者:
GitHub
7月 25, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Refine Infershape in activation_op for double_grad (#18731)
上级
45cb4795
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
33 addition
and
10 deletion
+33
-10
paddle/fluid/operators/activation_op.cc
paddle/fluid/operators/activation_op.cc
+33
-10
未找到文件。
paddle/fluid/operators/activation_op.cc
浏览文件 @
11a1284c
...
...
@@ -604,25 +604,48 @@ class ActivationOpDoubleGrad : public framework::OperatorWithKernel {
void
InferShape
(
framework
::
InferShapeContext
*
ctx
)
const
override
{
if
(
static_cast
<
int
>
(
kDepValue
)
&
static_cast
<
int
>
(
kDepX
))
{
// some op has no output DX, check HasOutputs("DX") here
if
(
HasOutputs
(
"DX"
)
&&
ctx
->
HasOutput
(
"DX"
))
{
if
(
ctx
->
HasOutput
(
"DX"
))
{
ctx
->
ShareDim
(
"X"
,
"DX"
);
ctx
->
ShareLoD
(
"X"
,
"DX"
);
}
// some op has no output DDout, check HasOutputs("DDout") here
if
(
HasOutputs
(
"DDOut"
)
&&
ctx
->
HasOutput
(
"DDOut"
))
{
if
(
ctx
->
HasOutput
(
"DDOut"
))
{
ctx
->
ShareDim
(
"X"
,
"DDOut"
);
ctx
->
ShareLoD
(
"X"
,
"DDOut"
);
}
}
if
(
static_cast
<
int
>
(
kDepValue
)
&
static_cast
<
int
>
(
kDepOut
))
{
// some op has no output DOut, check HasOutputs("DOut") here
if
(
HasOutputs
(
"DOut"
)
&&
ctx
->
HasOutput
(
"DOut"
))
{
if
(
ctx
->
HasOutput
(
"DOut"
))
{
ctx
->
ShareDim
(
"Out"
,
"DOut"
);
ctx
->
ShareLoD
(
"Out"
,
"DOut"
);
}
// some op has no output DDOut, check HasOutputs("DDOut") here
if
(
HasOutputs
(
"DDOut"
)
&&
ctx
->
HasOutput
(
"DDOut"
))
{
if
(
ctx
->
HasOutput
(
"DDOut"
))
{
ctx
->
ShareDim
(
"Out"
,
"DDOut"
);
ctx
->
ShareLoD
(
"Out"
,
"DDOut"
);
}
}
}
protected:
framework
::
OpKernelType
GetExpectedKernelType
(
const
framework
::
ExecutionContext
&
ctx
)
const
override
{
return
GetKernelType
(
ctx
,
*
this
,
"DDX"
);
}
};
template
<
ActBwdOpFwdDeps
kDepValue
>
class
ActivationOpDoubleGrad2
:
public
framework
::
OperatorWithKernel
{
public:
using
framework
::
OperatorWithKernel
::
OperatorWithKernel
;
void
InferShape
(
framework
::
InferShapeContext
*
ctx
)
const
override
{
if
(
static_cast
<
int
>
(
kDepValue
)
&
static_cast
<
int
>
(
kDepX
))
{
if
(
ctx
->
HasOutput
(
"DDOut"
))
{
ctx
->
ShareDim
(
"X"
,
"DDOut"
);
ctx
->
ShareLoD
(
"X"
,
"DDOut"
);
}
}
if
(
static_cast
<
int
>
(
kDepValue
)
&
static_cast
<
int
>
(
kDepOut
))
{
if
(
ctx
->
HasOutput
(
"DDOut"
))
{
ctx
->
ShareDim
(
"Out"
,
"DDOut"
);
ctx
->
ShareLoD
(
"Out"
,
"DDOut"
);
}
...
...
@@ -775,7 +798,7 @@ REGISTER_OPERATOR(relu_grad, ops::ActivationOpGrad,
ops
::
ReluDoubleGradMaker
);
REGISTER_OPERATOR
(
relu_grad_grad
,
ops
::
ActivationOpDoubleGrad
<
ops
::
ReluGradFunctor
<
float
>::
FwdDeps
()
>
);
ops
::
ActivationOpDoubleGrad
2
<
ops
::
ReluGradFunctor
<
float
>::
FwdDeps
()
>
);
REGISTER_ACTIVATION_CPU_KERNEL
(
relu
,
Relu
,
ReluFunctor
,
ReluGradFunctor
);
...
...
@@ -800,7 +823,7 @@ REGISTER_OPERATOR(leaky_relu_grad, ops::ActivationOpGrad,
ops
::
LeakyReluDoubleGradMaker
);
REGISTER_OPERATOR
(
leaky_relu_grad_grad
,
ops
::
ActivationOpDoubleGrad
<
ops
::
LeakyReluGradFunctor
<
float
>::
FwdDeps
()
>
);
ops
::
ActivationOpDoubleGrad
2
<
ops
::
LeakyReluGradFunctor
<
float
>::
FwdDeps
()
>
);
REGISTER_ACTIVATION_CPU_KERNEL
(
leaky_relu
,
LeakyRelu
,
LeakyReluFunctor
,
LeakyReluGradFunctor
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录