未验证 提交 998235e6 编写于 作者: Y YepKong 提交者: GitHub

add autogen code support for squared_l2_norm_op (#52662)

* add autogen code support for squared_l2_norm_op

* Update ops.yaml
上级 41e37d4c
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */
#include "paddle/fluid/framework/infershape_utils.h"
#include "paddle/fluid/framework/op_registry.h"
#include "paddle/phi/core/infermeta_utils.h"
#include "paddle/phi/infermeta/unary.h"
namespace paddle {
namespace operators {
class SquaredL2NormOp : public framework::OperatorWithKernel {
public:
using framework::OperatorWithKernel::OperatorWithKernel;
};
template <typename T>
class SquaredL2NormGradOpMaker : public framework::SingleGradOpMaker<T> {
public:
using framework::SingleGradOpMaker<T>::SingleGradOpMaker;
protected:
void Apply(GradOpPtr<T> op) const override {
op->SetType("squared_l2_norm_grad");
op->SetInput(framework::GradVarName("Out"), this->OutputGrad("Out"));
op->SetInput("X", this->Input("X"));
op->SetOutput(framework::GradVarName("X"), this->InputGrad("X"));
op->SetAttrMap(this->Attrs());
}
};
class SquaredL2NormGradOp : public framework::OperatorWithKernel {
public:
using framework::OperatorWithKernel::OperatorWithKernel;
};
class SquaredL2NormOpMaker : public framework::OpProtoAndCheckerMaker {
public:
void Make() override {
AddInput("X", "(Tensor) The input of squared_l2_norm op.");
AddOutput("Out", "(Scalar) The output of squared_l2_norm op.");
AddComment(R"DOC(
SquaredL2Norm Operator.
Computes the squared L2 norm of a tensor.
$$Out = \sum_{i} X_{i}^2$$
)DOC");
}
};
} // namespace operators
} // namespace paddle
namespace ops = paddle::operators;
DECLARE_INFER_SHAPE_FUNCTOR(squared_l2_norm,
SquaredL2NormInferShapeFunctor,
PD_INFER_META(phi::SquaredL2NormInferMeta));
DECLARE_INFER_SHAPE_FUNCTOR(squared_l2_norm_grad,
SquaredL2NormGradInferShapeFunctor,
PD_INFER_META(phi::UnchangedInferMeta));
REGISTER_OPERATOR(squared_l2_norm,
ops::SquaredL2NormOp,
ops::SquaredL2NormOpMaker,
ops::SquaredL2NormGradOpMaker<paddle::framework::OpDesc>,
ops::SquaredL2NormGradOpMaker<paddle::imperative::OpBase>,
SquaredL2NormInferShapeFunctor);
REGISTER_OPERATOR(squared_l2_norm_grad,
ops::SquaredL2NormGradOp,
SquaredL2NormGradInferShapeFunctor);
...@@ -1718,6 +1718,16 @@ ...@@ -1718,6 +1718,16 @@
backward : square_double_grad backward : square_double_grad
inplace : (out_grad -> x_grad) inplace : (out_grad -> x_grad)
- backward_op : squared_l2_norm_grad
forward : squared_l2_norm(Tensor x) -> Tensor(out)
args : (Tensor x, Tensor out_grad)
output : Tensor(x_grad)
infer_meta :
func : UnchangedInferMeta
param: [x]
kernel :
func : squared_l2_norm_grad
- backward_op : squeeze_double_grad - backward_op : squeeze_double_grad
forward : squeeze_grad(Tensor xshape, Tensor grad_out, IntArray axis) -> Tensor(grad_x) forward : squeeze_grad(Tensor xshape, Tensor grad_out, IntArray axis) -> Tensor(grad_x)
args : (Tensor grad_x_grad, IntArray axis) args : (Tensor grad_x_grad, IntArray axis)
......
...@@ -962,16 +962,6 @@ ...@@ -962,16 +962,6 @@
invoke : concat( out_grad, axis) invoke : concat( out_grad, axis)
composite : split_grad(out_grad, axis, x_grad) composite : split_grad(out_grad, axis, x_grad)
- backward_op : squared_l2_norm_grad
forward : squared_l2_norm(Tensor x) -> Tensor(out)
args : (Tensor x, Tensor out_grad)
output : Tensor(x_grad)
infer_meta :
func : UnchangedInferMeta
param: [x]
kernel :
func : squared_l2_norm_grad
- backward_op : strided_slice_grad - backward_op : strided_slice_grad
forward : strided_slice (Tensor x, int[] axes, IntArray starts, IntArray ends, IntArray strides) -> Tensor(out) forward : strided_slice (Tensor x, int[] axes, IntArray starts, IntArray ends, IntArray strides) -> Tensor(out)
args : (Tensor x, Tensor out_grad, int[] axes, IntArray starts, IntArray ends, IntArray strides) args : (Tensor x, Tensor out_grad, int[] axes, IntArray starts, IntArray ends, IntArray strides)
......
...@@ -1208,15 +1208,6 @@ ...@@ -1208,15 +1208,6 @@
func : split_with_num func : split_with_num
backward : split_with_num_grad backward : split_with_num_grad
- op : squared_l2_norm
args : (Tensor x)
output : Tensor
infer_meta :
func : SquaredL2NormInferMeta
kernel :
func : squared_l2_norm
backward : squared_l2_norm_grad
- op : strided_slice - op : strided_slice
args : (Tensor x, int[] axes, IntArray starts, IntArray ends, IntArray strides) args : (Tensor x, int[] axes, IntArray starts, IntArray ends, IntArray strides)
output : Tensor output : Tensor
......
...@@ -2322,3 +2322,10 @@ ...@@ -2322,3 +2322,10 @@
{x: X, label: Label} {x: X, label: Label}
outputs : outputs :
out : Out out : Out
- op: squared_l2_norm
backward: squared_l2_norm_grad
inputs :
x : X
outputs :
out : Out
...@@ -1765,6 +1765,15 @@ ...@@ -1765,6 +1765,15 @@
square_sr {selected_rows -> selected_rows} square_sr {selected_rows -> selected_rows}
backward : square_grad backward : square_grad
- op : squared_l2_norm
args : (Tensor x)
output : Tensor(out)
infer_meta :
func : SquaredL2NormInferMeta
kernel :
func : squared_l2_norm
backward : squared_l2_norm_grad
- op : squeeze - op : squeeze
args : (Tensor x, IntArray axis={}) args : (Tensor x, IntArray axis={})
output : Tensor(out), Tensor(xshape) output : Tensor(out), Tensor(xshape)
......
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "paddle/phi/core/compat/op_utils.h"
namespace phi {
KernelSignature SquaredL2NormOpArgumentMapping(
const ArgumentMappingContext& ctx) {
return KernelSignature("squared_l2_norm", {"X"}, {}, {"Out"});
}
KernelSignature SquaredL2NormGradOpArgumentMapping(
const ArgumentMappingContext& ctx) {
return KernelSignature(
"squared_l2_norm_grad", {"X", "Out@GRAD"}, {}, {"X@GRAD"});
}
} // namespace phi
PD_REGISTER_ARG_MAPPING_FN(squared_l2_norm,
phi::SquaredL2NormOpArgumentMapping);
PD_REGISTER_ARG_MAPPING_FN(squared_l2_norm_grad,
phi::SquaredL2NormGradOpArgumentMapping);
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册