Update spec for DIVIDE operation. (#4536)

Co-authored-by: Patryk Elszkowski <patryk.elszkowki@intel.com>
This commit is contained in:
Patryk Elszkowski
2021-03-12 07:05:18 +03:00
committed by GitHub
co-authored by Patryk Elszkowski
parent d77a07bd6a
commit 18dd574864
+29 -14
View File
@@ -4,41 +4,54 @@
**Category**: Arithmetic binary operation
**Short description**: *Divide* performs element-wise division operation with two given tensors applying multi-directional broadcast rules.
**Short description**: *Divide* performs element-wise division operation with two given tensors applying broadcasting rule specified in the *auto_broacast* attribute.
**Detailed description**
Before performing arithmetic operation, input tensors *a* and *b* are broadcasted if their shapes are different and `auto_broadcast` attribute is not `none`. Broadcasting is performed according to `auto_broadcast` value.
After broadcasting *Divide* performs division operation for the input tensors *a* and *b* using the formula below:
\f[
o_{i} = a_{i} / b_{i}
\f]
The result of division by zero is undefined.
**Attributes**:
* *pythondiv*
* **Description**: specifies if floor division should be calculate. This attribute is supported only for integer data types.
* **Range of values**:
* false - regular division
* true - floor division
* **Type**: boolean
* **Default value**: true
* **Required**: *no*
* *auto_broadcast*
* **Description**: specifies rules used for auto-broadcasting of input tensors.
* **Range of values**:
* *none* - no auto-broadcasting is allowed, all input shapes should match
* *numpy* - numpy broadcasting rules, aligned with ONNX Broadcasting. Description is available in <a href="https://github.com/onnx/onnx/blob/master/docs/Broadcasting.md">ONNX docs</a>.
* *none* - no auto-broadcasting is allowed, all input shapes must match,
* *numpy* - numpy broadcasting rules, description is available in [Broadcast Rules For Elementwise Operations](../broadcast_rules.md),
* *pdpd* - PaddlePaddle-style implicit broadcasting, description is available in [Broadcast Rules For Elementwise Operations](../broadcast_rules.md).
* **Type**: string
* **Default value**: "numpy"
* **Required**: *no*
**Inputs**
* **1**: A tensor of type T. **Required.**
* **2**: A tensor of type T. **Required.**
* **1**: A tensor of type T and arbitrary shape and rank. **Required.**
* **2**: A tensor of type T and arbitrary shape and rank. **Required.**
**Outputs**
* **1**: The result of element-wise division operation. A tensor of type T.
* **1**: The result of element-wise division operation. A tensor of type T with shape equal to broadcasted shape of the two inputs.
**Types**
* *T*: any numeric type.
**Detailed description**
Before performing arithmetic operation, input tensors *a* and *b* are broadcasted if their shapes are different and `auto_broadcast` attributes is not `none`. Broadcasting is performed according to `auto_broadcast` value.
After broadcasting *Divide* does the following with the input tensors *a* and *b*:
\f[
o_{i} = a_{i} / b_{i}
\f]
**Examples**
@@ -46,6 +59,7 @@ o_{i} = a_{i} / b_{i}
```xml
<layer ... type="Divide">
<data auto_broadcast="none" m_pythondiv="true"/>
<input>
<port id="0">
<dim>256</dim>
@@ -68,6 +82,7 @@ o_{i} = a_{i} / b_{i}
*Example 2: broadcast*
```xml
<layer ... type="Divide">
<data auto_broadcast="numpy" m_pythondiv="false"/>
<input>
<port id="0">
<dim>8</dim>