From 94ef65f0bd07221f79f5a57c7dbdc389eb2e09f9 Mon Sep 17 00:00:00 2001 From: Asthestarsfalll <72954905+Asthestarsfalll@users.noreply.github.com> Date: Mon, 10 Oct 2022 16:03:09 +0800 Subject: [PATCH] add paddle elementwise mod op (#12370) Co-authored-by: cecilia peng --- src/core/tests/frontend/paddle/op_fuzzy.cpp | 6 ++++ .../gen_scripts/generate_elementwise_ops.py | 28 +++++++++++++++++++ .../paddle/src/op/elementwise_ops.cpp | 4 +++ src/frontends/paddle/src/op_table.cpp | 2 ++ 4 files changed, 40 insertions(+) diff --git a/src/core/tests/frontend/paddle/op_fuzzy.cpp b/src/core/tests/frontend/paddle/op_fuzzy.cpp index ebc9e8f4233..55437912594 100644 --- a/src/core/tests/frontend/paddle/op_fuzzy.cpp +++ b/src/core/tests/frontend/paddle/op_fuzzy.cpp @@ -103,6 +103,7 @@ static const std::vector models{ std::string("elementwise_div1"), std::string("elementwise_max1"), std::string("elementwise_min1"), + std::string("elementwise_mod1"), std::string("elementwise_mul1"), std::string("elementwise_pow1"), std::string("elementwise_sub1"), @@ -110,6 +111,7 @@ static const std::vector models{ std::string("elementwise_div2"), std::string("elementwise_max2"), std::string("elementwise_min2"), + std::string("elementwise_mod2"), std::string("elementwise_mul2"), std::string("elementwise_pow2"), std::string("elementwise_sub2"), @@ -117,6 +119,7 @@ static const std::vector models{ std::string("elementwise_div3"), std::string("elementwise_max3"), std::string("elementwise_min3"), + std::string("elementwise_mod3"), std::string("elementwise_mul3"), std::string("elementwise_pow3"), std::string("elementwise_sub3"), @@ -124,6 +127,7 @@ static const std::vector models{ std::string("elementwise_div4"), std::string("elementwise_max4"), std::string("elementwise_min4"), + std::string("elementwise_mod4"), std::string("elementwise_mul4"), std::string("elementwise_pow4"), std::string("elementwise_sub4"), @@ -155,6 +159,8 @@ static const std::vector models{ std::string("fill_constant_shape_tensor_list"), std::string("flatten_contiguous_range_test1"), std::string("floor_float32"), + std::string("floor_mod1"), + std::string("floor_mod2"), std::string("gather_multi_dimension"), std::string("gather_one_dimension"), std::string("gather_one_dimension2"), diff --git a/src/core/tests/frontend/paddle/test_models/gen_scripts/generate_elementwise_ops.py b/src/core/tests/frontend/paddle/test_models/gen_scripts/generate_elementwise_ops.py index bbe45e21e82..0900e29d243 100644 --- a/src/core/tests/frontend/paddle/test_models/gen_scripts/generate_elementwise_ops.py +++ b/src/core/tests/frontend/paddle/test_models/gen_scripts/generate_elementwise_ops.py @@ -75,6 +75,31 @@ def elementwise_div(name : str, x, y, axis, in_dtype): return outs[0] +def elementwise_mod(name : str, x, y, axis, in_dtype, is_api=False): + import paddle + paddle.enable_static() + + with paddle.static.program_guard(paddle.static.Program(), paddle.static.Program()): + node_x = paddle.static.data(name='x', shape=x.shape, dtype=in_dtype) + node_y = paddle.static.data(name='y', shape=y.shape, dtype=in_dtype) + if is_api: + out = paddle.floor_mod(node_x, node_y) + else: + out = paddle.fluid.layers.elementwise_mod(node_x, node_y, axis=axis) + + cpu = paddle.static.cpu_places(1) + exe = paddle.static.Executor(cpu[0]) + + # startup program will call initializer to initialize the parameters. + exe.run(paddle.static.default_startup_program()) + outs = exe.run( + feed={'x': x, 'y': y}, + fetch_list=[out]) + saveModel(name, exe, feedkeys=['x', 'y'], fetchlist=[out], inputs=[x, y], outputs=[outs[0]], target_dir=sys.argv[1]) + + return outs[0] + + def elementwise_mul(name : str, x, y, axis, in_dtype): import paddle paddle.enable_static() @@ -166,6 +191,7 @@ def elementwise_ops(name : str, data_x, data_y, axis, in_dtype): elementwise_add("elementwise_add" + name, data_x, data_y, axis, in_dtype) elementwise_sub("elementwise_sub" + name, data_x, data_y, axis, in_dtype) elementwise_div("elementwise_div" + name, data_x, data_y, axis, in_dtype) + elementwise_mod("elementwise_mod" + name, data_x, data_y, axis, in_dtype) elementwise_mul("elementwise_mul" + name, data_x, data_y, axis, in_dtype) elementwise_min("elementwise_min" + name, data_x, data_y, axis, in_dtype) elementwise_max("elementwise_max" + name, data_x, data_y, axis, in_dtype) @@ -179,11 +205,13 @@ def main(): data_y = np.array([1, 5, 2]).astype(in_dtype) axis = -1 elementwise_ops("1", data_x, data_y, axis, in_dtype) + elementwise_mod('floor_mod1', data_x, data_y, -1, in_dtype, True) # data_y's shape is the continuous subsequence of data_x's shape data_x = np.random.rand(2, 5, 3, 4).astype(np.float32) data_y = (0.1 + np.random.rand(3, 4).astype(np.float32)) / 1.1 elementwise_ops("2", data_x, data_y, axis, in_dtype) + elementwise_mod('floor_mod2', data_x, data_y, -1, in_dtype, True) data_y = (0.1 + np.random.rand(5).astype(np.float32)) / 1.1 axis = 1 diff --git a/src/frontends/paddle/src/op/elementwise_ops.cpp b/src/frontends/paddle/src/op/elementwise_ops.cpp index b833f1a19d4..7c45dbcb9e9 100644 --- a/src/frontends/paddle/src/op/elementwise_ops.cpp +++ b/src/frontends/paddle/src/op/elementwise_ops.cpp @@ -46,6 +46,10 @@ NamedOutputs elementwise_greater_equal(const NodeContext& node_context) { return elementwise_ops(node_context); } +NamedOutputs elementwise_mod(const NodeContext& node_context) { + return elementwise_ops(node_context); +} + } // namespace op } // namespace paddle } // namespace frontend diff --git a/src/frontends/paddle/src/op_table.cpp b/src/frontends/paddle/src/op_table.cpp index 0ac131b5ec2..f3a12c3bf37 100644 --- a/src/frontends/paddle/src/op_table.cpp +++ b/src/frontends/paddle/src/op_table.cpp @@ -29,6 +29,7 @@ OP_CONVERTER(elementwise_equal); OP_CONVERTER(elementwise_greater_equal); OP_CONVERTER(elementwise_max); OP_CONVERTER(elementwise_min); +OP_CONVERTER(elementwise_mod); OP_CONVERTER(elementwise_mul); OP_CONVERTER(elementwise_pow); OP_CONVERTER(elementwise_sub); @@ -127,6 +128,7 @@ std::map get_supported_ops() { {"elementwise_div", op::elementwise_div}, {"elementwise_max", op::elementwise_max}, {"elementwise_min", op::elementwise_min}, + {"elementwise_mod", op::elementwise_mod}, {"elementwise_mul", op::elementwise_mul}, {"elementwise_pow", op::elementwise_pow}, {"elementwise_sub", op::elementwise_sub},