diff --git a/paddle/phi/api/lib/api_gen_utils.cc b/paddle/phi/api/lib/api_gen_utils.cc index 7cbb4344e81d7..50989933088a1 100644 --- a/paddle/phi/api/lib/api_gen_utils.cc +++ b/paddle/phi/api/lib/api_gen_utils.cc @@ -144,7 +144,7 @@ phi::TensorBase* SetSparseKernelOutput(Tensor* out, TensorType type) { std::make_shared(phi::DenseTensor(), phi::DenseTensor(), phi::DenseTensor(), - phi::DDim{-1}); + phi::DDim{-1, -1}); out->set_impl(sparse_tensor); return sparse_tensor.get(); } else { diff --git a/paddle/phi/core/sparse_csr_tensor.cc b/paddle/phi/core/sparse_csr_tensor.cc index ab9717a564eb5..447fab0e33c5b 100644 --- a/paddle/phi/core/sparse_csr_tensor.cc +++ b/paddle/phi/core/sparse_csr_tensor.cc @@ -27,9 +27,11 @@ SparseCsrTensor::SparseCsrTensor() { inline void check_shape(const DDim& dims) { bool valid = dims.size() == 2 || dims.size() == 3; - PADDLE_ENFORCE(valid, - phi::errors::InvalidArgument( - "the SparseCsrTensor only support 2-D Tensor.")); + PADDLE_ENFORCE( + valid, + phi::errors::InvalidArgument("the SparseCsrTensor only support 2-D or " + "3-D Tensor, but get %d-D Tensor", + dims.size())); } #define Check(non_zero_crows, non_zero_cols, non_zero_elements, dims) \ { \ diff --git a/paddle/phi/kernels/sparse/activation_grad_kernel.cc b/paddle/phi/kernels/sparse/activation_grad_kernel.cc index 628db10532da2..8962f8639244d 100644 --- a/paddle/phi/kernels/sparse/activation_grad_kernel.cc +++ b/paddle/phi/kernels/sparse/activation_grad_kernel.cc @@ -17,5 +17,21 @@ limitations under the License. */ #include "paddle/phi/kernels/activation_grad_kernel.h" #include "paddle/phi/kernels/sparse/utils.h" -DEFINE_AND_REGISTER_SPARSE_UNARY_GRAD_KERNEL(sparse_relu_grad, ReluGradKernel) -DEFINE_AND_REGISTER_SPARSE_UNARY_GRAD_KERNEL(sparse_sqrt_grad, SqrtGradKernel) +DEFINE_AND_REGISTER_SPARSE_UNARY_GRAD_KERNEL(relu_grad, ReluGradKernel) +DEFINE_AND_REGISTER_SPARSE_UNARY_GRAD_KERNEL(sqrt_grad, SqrtGradKernel) + +namespace phi { +namespace sparse { + +template +void SparseCooXXGrad(const Context& dev_ctx, + const SparseCooTensor& x, + SparseCooTensor* out) { +} +} // namespace sparse +} // namespace phi + +PD_REGISTER_KERNEL( + sparse_coo_xx_grad, CPU, ALL_LAYOUT, phi::sparse::SparseCooXXGrad, float, double) { + kernel->InputAt(0).SetDataLayout(phi::DataLayout::SPARSE_COO); +} diff --git a/paddle/phi/kernels/sparse/activation_kernel.cc b/paddle/phi/kernels/sparse/activation_kernel.cc index c541b14d5ddba..7c8ca2eb959fa 100644 --- a/paddle/phi/kernels/sparse/activation_kernel.cc +++ b/paddle/phi/kernels/sparse/activation_kernel.cc @@ -16,5 +16,21 @@ limitations under the License. */ #include "paddle/phi/kernels/sparse/utils.h" -DEFINE_AND_REGISTER_SPARSE_UNARY_KERNEL(sparse_relu, ReluKernel) -DEFINE_AND_REGISTER_SPARSE_UNARY_KERNEL(sparse_sqrt, SqrtKernel) +DEFINE_AND_REGISTER_SPARSE_UNARY_KERNEL(relu, ReluKernel) +DEFINE_AND_REGISTER_SPARSE_UNARY_KERNEL(sqrt, SqrtKernel) + +namespace phi { +namespace sparse { + +template +void SparseCooXX(const Context& dev_ctx, + const SparseCooTensor& x, + SparseCooTensor* out) { +} +} // namespace sparse +} // namespace phi + +PD_REGISTER_KERNEL( + sparse_coo_xx, CPU, ALL_LAYOUT, phi::sparse::SparseCooXX, float, double) { + kernel->InputAt(0).SetDataLayout(phi::DataLayout::SPARSE_COO); +} diff --git a/python/paddle/fluid/tests/unittests/test_sparse_activation_op.py b/python/paddle/fluid/tests/unittests/test_sparse_activation_op.py index fb82b76057d39..575475c4fd19e 100644 --- a/python/paddle/fluid/tests/unittests/test_sparse_activation_op.py +++ b/python/paddle/fluid/tests/unittests/test_sparse_activation_op.py @@ -44,18 +44,17 @@ def test_sparse_coo_sqrt(self): sparse_act_out = _C_ops.final_state_sparse_coo_sqrt(sparse_coo_x) correct_result = [2, np.sqrt(2), 4] actual_result = sparse_act_out.non_zero_elements().numpy() - assert np.array_equal(correct_result, actual_result) + assert np.allclose(correct_result, actual_result) def test_sparse_csr_sqrt(self): with _test_eager_guard(): x = [[0, 4, 0, 2], [0, 0, 0, 0], [0, 0, 16, 0]] dense_x = paddle.to_tensor(x, dtype='float32') - sparse_dim = 2 - sparse_coo_x = dense_x.to_sparse_csr(sparse_dim) + sparse_coo_x = dense_x.to_sparse_csr() sparse_act_out = _C_ops.final_state_sparse_csr_sqrt(sparse_coo_x) correct_result = [2, np.sqrt(2), 4] actual_result = sparse_act_out.non_zero_elements().numpy() - assert np.array_equal(correct_result, actual_result) + assert np.allclose(correct_result, actual_result) if __name__ == "__main__":