From ce045890eebc2f4c817e2b3ae2fa261b37a25fbf Mon Sep 17 00:00:00 2001 From: Zhang Zheng <32410583+ZzSean@users.noreply.github.com> Date: Tue, 17 Jan 2023 21:32:44 +0800 Subject: [PATCH] [Zero-Dim] Support input 0D Tensor for masked_select (#49803) * [Zero-Dim] Support input 0D Tensor for masked_select --- .../tests/unittests/test_zero_dim_tensor.py | 30 +++++++++++++++++++ .../unittests/xpu/test_zero_dim_tensor_xpu.py | 14 +++++++++ 2 files changed, 44 insertions(+) diff --git a/python/paddle/fluid/tests/unittests/test_zero_dim_tensor.py b/python/paddle/fluid/tests/unittests/test_zero_dim_tensor.py index 8c420bf65c..619579df1e 100755 --- a/python/paddle/fluid/tests/unittests/test_zero_dim_tensor.py +++ b/python/paddle/fluid/tests/unittests/test_zero_dim_tensor.py @@ -1298,6 +1298,20 @@ class TestSundryAPI(unittest.TestCase): self.assertEqual(x1.grad.numpy(), 0.5) self.assertEqual(x2.grad.numpy(), 0) + def test_maseked_select(self): + x = paddle.rand([]) + x.stop_gradient = False + mask = paddle.full([], True, dtype='bool') + y = paddle.masked_select(x, mask) + + y.retain_grads() + y.backward() + self.assertEqual(y.shape, [1]) + self.assertEqual(y.numpy(), x.numpy()) + self.assertEqual(y.grad.shape, [1]) + self.assertEqual(x.grad.shape, []) + self.assertEqual(x.grad.numpy(), 1) + class TestSundryAPIStatic(unittest.TestCase): def setUp(self): @@ -1968,6 +1982,22 @@ class TestSundryAPIStatic(unittest.TestCase): self.assertEqual(res[0].shape, ()) + @prog_scope() + def test_maseked_select(self): + x = paddle.rand([]) + x.stop_gradient = False + mask = paddle.full([], True, dtype='bool') + y = paddle.masked_select(x, mask) + paddle.static.append_backward(y.sum()) + + prog = paddle.static.default_main_program() + res = self.exe.run(prog, fetch_list=[x, y, y.grad_name, x.grad_name]) + self.assertEqual(res[1].shape, (1,)) + self.assertEqual(res[1], res[0]) + self.assertEqual(res[2].shape, (1,)) + self.assertEqual(res[3].shape, ()) + self.assertEqual(res[3], 1) + # Use to test API whose zero-dim input tensors don't have grad and not need to test backward in OpTest. class TestNoBackwardAPI(unittest.TestCase): diff --git a/python/paddle/fluid/tests/unittests/xpu/test_zero_dim_tensor_xpu.py b/python/paddle/fluid/tests/unittests/xpu/test_zero_dim_tensor_xpu.py index 2cedf9e60b..770227e2e8 100755 --- a/python/paddle/fluid/tests/unittests/xpu/test_zero_dim_tensor_xpu.py +++ b/python/paddle/fluid/tests/unittests/xpu/test_zero_dim_tensor_xpu.py @@ -787,6 +787,20 @@ class TestSundryAPI(unittest.TestCase): self.assertEqual(out.shape, []) self.assertFalse(out) + def test_maseked_select(self): + x = paddle.rand([]) + x.stop_gradient = False + mask = paddle.full([], True, dtype='bool') + y = paddle.masked_select(x, mask) + + y.retain_grads() + y.backward() + self.assertEqual(y.shape, [1]) + self.assertEqual(y.numpy(), x.numpy()) + self.assertEqual(y.grad.shape, [1]) + self.assertEqual(x.grad.shape, []) + self.assertEqual(x.grad.numpy(), 1) + # Use to test API whose zero-dim input tensors don't have grad and not need to test backward in OpTest. -- GitLab