diff --git a/paddle/fluid/operators/reduce_ops/reduce_op.h b/paddle/fluid/operators/reduce_ops/reduce_op.h index 838ac895e5d570999742e39bd23a74a2bf6616c1..01fb46fe9d7cbeeb7e50653148a1336bfb0d2ab2 100644 --- a/paddle/fluid/operators/reduce_ops/reduce_op.h +++ b/paddle/fluid/operators/reduce_ops/reduce_op.h @@ -197,6 +197,9 @@ class ReduceOp : public framework::OperatorWithKernel { remove(dims_vector.begin(), dims_vector.end(), kDelFlag), dims_vector.end()); } + if (!keep_dim && dims_vector.size() == 0) { + dims_vector.push_back(1); + } auto out_dims = framework::make_ddim(dims_vector); ctx->SetOutputDim("Out", out_dims); if (dims[0] != 0) { diff --git a/python/paddle/fluid/tests/unittests/test_reduce_op.py b/python/paddle/fluid/tests/unittests/test_reduce_op.py index 65fc1453d8db13ad9c85746c3bf148f898e8f788..a690644d052864e25df29ab1271e36d94e2ab68c 100644 --- a/python/paddle/fluid/tests/unittests/test_reduce_op.py +++ b/python/paddle/fluid/tests/unittests/test_reduce_op.py @@ -397,5 +397,19 @@ class TestReduceAll(OpTest): self.check_grad(['X'], 'Out') +class Test1DReduceWithAxes1(OpTest): + def setUp(self): + self.op_type = "reduce_sum" + self.inputs = {'X': np.random.random(1).astype("float64")} + self.attrs = {'dim': [0], 'keep_dim': False} + self.outputs = {'Out': self.inputs['X'].sum(axis=0)} + + def test_check_output(self): + self.check_output() + + def test_check_grad(self): + self.check_grad(['X'], 'Out') + + if __name__ == '__main__': unittest.main()