parent
0b68077221
commit
bb7f34594c
@ -0,0 +1,46 @@
|
||||
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve.
|
||||
|
||||
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/operators/mean_op.h"
|
||||
|
||||
namespace paddle {
|
||||
namespace operators {
|
||||
|
||||
class MeanOp : public OperatorWithKernel {
|
||||
protected:
|
||||
void InferShape(const std::vector<const Tensor *> &inputs,
|
||||
const std::vector<Tensor *> &outputs) const override {
|
||||
PADDLE_ENFORCE(inputs.size() == 1, "Input size of AddOp must be one");
|
||||
PADDLE_ENFORCE(outputs.size() == 1, "Output size of AddOp must be one");
|
||||
PADDLE_ENFORCE(inputs[0] != nullptr && outputs[0] != nullptr,
|
||||
"Input/Output of MeanOp must be initialized.");
|
||||
outputs[0]->Resize(framework::make_ddim({1}));
|
||||
}
|
||||
};
|
||||
|
||||
class MeanOpMaker : public OpProtoAndCheckerMaker {
|
||||
public:
|
||||
MeanOpMaker(OpProto *proto, OpAttrChecker *op_checker)
|
||||
: OpProtoAndCheckerMaker(proto, op_checker) {
|
||||
AddInput("X", "The input of mean op");
|
||||
AddOutput("Out", "The output of mean op");
|
||||
AddComment("Mean Operator");
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace operators
|
||||
} // namespace paddle
|
||||
|
||||
REGISTER_OP(mean, ops::MeanOp, ops::MeanOpMaker);
|
||||
REGISTER_OP_CPU_KERNEL(mean, ops::MeanKernel<ops::CPUPlace, float>);
|
@ -0,0 +1,4 @@
|
||||
#include "paddle/framework/op_registry.h"
|
||||
#include "paddle/operators/mean_op.h"
|
||||
|
||||
REGISTER_OP_GPU_KERNEL(mean, ops::AddKernel<ops::GPUPlace, float>);
|
@ -0,0 +1,36 @@
|
||||
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve.
|
||||
|
||||
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. */
|
||||
|
||||
#pragma once
|
||||
#include "paddle/operators/type_alias.h"
|
||||
|
||||
namespace paddle {
|
||||
namespace operators {
|
||||
|
||||
template <typename Place, typename T>
|
||||
class MeanKernel : public OpKernel {
|
||||
public:
|
||||
void Compute(const KernelContext& context) const override {
|
||||
auto input = context.Input(0)->Get<Tensor>();
|
||||
auto output = context.Output(0)->GetMutable<Tensor>();
|
||||
|
||||
output->mutable_data<T>(context.GetPlace());
|
||||
EigenVector<T>::Flatten(*output).device(
|
||||
*(context.GetEigenDevice<Place>())) =
|
||||
EigenVector<T>::Flatten(input).mean();
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace operators
|
||||
} // namespace paddle
|
@ -0,0 +1,25 @@
|
||||
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve.
|
||||
|
||||
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 <gtest/gtest.h>
|
||||
|
||||
#include <paddle/framework/op_registry.h>
|
||||
|
||||
USE_OP(mean);
|
||||
|
||||
TEST(MeanOp, GetOpProto) {
|
||||
auto& protos = paddle::framework::OpRegistry::protos();
|
||||
auto it = protos.find("mean");
|
||||
ASSERT_NE(it, protos.end());
|
||||
}
|
Loading…
Reference in new issue