From f86f49e779404ed62e248db8dc20bfa0a1f60faa Mon Sep 17 00:00:00 2001 From: "Sevin F. Varoglu" Date: Tue, 21 May 2019 21:56:29 -0700 Subject: [PATCH] [NGraph] add increment op to ngraph engine (#16929) * add increment op to ngraph engine test=develop * fix style errors test=develop --- .../fluid/operators/ngraph/ops/increment_op.h | 49 +++++++++++++++++++ .../ngraph/test_increment_ngraph_op.py | 45 +++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 paddle/fluid/operators/ngraph/ops/increment_op.h create mode 100644 python/paddle/fluid/tests/unittests/ngraph/test_increment_ngraph_op.py diff --git a/paddle/fluid/operators/ngraph/ops/increment_op.h b/paddle/fluid/operators/ngraph/ops/increment_op.h new file mode 100644 index 000000000..4c4287e27 --- /dev/null +++ b/paddle/fluid/operators/ngraph/ops/increment_op.h @@ -0,0 +1,49 @@ +/*Copyright (c) 2019 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. */ + +#pragma once + +#include +#include +#include +#include + +#include "ngraph/ngraph.hpp" +#include "paddle/fluid/operators/ngraph/ops/elementwise_node.h" +#include "paddle/fluid/platform/ngraph_helper.h" + +namespace paddle { +namespace operators { +namespace ngraphs { + +void BuildIncrementNode( + const std::shared_ptr& op, + std::shared_ptr< + std::unordered_map>> + ngb_node_map) { + auto x = paddle::platform::GetInputNode(op, "X", ngb_node_map); + auto op_attrs = paddle::framework::AttrReader(op->Attrs()); + float step = op_attrs.Get("step"); + auto step_op = std::make_shared( + x->get_element_type(), x->get_shape(), std::vector{step}); + std::shared_ptr out = + std::make_shared(x, step_op); + paddle::platform::SetOutputNode(op, "Out", out, ngb_node_map); +} + +} // namespace ngraphs +} // namespace operators +} // namespace paddle + +REGISTER_NG_OP(increment, BuildIncrementNode); diff --git a/python/paddle/fluid/tests/unittests/ngraph/test_increment_ngraph_op.py b/python/paddle/fluid/tests/unittests/ngraph/test_increment_ngraph_op.py new file mode 100644 index 000000000..557cdc935 --- /dev/null +++ b/python/paddle/fluid/tests/unittests/ngraph/test_increment_ngraph_op.py @@ -0,0 +1,45 @@ +# Copyright (c) 2019 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. + +from __future__ import print_function + +import unittest +import numpy as np +from paddle.fluid.tests.unittests.op_test import OpTest + + +class TestNGRAPHIncrementOp(OpTest): + def setUp(self): + self.op_type = "increment" + self.dtype = np.float32 + self.init_dtype_type() + self.inputs = {'X': np.random.random(1).astype(self.dtype)} + self.attrs = {'step': 2.0} + self.outputs = { + 'Out': self.inputs['X'] + self.dtype(self.attrs['step']) + } + self._cpu_only = True + + def init_dtype_type(self): + pass + + def test_check_output(self): + self.check_output() + + def test_check_grad(self): + self.check_grad(['X'], 'Out') + + +if __name__ == "__main__": + unittest.main() -- GitLab