ReduceProd#

ReduceProd - 13#

Version

  • name: ReduceProd (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 product 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(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 = [1]
keepdims = 0

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

data = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]], dtype=np.float32)
reduced = np.prod(data, axis=tuple(axes), keepdims=keepdims == 1)
#print(reduced)
#[[3., 8.]
# [35., 48.]
# [99., 120.]]

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

np.random.seed(0)
data = np.random.uniform(-10, 10, shape).astype(np.float32)
reduced = np.prod(data, axis=tuple(axes), keepdims=keepdims == 1)
expect(node, inputs=[data], outputs=[reduced], name='test_reduce_prod_do_not_keepdims_random')

keepdims

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

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

data = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]], dtype=np.float32)
reduced = np.prod(data, axis=tuple(axes), keepdims=keepdims == 1)
#print(reduced)
#[[[3., 8.]]
# [[35., 48.]]
# [[99., 120.]]]

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

np.random.seed(0)
data = np.random.uniform(-10, 10, shape).astype(np.float32)
reduced = np.prod(data, axis=tuple(axes), keepdims=keepdims == 1)
expect(node, inputs=[data], outputs=[reduced], name='test_reduce_prod_keepdims_random')

default_axes_keepdims

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

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

data = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]], dtype=np.float32)
reduced = np.prod(data, axis=axes, keepdims=keepdims == 1)
#print(reduced)
#[[[4.790016e+08]]]

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

np.random.seed(0)
data = np.random.uniform(-10, 10, shape).astype(np.float32)
reduced = np.prod(data, axis=axes, keepdims=keepdims == 1)
expect(node, inputs=[data], outputs=[reduced], name='test_reduce_prod_default_axes_keepdims_random')

negative_axes_keepdims

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

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

data = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]], dtype=np.float32)
reduced = np.prod(data, axis=tuple(axes), keepdims=keepdims == 1)
# print(reduced)
#[[[3., 8.]]
# [[35., 48.]]
# [[99., 120.]]]

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

np.random.seed(0)
data = np.random.uniform(-10, 10, shape).astype(np.float32)
reduced = np.prod(data, axis=tuple(axes), keepdims=keepdims == 1)
expect(node, inputs=[data], outputs=[reduced], name='test_reduce_prod_negative_axes_keepdims_random')

Differences

00Computes the product of the input tensor's element along the provided axes. The resultedComputes the product 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. Accepted range is [-r, over all the dimensions of the input tensor. Accepted range is [-r,
1212 r-1] where r = rank(data). r-1] where r = rank(data).
1313* **keepdims**:* **keepdims**:
1414 Keep the reduced dimension or not, default 1 mean keep reduced Keep the reduced dimension or not, default 1 mean keep reduced
1515 dimension. Default value is 1. dimension. Default value is 1.
1616
1717**Inputs****Inputs**
1818
1919* **data** (heterogeneous) - **T**:* **data** (heterogeneous) - **T**:
2020 An input tensor. An input tensor.
2121
2222**Outputs****Outputs**
2323
2424* **reduced** (heterogeneous) - **T**:* **reduced** (heterogeneous) - **T**:
2525 Reduced output tensor. Reduced output tensor.
2626
2727**Type Constraints****Type Constraints**
2828
2929* **T** in (* **T** in (
30 tensor(bfloat16),
3031 tensor(double), tensor(double),
3132 tensor(float), tensor(float),
3233 tensor(float16), tensor(float16),
3334 tensor(int32), tensor(int32),
3435 tensor(int64), tensor(int64),
3536 tensor(uint32), tensor(uint32),
3637 tensor(uint64) tensor(uint64)
3738 ): ):
3839 Constrain input and output types to high-precision numeric tensors. Constrain input and output types to high-precision numeric tensors.

ReduceProd - 11#

Version

  • name: ReduceProd (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 product 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 product of the input tensor's element along the provided axes. The resultedComputes the product 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.

ReduceProd - 1#

Version

  • name: ReduceProd (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 product 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.