ReduceProd#

ReduceProd - 18#

Version

  • name: ReduceProd (GitHub)

  • domain: main

  • since_version: 18

  • function: False

  • support_level: SupportType.COMMON

  • shape inference: True

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

Summary

Computes the product of the input tensor’s element along the provided axes. The resulting tensor has the same rank as the input if keepdims equals 1. If keepdims equals 0, then the resulting tensor has the reduced dimension pruned.

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

Attributes

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

  • noop_with_empty_axes: Defines behavior if ‘axes’ is empty. Default behavior 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(
    "ReduceProd",
    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.prod(data, axis=tuple(axes), keepdims=keepdims == 1)
# print(reduced)
# [[3., 8.]
# [35., 48.]
# [99., 120.]]

expect(
    node,
    inputs=[data, axes],
    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, axes],
    outputs=[reduced],
    name="test_reduce_prod_do_not_keepdims_random",
)

_keepdims

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

node = onnx.helper.make_node(
    "ReduceProd",
    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.prod(data, axis=tuple(axes), keepdims=keepdims == 1)
# print(reduced)
# [[[3., 8.]]
# [[35., 48.]]
# [[99., 120.]]]

expect(
    node,
    inputs=[data, axes],
    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, axes],
    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 = np.array([-2], dtype=np.int64)
keepdims = 1

node = onnx.helper.make_node(
    "ReduceProd",
    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.prod(data, axis=tuple(axes), keepdims=keepdims == 1)
# print(reduced)
# [[[3., 8.]]
# [[35., 48.]]
# [[99., 120.]]]

expect(
    node,
    inputs=[data, axes],
    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, axes],
    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 resultingComputes the product of the input tensor's element along the provided axes. The resulting
11tensor has the same rank as the input if keepdims equals 1. If keepdims equals 0, thentensor has the same rank as the input if keepdims equals 1. If keepdims equals 0, then
22the resulting tensor has the reduced dimension pruned.the resulting tensor has the reduced dimension pruned.
33
44The above behavior is similar to numpy, with the exception that numpy defaults keepdims toThe above behavior is similar to numpy, with the exception that numpy defaults 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 means 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 behavior if 'axes' is empty. Default behavior 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 means 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 (
3039 tensor(bfloat16), tensor(bfloat16),
3140 tensor(double), tensor(double),
3241 tensor(float), tensor(float),
3342 tensor(float16), tensor(float16),
3443 tensor(int32), tensor(int32),
3544 tensor(int64), tensor(int64),
3645 tensor(uint32), tensor(uint32),
3746 tensor(uint64) tensor(uint64)
3847 ): ):
3948 Constrain input and output types to high-precision numeric tensors. Constrain input and output types to high-precision numeric tensors.

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 resulting tensor has the same rank as the input if keepdims equals 1. If keepdims equals 0, then the resulting tensor has the reduced dimension pruned.

The above behavior is similar to numpy, with the exception that numpy defaults 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 means 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.

Differences

00Computes the product of the input tensor's element along the provided axes. The resultingComputes the product of the input tensor's element along the provided axes. The resulting
11tensor has the same rank as the input if keepdims equals 1. If keepdims equal 0, thentensor has the same rank as the input if keepdims equals 1. If keepdims equals 0, then
22the resulted tensor have the reduced dimension pruned.the resulting tensor has the reduced dimension pruned.
33
44The above behavior is similar to numpy, with the exception that numpy defaults keepdims toThe above behavior is similar to numpy, with the exception that numpy defaults 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 means keep reduced Keep the reduced dimension or not, default 1 means 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 resulting tensor has the same rank as the input if keepdims equals 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 defaults 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 means 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 resultingComputes the product of the input tensor's element along the provided axes. The resulting
11tensor has the same rank as the input if keepdims equals 1. If keepdims equal 0, thentensor has the same rank as the input if keepdims equals 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 defaults keepdims toThe above behavior is similar to numpy, with the exception that numpy defaults 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 means keep reduced Keep the reduced dimension or not, default 1 means 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 resulting tensor has the same rank as the input if keepdims equals 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 defaults 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 means 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.