(l-onnx-doc-ReduceProd)=
# ReduceProd
(l-onnx-op-reduceprod-18)=
## ReduceProd - 18
### Version
- **name**: [ReduceProd (GitHub)](https://github.com/onnx/onnx/blob/main/docs/Operators.md#ReduceProd)
- **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 elements 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. Input tensors of rank zero are
valid. Reduction over an empty set of values yields 1.
The above behavior is similar to numpy, with the exception that numpy defaults `keepdims`
to `False` instead of `True`.
### Attributes
* **keepdims - INT** (default is `'1'`):
Keep the reduced dimension or not, default 1 means keep reduced dimension.
* **noop_with_empty_axes - INT** (default is `'0'`):
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.
### 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 numeric tensors.
```{toctree}
text_diff_ReduceProd_13_18
```
(l-onnx-op-reduceprod-13)=
## ReduceProd - 13
### Version
- **name**: [ReduceProd (GitHub)](https://github.com/onnx/onnx/blob/main/docs/Operators.md#ReduceProd)
- **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 elements 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. Input tensors of rank zero are
valid. Reduction over an empty set of values yields 1.
The above behavior is similar to numpy, with the exception that numpy defaults `keepdims`
to `False` instead of `True`.
### Attributes
* **axes - INTS** :
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 - INT** (default is `'1'`):
Keep the reduced dimension or not, default 1 means keep reduced dimension.
### 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 numeric tensors.
```{toctree}
text_diff_ReduceProd_11_18
text_diff_ReduceProd_11_13
```
(l-onnx-op-reduceprod-11)=
## ReduceProd - 11
### Version
- **name**: [ReduceProd (GitHub)](https://github.com/onnx/onnx/blob/main/docs/Operators.md#ReduceProd)
- **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 - INTS** :
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 - INT** (default is `'1'`):
Keep the reduced dimension or not, default 1 means keep reduced dimension.
### 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.
```{toctree}
text_diff_ReduceProd_1_18
text_diff_ReduceProd_1_13
text_diff_ReduceProd_1_11
```
(l-onnx-op-reduceprod-1)=
## ReduceProd - 1
### Version
- **name**: [ReduceProd (GitHub)](https://github.com/onnx/onnx/blob/main/docs/Operators.md#ReduceProd)
- **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. Input tensors of rank zero are
valid. Reduction over an empty set of values yields 1.
The above behavior is similar to numpy, with the exception that numpy defaults keepdims to
False instead of True.
### Attributes
* **axes - INTS** :
A list of integers, along which to reduce. The default is to reduce over all the dimensions of the input tensor.
* **keepdims - INT** (default is `'1'`):
Keep the reduced dimension or not, default 1 means keep reduced dimension.
### 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.