ReduceSum#

ReduceSum - 13#

Version

  • name: ReduceSum (GitHub)

  • domain: main

  • since_version: 13

  • function: False

  • support_level: SupportType.COMMON

  • shape inference: True

This version of the operator has been available since version 13.

Summary

Computes the sum of the input tensor’s element along the provided axes. The resulted tensor has the same rank as the input if keepdims equal 1. If keepdims equal 0, then the resulted tensor have the reduced dimension pruned.

The above behavior is similar to numpy, with the exception that numpy default keepdims to False instead of True.

Attributes

  • keepdims: Keep the reduced dimension or not, default 1 mean keep reduced dimension. Default value is 1.

  • noop_with_empty_axes: Defines behaviour if ‘axes’ is empty. Default behaviour with ‘false’ is to reduce all axes. When axes is empty and this attribute is set to true, input tensor will not be reduced,and the output tensor would be equivalent to input tensor. Default value is 0.

Inputs

Between 1 and 2 inputs.

  • data (heterogeneous) - T: An input tensor.

  • axes (optional, heterogeneous) - tensor(int64): Optional input list of integers, along which to reduce. The default is to reduce over all the dimensions of the input tensor if ‘noop_with_empty_axes’ is false, else act as an Identity op when ‘noop_with_empty_axes’ is true. Accepted range is [-r, r-1] where r = rank(data).

Outputs

  • reduced (heterogeneous) - T: Reduced output tensor.

Type Constraints

  • T in ( tensor(bfloat16), tensor(double), tensor(float), tensor(float16), tensor(int32), tensor(int64), tensor(uint32), tensor(uint64) ): Constrain input and output types to high-precision numeric tensors.

Examples

do_not_keepdims

shape = [3, 2, 2]
axes = np.array([1], dtype=np.int64)
keepdims = 0

node = onnx.helper.make_node(
    'ReduceSum',
    inputs=['data', 'axes'],
    outputs=['reduced'],
    keepdims=keepdims)

data = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]], dtype=np.float32)
reduced = np.sum(data, axis=tuple(axes.tolist()), keepdims=keepdims == 1)
#print(reduced)
#[[4., 6.]
# [12., 14.]
# [20., 22.]]

expect(node, inputs=[data, axes], outputs=[reduced], name='test_reduce_sum_do_not_keepdims_example')

np.random.seed(0)
data = np.random.uniform(-10, 10, shape).astype(np.float32)
reduced = np.sum(data, axis=tuple(axes.tolist()), keepdims=keepdims == 1)

expect(node, inputs=[data, axes], outputs=[reduced], name='test_reduce_sum_do_not_keepdims_random')

keepdims

shape = [3, 2, 2]
axes = np.array([1], dtype=np.int64)
keepdims = 1

node = onnx.helper.make_node(
    'ReduceSum',
    inputs=['data', 'axes'],
    outputs=['reduced'],
    keepdims=keepdims)

data = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]], dtype=np.float32)
reduced = np.sum(data, axis=tuple(axes.tolist()), keepdims=keepdims == 1)
#print(reduced)
#[[[4., 6.]]
# [[12., 14.]]
# [[20., 22.]]]

expect(node, inputs=[data, axes], outputs=[reduced], name='test_reduce_sum_keepdims_example')

np.random.seed(0)
data = np.random.uniform(-10, 10, shape).astype(np.float32)
reduced = np.sum(data, axis=tuple(axes.tolist()), keepdims=keepdims == 1)

expect(node, inputs=[data, axes], outputs=[reduced], name='test_reduce_sum_keepdims_random')

default_axes_keepdims

shape = [3, 2, 2]
axes = np.array([], dtype=np.int64)
keepdims = 1

node = onnx.helper.make_node(
    'ReduceSum',
    inputs=['data', 'axes'],
    outputs=['reduced'],
    keepdims=keepdims)

data = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]], dtype=np.float32)
reduced = np.sum(data, axis=None, keepdims=keepdims == 1)
#print(reduced)
#[[[78.]]]

expect(node, inputs=[data, axes], outputs=[reduced], name='test_reduce_sum_default_axes_keepdims_example')

np.random.seed(0)
data = np.random.uniform(-10, 10, shape).astype(np.float32)
reduced = np.sum(data, axis=None, keepdims=keepdims == 1)

expect(node, inputs=[data, axes], outputs=[reduced], name='test_reduce_sum_default_axes_keepdims_random')

negative_axes_keepdims

shape = [3, 2, 2]
axes = np.array([-2], dtype=np.int64)
keepdims = 1

node = onnx.helper.make_node(
    'ReduceSum',
    inputs=['data', 'axes'],
    outputs=['reduced'],
    keepdims=keepdims)

data = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]], dtype=np.float32)
reduced = np.sum(data, axis=tuple(axes.tolist()), keepdims=keepdims == 1)
# print(reduced)
#[[[4., 6.]]
# [[12., 14.]]
# [[20., 22.]]]

expect(node, inputs=[data, axes], outputs=[reduced],
       name='test_reduce_sum_negative_axes_keepdims_example')

np.random.seed(0)
data = np.random.uniform(-10, 10, shape).astype(np.float32)
reduced = np.sum(data, axis=tuple(
    axes.tolist()), keepdims=keepdims == 1)

expect(node, inputs=[data, axes], outputs=[reduced],
       name='test_reduce_sum_negative_axes_keepdims_random')

empty_axes_input_noop

shape = [3, 2, 2]
keepdims = 1

node = onnx.helper.make_node(
    'ReduceSum',
    inputs=['data', 'axes'],
    outputs=['reduced'],
    keepdims=keepdims,
    noop_with_empty_axes=True)

data = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]], dtype=np.float32)
axes = np.array([], dtype=np.int64)
reduced = np.array(data)
#print(reduced)
#[[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]]

expect(node, inputs=[data, axes], outputs=[reduced],
       name='test_reduce_sum_empty_axes_input_noop_example')

np.random.seed(0)
data = np.random.uniform(-10, 10, shape).astype(np.float32)
reduced = np.array(data)

expect(node, inputs=[data, axes], outputs=[reduced], name='test_reduce_sum_negative_axes_keepdims_random')

Differences

00Computes the sum of the input tensor's element along the provided axes. The resultedComputes the sum of the input tensor's element along the provided axes. The resulted
11tensor has the same rank as the input if keepdims equal 1. If keepdims equal 0, thentensor has the same rank as the input if keepdims equal 1. If keepdims equal 0, then
22the resulted tensor have the reduced dimension pruned.the resulted tensor have the reduced dimension pruned.
33
44The above behavior is similar to numpy, with the exception that numpy default keepdims toThe above behavior is similar to numpy, with the exception that numpy default keepdims to
55False instead of True.False instead of True.
66
77**Attributes****Attributes**
88
9* **keepdims**:
910* **axes**: Keep the reduced dimension or not, default 1 mean keep reduced
1011 A list of integers, along which to reduce. The default is to reduce dimension. Default value is 1.
1112 over all the dimensions of the input tensor. Accepted range is [-r,* **noop_with_empty_axes**:
1213 r-1] where r = rank(data). Defines behaviour if 'axes' is empty. Default behaviour with 'false'
1314* **keepdims**: is to reduce all axes. When axes is empty and this attribute is set
14 Keep the reduced dimension or not, default 1 mean keep reduced
1515 dimension. Default value is 1. to true, input tensor will not be reduced,and the output tensor
16 would be equivalent to input tensor. Default value is 0.
1617
1718**Inputs****Inputs**
1819
20Between 1 and 2 inputs.
21
1922* **data** (heterogeneous) - **T**:* **data** (heterogeneous) - **T**:
23 An input tensor.
2024 An input tensor.* **axes** (optional, heterogeneous) - **tensor(int64)**:
25 Optional input list of integers, along which to reduce. The default
26 is to reduce over all the dimensions of the input tensor if
27 'noop_with_empty_axes' is false, else act as an Identity op when
28 'noop_with_empty_axes' is true. Accepted range is [-r, r-1] where r
29 = rank(data).
2130
2231**Outputs****Outputs**
2332
2433* **reduced** (heterogeneous) - **T**:* **reduced** (heterogeneous) - **T**:
2534 Reduced output tensor. Reduced output tensor.
2635
2736**Type Constraints****Type Constraints**
2837
2938* **T** in (* **T** in (
39 tensor(bfloat16),
3040 tensor(double), tensor(double),
3141 tensor(float), tensor(float),
3242 tensor(float16), tensor(float16),
3343 tensor(int32), tensor(int32),
3444 tensor(int64), tensor(int64),
3545 tensor(uint32), tensor(uint32),
3646 tensor(uint64) tensor(uint64)
3747 ): ):
3848 Constrain input and output types to high-precision numeric tensors. Constrain input and output types to high-precision numeric tensors.

ReduceSum - 11#

Version

  • name: ReduceSum (GitHub)

  • domain: main

  • since_version: 11

  • function: False

  • support_level: SupportType.COMMON

  • shape inference: True

This version of the operator has been available since version 11.

Summary

Computes the sum of the input tensor’s element along the provided axes. The resulted tensor has the same rank as the input if keepdims equal 1. If keepdims equal 0, then the resulted tensor have the reduced dimension pruned.

The above behavior is similar to numpy, with the exception that numpy default keepdims to False instead of True.

Attributes

  • axes: A list of integers, along which to reduce. The default is to reduce over all the dimensions of the input tensor. Accepted range is [-r, r-1] where r = rank(data).

  • keepdims: Keep the reduced dimension or not, default 1 mean keep reduced dimension. Default value is 1.

Inputs

  • data (heterogeneous) - T: An input tensor.

Outputs

  • reduced (heterogeneous) - T: Reduced output tensor.

Type Constraints

  • T in ( tensor(double), tensor(float), tensor(float16), tensor(int32), tensor(int64), tensor(uint32), tensor(uint64) ): Constrain input and output types to high-precision numeric tensors.

Differences

00Computes the sum of the input tensor's element along the provided axes. The resultedComputes the sum of the input tensor's element along the provided axes. The resulted
11tensor has the same rank as the input if keepdims equal 1. If keepdims equal 0, thentensor has the same rank as the input if keepdims equal 1. If keepdims equal 0, then
22the resulted tensor have the reduced dimension pruned.the resulted tensor have the reduced dimension pruned.
33
44The above behavior is similar to numpy, with the exception that numpy default keepdims toThe above behavior is similar to numpy, with the exception that numpy default keepdims to
55False instead of True.False instead of True.
66
77**Attributes****Attributes**
88
99* **axes**:* **axes**:
1010 A list of integers, along which to reduce. The default is to reduce A list of integers, along which to reduce. The default is to reduce
1111 over all the dimensions of the input tensor. over all the dimensions of the input tensor. Accepted range is [-r,
12 r-1] where r = rank(data).
1213* **keepdims**:* **keepdims**:
1314 Keep the reduced dimension or not, default 1 mean keep reduced Keep the reduced dimension or not, default 1 mean keep reduced
1415 dimension. Default value is 1. dimension. Default value is 1.
1516
1617**Inputs****Inputs**
1718
1819* **data** (heterogeneous) - **T**:* **data** (heterogeneous) - **T**:
1920 An input tensor. An input tensor.
2021
2122**Outputs****Outputs**
2223
2324* **reduced** (heterogeneous) - **T**:* **reduced** (heterogeneous) - **T**:
2425 Reduced output tensor. Reduced output tensor.
2526
2627**Type Constraints****Type Constraints**
2728
2829* **T** in (* **T** in (
2930 tensor(double), tensor(double),
3031 tensor(float), tensor(float),
3132 tensor(float16), tensor(float16),
3233 tensor(int32), tensor(int32),
3334 tensor(int64), tensor(int64),
3435 tensor(uint32), tensor(uint32),
3536 tensor(uint64) tensor(uint64)
3637 ): ):
3738 Constrain input and output types to high-precision numeric tensors. Constrain input and output types to high-precision numeric tensors.

ReduceSum - 1#

Version

  • name: ReduceSum (GitHub)

  • domain: main

  • since_version: 1

  • function: False

  • support_level: SupportType.COMMON

  • shape inference: True

This version of the operator has been available since version 1.

Summary

Computes the sum of the input tensor’s element along the provided axes. The resulted tensor has the same rank as the input if keepdims equal 1. If keepdims equal 0, then the resulted tensor have the reduced dimension pruned.

The above behavior is similar to numpy, with the exception that numpy default keepdims to False instead of True.

Attributes

  • axes: A list of integers, along which to reduce. The default is to reduce over all the dimensions of the input tensor.

  • keepdims: Keep the reduced dimension or not, default 1 mean keep reduced dimension. Default value is 1.

Inputs

  • data (heterogeneous) - T: An input tensor.

Outputs

  • reduced (heterogeneous) - T: Reduced output tensor.

Type Constraints

  • T in ( tensor(double), tensor(float), tensor(float16), tensor(int32), tensor(int64), tensor(uint32), tensor(uint64) ): Constrain input and output types to high-precision numeric tensors.