## expr

```python
module expr
```
expr是MNN的表达式模块，包含了一系列的表达式函数能够构造MNN中所有的算子，并提供了类型[Var](Var.md)用来描述数据与表达式。

通过表达式函数和Var变量的组合，可以实现以下功能：
- 模型推理
- 数值计算
- 模型构造

---
### `expr Types`
- [Var](Var.md)
- `var_like` 指`Var`或者可以转换为`Var`的数据，如：`list`，`tuple`，`scalar`等

---
### `const(value_list, shape, data_format, dtype)`
根据输入数据创建一个`Const`类型的`Var`；该函数是创建的`Var`的最基本函数，
能够将`list`，`tuple`，`bytes`，`ndarray`，`PyCapsule`，`int指针`等格式的数据转换成`Var`

*注意：`value_list`仅在PYMNN_NUMPY_USABLE打开的情况下支持`ndarray`，移动端默认关闭*

参数：
- `value_list:ndarray/list/tuple/bytes/PyCapsule/int_addr` 输入数据
- `shape:[int]` 构造`Var`的形状
- `data_format:data_format` 数据排布格式，参考[data_format](Var.html#data-format)
- `dtype:dtype` 数据类型，参考[dtype](Var.html#dtype)

返回：创建的`Var`

返回类型：`Var`

示例：

```python
>>> import numpy as np
>>> expr.const(np.arange(4.0).astype(np.float32), [1, 4], expr.NCHW, expr.float) # ndarray
array([[0., 1., 2., 3.]], dtype=float32)
>>> expr.const([2, 3, 4], [3], expr.NCHW, expr.int) # list/tuple
array([2, 3, 4], dtype=int32)
>>> expr.const(bytes('abc', encoding='utf8'), [3], expr.NCHW, expr.uint8) # bytes
array([97, 98, 99], dtype=uint8)
>>> expr.const(MNN.Tensor([2, 3]).getData(), [2], expr.NCHW, expr.int) # PyCapsule
array([2, 3], dtype=int32)
>>> expr.const(np.arange(4.0).astype(np.float32).__array_interface__['data'][0], [4], expr.NCHW, expr.float) # int_addr 该方法要求ndarray内存必须连续
array([0., 1., 2., 3.], dtype=float32)
```
---
### `set_thread_number(numberThread)`
设置表达式求值的线程数

参数：
- `numberThread:int` 线程数，当`numberThread < 1`时，设置`numberThread=1`，当`numberThread > 8`时，设置`numberThread=8`

返回：`None`

返回类型：`None`

示例：

```python
>>> expr.set_thread_number(4)
```
---
### `load_as_list(fileName)`
从文件中加载模型，并将模型转换为计算图，以`list`的形式返回计算图的所有`Var`节点

参数：
- `fileName:str` 模型文件路径

返回：加载的模型计算图

返回类型：`[Var]`

示例：

```python
>>> len(expr.load_as_list('mobilenet_v1.mnn'))
31
```
---
### `save(vars, fileName, |forInference)`
将`list`形式的计算图存储为模型文件，此函数也用于将`Var`保存到磁盘中

参数：
- `vars:list` 计算图的`list`形式
- `fileName:str` 模型文件路径
- `forInference:bool` 是否仅保存为推理使用，默认为`True`

返回：存储计算图到模型文件中

返回类型：`None`

示例：

```python
>>> x = expr.const([1., 2., 3., 4.], [2, 2])
>>> expr.save([x], 'x.mnn')
>>> expr.load_as_list('x.mnn')
[array([[1., 2.],
        [3., 4.]], dtype=float32)]
```
---
### `load_as_dict(fileName)`
从文件中加载模型，并将模型转换为计算图，以`dict`的形式返回计算图的所有节点名称和`Var`

参数：
- `fileName:str` 模型文件路径

返回：加载的模型计算图，其`key`为`str`，`value`为`Var`

返回类型：`dict`

示例：

```python
>>> vars = expr.load_as_dict('mobilenet_v1.mnn')
>>> vars.keys()
dict_keys(['conv1', 'conv2_1/dw', 'conv2_1/sep', 'conv2_2/dw', 'conv2_2/sep', 'conv3_1/dw', 'conv3_1/sep', 'conv3_2/dw', 'conv3_2/sep', 'conv4_1/dw', 'conv4_1/sep', 'conv4_2/dw', 'conv4_2/sep', 'conv5_1/dw', 'conv5_1/sep', 'conv5_2/dw', 'conv5_2/sep', 'conv5_3/dw', 'conv5_3/sep', 'conv5_4/dw', 'conv5_4/sep', 'conv5_5/dw', 'conv5_5/sep', 'conv5_6/dw', 'conv5_6/sep', 'conv6/dw', 'conv6/sep', 'data', 'fc7', 'pool6', 'prob'])
```
---
### `get_inputs_and_outputs(allVariable)`
获取`dict`形式计算图的输入输出节点，可以在使用V3接口时获取输入输出的信息

参数：
- `allVariable:dict` 计算图的`dict`形式，其`key`为`str`，`value`为`Var`

返回：计算图的输入输出，其中输入输出都为`dict`形式，其`key`为`str`，`value`为`Var`

返回类型：`(dict, dict)`

示例：

```python
>>> vars = expr.load_as_dict('mobilenet_v1.mnn')
>>> inputs, outputs = expr.get_inputs_and_outputs(vars)
>>> inputs.keys()
dict_keys(['data'])
>>> outputs.keys()
dict_keys(['prob'])
```
---
### `gc(full)`
手动回收内存，当在循环中调用MNN表达式求值时，常量部分数据不会在每次循环结束释放，当执行次数增加时会有内存增长现象，可以在每次循环结束时调用该函数回收常量内存

参数：
- `full:bool` 是否全部回收，*目前回收方式`True`和`False`没有区别*

返回：`None`

返回类型：`None`

示例：

```python
>>> expr.gc(1)
```
---
### `lazy_eval(lazy)`
是否开启惰性求值，在Python中默认关闭；主要区别如下：

| 模式 | 开启惰性求值 | 关闭惰性求值 |
|:----|:-----------|:-----------|
| 构建区别 | 创建的`Var`时实际表达式类型 | 创建的`Var`都是`Const`类型 |
| 计算方式 | 对`Var`执行read操作时触发计算 | 构建表达式时会立即执行计算 |
| 应用场景 | 使用表达式构建模型，训练，需要对表达式进行修改 | 数值计算，关闭后会加速和降低内存占用 |

参数：
- `lazy:bool` 是否开启惰性求值

返回：`None`

返回类型：`None`

示例：

```python
>>> expr.placeholder().op_type
'Const'
>>> expr.lazy_eval(True)
>>> expr.placeholder().op_type
'Input'
```
---
### `sign(x)`
返回输入值的符号，正数返回1，负数返回-1

参数：
- `x:Var_like` 输入变量

返回：x的符号，`1`或`-1`

返回类型：`Var`

示例：

```python
>>> expr.sign([-5., 4.5])
    array([-1., 1.])
```

---
### `abs(x)`
返回输入值的绝对值，正数返回原值，负数返回相反数

参数：
- `x:Var_like` 输入变量

返回：x的绝对值

返回类型：`Var`

示例：

```python
>>> expr.abs([-5., 4.5])
    array([5., 4.5])
```

---
### `negative(x)`
返回输入值的相反数

参数：
- `x:Var_like` 输入变量

返回：x的相反数

返回类型：`Var`

示例：

```python
>>> expr.abs([-5., 4.5])
    array([5., -4.5])
```

---
### `floor(x)`
返回不大于输入值的最大整数

参数：
- `x:Var_like` 输入变量

返回：不大于x的最大整数

返回类型：`Var`

示例：

```python
>>> expr.floor([-5.1, 4.5])
array([-6.,  4.])
```

---
### `round(x)`
返回输入值的四舍五入的值

参数：
- `x:Var_like` 输入变量

返回：x的四舍五入的值

返回类型：`Var`

示例：

```python
>>> expr.round([-5.1, 4.5])
array([-5.,  5.])
```

---
### `ceil(x)`
返回输入值的整数部分的值

参数：
- `x:Var_like` 输入变量

返回：x的整数部分的值

返回类型：`Var`

示例：

```python
>>> expr.ceil([-4.9, 4.5])
array([-4.,  5.])
```

---
### `square(x)`
返回输入值的平方值

参数：
- `x:Var_like` 输入变量

返回：x的平方值

返回类型：`Var`

示例：

```python
 >>> expr.square([-5., 4.5])
array([25., 20.25])
```

---
### `sqrt(x)`
返回输入值的平方根的值，输入值为非负实数

参数：
- `x:Var_like` 输入变量

返回：x的平方根的值

返回类型：`Var`

示例：

```python
>>> expr.sqrt([9., 4.5])
array([3., 2.1213202])
```

---
### `rsqrt(x)`
返回输入值的平方根的倒数的值，输入值为非负实数

参数：
- `x:Var_like` 输入变量

返回：x的平方根的倒数的值

返回类型：`Var`

示例：

```python
>>> expr.rsqrt([9., 4.5])
array([0.33333334, 0.47140455])
```

---
### `exp(x)`
返回自然常数e的输入值(x)次方的值

参数：
- `x:Var_like` 输入变量

返回：自然常数e的x次方的值

返回类型：`Var`

示例：

```python
>>> expr.exp([9., 4.5])
array([8102.449, 90.01698])
```

---
### `log(x)`
返回输入值以自然常数e为底的对数值

参数：
- `x:Var_like` 输入变量

返回：x的以自然常数e为底的对数值

返回类型：`Var`

示例：

```python
>>> expr.log([9., 4.5])
array([2.1972246, 1.5040774])
```

---
### `sin(x)`
返回输入值的正弦值

参数：
- `x:Var_like` 输入变量

返回：x的正弦值

返回类型：`Var`

示例：

```python
>>> expr.sin([9., 4.5])
array([0.4121185, -0.9775301])
```

---
### `sinh(x)`
返回输入值的双曲正弦值
相当于 1/2 * (np.exp(x) - np.exp(-x)) 或者 -1j * np.sin(1j*x)

参数：
- `x:Var_like` 输入变量

返回：x的双曲正弦值

返回类型：`Var`

示例：

```python
>>> expr.sinh([9., 4.5])
array([4051.542, 45.00301])
```

---
### `cos(x)`
返回输入值的余弦值

参数：
- `x:Var_like` 输入变量

返回：x的余弦值

返回类型：`Var`

示例：

```python
>>> expr.cos([9., 4.5])
array([-0.91113025, -0.2107958])
```

---
### `cosh(x)`
返回输入值的双曲余弦值
相当于 1/2 * (np.exp(x) + np.exp(-x)) 或者 np.cos(1j*x)

参数：
- `x:Var_like` 输入变量

返回：x的双曲余弦值

返回类型：`Var`

示例：

```python
>>> expr.cosh([9., 4.5])
array([4051.542, 45.014122])
```

---
### `tan(x)`
返回输入值的正切值

参数：
- `x:Var_like` 输入变量

返回：x的正切值

返回类型：`Var`

示例：

```python
>>> expr.tan([9., 4.5])
array([-0.45231566, 4.637332])
```

---
### `tanh(x)`
返回输入值的双曲正切值
相当于 np.sinh(x)/np.cosh(x) 或者 -1j * np.tan(1j*x)

参数：
- `x:Var_like` 输入变量

返回：x的双曲正切值

返回类型：`Var`

示例：

```python
>>> expr.tanh([9., 4.5])
array([1., 0.9997533])
```

---
### `asin(x)`
返回输入值的反正弦值，别名arcsin

参数：
- `x:Var_like` 输入变量

返回：x的反正弦值

返回类型：`Var`

示例：

```python
>>> expr.asin([9., 0.5])
array([nan, 0.5235988])
```

---
### `asinh(x)`
返回输入值的双曲反正弦值，别名arcsinh

参数：
- `x:Var_like` 输入变量

返回：x的双曲反正弦值

返回类型：`Var`

示例：

```python
>>> expr.asinh([9., 0.5])
array([2.893444, 0.4812118])
```

---
### `acos(x)`
返回输入值的反余弦值，别名arccos

参数：
- `x:Var_like` 输入变量

返回：x的反余弦值

返回类型：`Var`

示例：

```python
>>> expr.asin([9., 0.5])
array([nan, 1.0471975])
```

---
### `acosh(x)`
返回输入值的双曲反余弦值，别名arccosh

参数：
- `x:Var_like` 输入变量

返回：x的双曲反余弦值

返回类型：`Var`

示例：

```python
>>> expr.acosh([9., 0.5])
array([2.887271, nan])
```

---
### `atan(x)`
返回输入值的反正切值，别名arctan

参数：
- `x:Var_like` 输入变量

返回：x的反正切值

返回类型：`Var`

示例：

```python
>>> expr.atan([9., 0.5])
array([1.4601392, 0.4636476])
```

---
### `atanh(x)`
返回输入值的双曲反正切值，别名arctanh

参数：
- `x:Var_like` 输入变量

返回：x的双曲反正切值

返回类型：`Var`

示例：

```python
>>> expr.atanh([9., 0.5])
array([1.4601392, 0.4636476])
```

---
### `reciprocal(x)`
返回输入值的倒数，输入值不能为0

参数：
- `x:Var_like` 输入变量

返回：x的倒数

返回类型：`Var`

示例：

```python
>>> expr.reciprocal([9., 0.5])
array([0.11111111, 2.])
```

---
### `log1p(x)`
返回log(1 + x)的值

参数：
- `x:Var_like` 输入变量

返回：log(1 + x)的值

返回类型：`Var`

示例：

```python
>>> expr.log1p([9., 0.5])
array([2.3025851, 0.4054651])
```

### `gelu(x)`
返回 0.5x(1+tanh(sqrt(pi/2)*(0.044715*x^3))) 的值

参数：
- `x:Var_like` 输入变量

返回：0.5x(1+tanh(sqrt(pi/2)*(0.044715*x^3))) 的值

返回类型：`Var`

示例：

```python
>>> expr.gelu([9., 0.5])
array([9., 0.345714])
```

---
### `sigmoid(x)`
返回 1/(1+exp(-1) 的值

参数：
- `x:Var_like` 输入变量

返回：1/(1+exp(-1)的值

返回类型：`Var`

示例：

```python
>>> expr.sigmoid([9., 0.5])
array([0.9998766, 0.62246716])
```

---
### `erf(x)`
计算高斯误差函数值的数据输入

参数：
- `x:Var_like` 输入变量

返回：高斯误差函数值的数据

返回类型：`Var`

示例：

```python
>>> expr.erf([[1., 25., 16., 0.]])
array([0.8427007., 1., 1., 0.])
```

---
### `erfc(x)`
返回 x 的互补误差

参数：
- `x:Var_like` 输入变量

返回： x的互补误差

返回类型：`Var`

示例：

```python
>>> expr.erfc([0.67., 1.34., -6.])
array([0.34337229769969496., 0.05808628474163466., 2.0.])
```

---
### `erfinv(x)`
返回x的逆误差

参数：
- `x:Var_like` 输入变量

返回：x的逆误差

返回类型：`Var`

示例：

```python
>>> expr.erfinv([0.1., 0.2])
array([0.08885599., 0.17914345.])
```

---
### `expm1(x)`
返回 exp(x) - 1 的值

参数：
- `x:Var_like` 输入变量

返回：exp(x) - 1的值

返回类型：`Var`

示例：

```python
>>> expr.expm1([9., 0.5])
array([8.1014492e+03, 6.4869785e-01])
```

---
### `add(x, y)`
返回两个输入数的和

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：x+y的值

返回类型：`Var`

示例：

```python
>>> expr.add([9., 0.5], [1.2, -3.0])
array([10.2, -2.5])
```

---
### `subtract(x, y)`
返回两个输入数的差值

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：x - y 的值

返回类型：`Var`

示例：

```python
>>> expr.subtract([9., 0.5], [1.2, -3.0])
array([7.8, 3.5])
```

---
### `multiply(x, y)`
返回两个输入数的乘积

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：x * y 的值

返回类型：`Var`

示例：

```python
>>> expr.multiply([9., 0.5], [1.2, -3.0])
array([10.8, -1.5])
```

---
### `divide(x, y)`
返回两个输入数相除的值，y值不能为0

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：x / y 的值

返回类型：`Var`

示例：

```python
>>> expr.divide([9., 0.5], [1.2, -3.0])
array([7.4999995, -0.16666667])
```

---
### `floordiv(x, y)`
返回小于或等于代数商的最大(最接近正无穷大)int值

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：x // y 的值

返回类型：`Var`

示例：

```python
>>> expr.floordiv([9., 0.5], [1.2, -3.0])
array([7., -1.])
```

---
### `mod(x, y)`
返回两个输入数求余的值，y不能为0，取余运算在计算商值向0方向舍弃小数位

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：x % y 的值

返回类型：`Var`

示例：

```python
>>> expr.mod([9., 0.5], [1.2, -3.0])
array([0.59999967, 0.5])
```

---
### `floormod(x, y)`
返回两个输入数取模的值，y不能为0，取模运算在计算商值向负无穷方向舍弃小数位

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：(1)与y符号相同
     (2)x > y：结果的绝对值与 % 运算相同;
     (3)x < y：①符号相同 结果的绝对值为 y – x ；②符号不同 结果的绝对值与 % 运算相同

返回类型：`Var`

示例：

```python
>>> expr.floormod([9., 0.5], [1.2, -3.0])
array([0.5999994, -2.5])
```

---
### `pow(x, y)`
返回x的y次方的值

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：x的y次方的值

返回类型：`Var`

示例：

```python
>>> expr.pow([9., 0.5], [1.2, -3.0])
array([13.966612, 8.])
```

---
### `minimum(x, y)`
返回输入数中的最小值

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：x和y中的最小值

返回类型：`Var`

示例：

```python
>>> expr.minimum([9., 0.5], [1.2, -3.0])
array([1.2, -3.])
```

---
### `maximum(x, y)`
返回输入数中的最大值

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：x和y中的最大值

返回类型：`Var`

示例：

```python
>>> expr.maximum([9., 0.5], [1.2, -3.0])
array([9., 0.5])
```

---
### `equal(x, y)`
判断输入数是否相等，相等返回1，不等返回0

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：1或0

返回类型：`Var`

示例：

```python
>>> expr.equal([-9., 0.5], [1.2, 0.5])
array([0, 1])
```

---
### `not_equal(x, y)`
判断输入数是否相等，相等返回0，不等返回1

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：1或0

返回类型：`Var`

示例：

```python
>>> expr.not_equal([-9., 0.5], [1.2, 0.5])
array([1, 0])
```

---
### `greater(x, y)`
判断输入数x和y的大小，如果x > y返回1，否者返回0

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：1或0

返回类型：`Var`

示例：

```python
>>> expr.greater([-9., 0.5], [1.2, -3.0])
array([0, 1])
```

---
### `greater_equal(x, y)`
判断输入数x和y的大小，如果x >= y返回1，否者返回0

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：1或0

返回类型：`Var`

示例：

```python
>>> expr.greater_equal([-9., 0.5], [1.2, -3.0])
array([0, 1])
```

---
### `less(x, y)`
判断输入数x和y的大小，如果x < y返回1，否者返回0

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：1或0

返回类型：`Var`

示例：

```python
>>> expr.less([-9., 0.5], [1.2, -3.0])
array([1, 0])
```

---
### `less_equal(x, y)`
判断输入数x和y的大小，如果x <= y返回1，否者返回0

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：1或0

返回类型：`Var`

示例：

```python
>>> expr.less_equal([-9., 0.5], [1.2, -3.0])
array([1, 0])
```

---
### `squared_difference(x, y)`
返回输入数x和输入数y的差的平方值

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：(x - y)^2

返回类型：`Var`

示例：

```python
>>> expr.squared_difference([-9., 0.5], [1.2, -3.0])
array([104.03999, 12.25])
```

---
### `atan2(x, y)`
返回 x / y 的反正切值，别名arctan2

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量

返回：arctan(x / y)的值

返回类型：`Var`

示例：

```python
>>> expr.atan2([-9., 0.5], [1.2, -3.0])
array([-1.4382448, -0.16514869])
```

---
### `logical_or(x, y)`
返回输入数的“或”逻辑的值，x和y形状相同，返回1，否则返回0

参数：
- `x:Var_like` 输入变量，仅支持int32
- `y:Var_like` 输入变量，仅支持int32

返回：1或0

返回类型：`Var`

示例：

```python
>>> expr.logical_or([2, 1], [4, 2])
array([1, 1])
```

---
### `bias_add(value, bias)`
这(主要)是加法的一个特殊情况，其中偏差限制在1-D，value可以有任意数量的维度，与加法不同，在量子化的情况下，偏差的类型允许与值不同。

参数：
- `value` 输入变量，dtype.float或者dtype.int类型
- `bias` 输入变量，一个一维变量，其大小与值的通道维度相匹配，必须与值的类型相同，除非值是量化类型，在这种情况下可以使用不同的量化类型。

返回：与value类型相同的变量

返回类型：`Var`

示例：

```python
 >>> expr.bias_add(np.eye(3,3), np.ones(3))
array([[2., 1., 1.],
       [1., 2., 1.],
       [1., 1., 2.]], dtype=float32)
```

---
### `bitwise_and(x, y)`
返回输入数的“与”运算的值（x & y，x, y必须为dtype.int32

参数：
- `x:Var_like` 输入变量，仅支持int32
- `y:Var_like` 输入变量，仅支持int32

返回：1或0

返回类型：`Var`

示例：

```python
>>> expr.bitwise_and([1, 2], [3, 4])
array([1, 0])
```

---
### `bitwise_or(x, y)`
返回输入数的“或”运算的值（x | y），x, y必须为dtype.int32

参数：
- `x:Var_like` 输入变量，仅支持int32
- `y:Var_like` 输入变量，仅支持int32

返回：x | y

返回类型：`Var`

示例：

```python
>>> expr.bitwise_or([1, 2], [3, 4])
array([3, 6])
```

---
### `bitwise_xor(x, y)`
返回输入数的“异或”运算的值（x ^ y），x, y必须为dtype.int32

参数：
- `x:Var_like` 输入变量，仅支持int32
- `y:Var_like` 输入变量，仅支持int32

返回：x ^ y

返回类型：`Var`

示例：

```python
>>> expr.bitwise_xor([1, 2], [3, 4])
array([2, 6])
```

---
### `reduce_sum(x, axis=[], keepdims=False)`
计算张量x沿着指定的数轴（x的某一维度）上的和

参数：
- `x:Var_like` 输入变量
- `axis : axis_like` 仅支持int32，默认为[],指定按哪个维度进行加和，默认将所有元素进行加和
- `keepdims : bool` 默认为false，表示不维持原来张量的维度，反之维持原张量维度

返回：x沿着指定的数轴（x的某一维度）上的和

返回类型：`Var`

示例：

```python
>>> expr.reduce_sum([[1.,2.],[3.,4.]])
array(10.)
>>> expr.reduce_sum([[1.,2.],[3.,4.]], 0)
array([4., 6.])
```

---
### `reduce_mean(x, axis=[], keepdims=False)`
计算张量x沿着指定的数轴（x的某一维度）上的平均值

参数：
- `x:Var_like` 输入变量
- `axis : axis_like` 仅支持int32，默认为[],指定按哪个维度进行加和，默认将所有元素进行加和
- `keepdims : bool` 默认为false，表示不维持原来张量的维度，反之维持原张量维度

返回：x沿着指定的数轴（x的某一维度）上的平均值

返回类型：`Var`

示例：

```python
>>> expr.reduce_mean([[1.,2.],[3.,4.]])
array(2.5.)
>>> expr.reduce_mean([[1.,2.],[3.,4.]], 0)
array([2., 3.])
```

---
### `reduce_max(x, axis=[], keepdims=False)`
计算x沿着指定的数轴（x的某一维度）上的最大值

参数：
- `x:Var_like` 输入变量
- `axis : axis_like` 仅支持int32，默认为[],指定按哪个维度进行加和，默认将所有元素进行加和
- `keepdims : bool` 默认为false，表示不维持原来张量的维度，反之维持原张量维度

返回：x沿着指定的数轴（x的某一维度）上的最大值

返回类型：`Var`

示例：

```python
>>> expr.reduce_max([[1.,2.],[3.,4.]])
array(4.)
>>> expr.reduce_max([[1.,2.],[3.,4.]], 0)
array([3., 4.])
```

---
### `reduce_min(x, axis=[], keepdims=False)`
计算x沿着指定的数轴（x的某一维度）上的最小值

参数：
- `x:Var_like` 输入变量
- `axis : axis_like` 仅支持int32，默认为[],指定按哪个维度进行加和，默认将所有元素进行加和
- `keepdims : bool` 默认为false，表示不维持原来张量的维度，反之维持原张量维度

返回：x沿着指定的数轴（x的某一维度）上的最小值

返回类型：`Var`

示例：

```python
>>> expr.reduce_min([[1.,2.],[3.,4.]])
array(1.)
>>> expr.reduce_min([[1.,2.],[3.,4.]], 0)
array([1., 2.])
```

---
### `reduce_prod(x, axis=[], keepdims=False)`
计算x沿着指定的数轴（x的某一维度）上的乘积

参数：
- `x:Var_like` 输入变量
- `axis : axis_like` 仅支持int32，默认为[],指定按哪个维度进行加和，默认将所有元素进行加和
- `keepdims : bool` 默认为false，表示不维持原来张量的维度，反之维持原张量维度

返回：x沿着指定的数轴（x的某一维度）上的乘积

返回类型：`Var`

示例：

```python
>>> expr.reduce_prod([[1.,2.],[3.,4.]])
array(24.)
>>> expr.reduce_prod([[1.,2.],[3.,4.]], 0)
array([3., 8.])
```

---
### `reduce_any(x, axis=[], keepdims=False)`
计算x沿着指定的数轴（x的某一维度）上的“逻辑或”的值

参数：
- `x:Var_like` 输入变量
- `axis : axis_like` 仅支持int32，默认为[],指定按哪个维度进行加和，默认将所有元素进行加和
- `keepdims : bool` 默认为false，表示不维持原来张量的维度，反之维持原张量维度

返回：x沿着指定的数轴（x的某一维度）上的“逻辑或”的值

返回类型：`Var`

示例：

```python
>>> expr.reduce_any([[0,1],[0,3]])
array(1)
>>> expr.reduce_any([[0,1],[0,3]], 1)
array([0, 1])
```

---
### `reduce_all(x, axis=[], keepdims=False)`
计算x沿着指定的数轴（x的某一维度）上的“逻辑和”的值

参数：
- `x:Var_like` 输入变量
- `axis : axis_like` 仅支持int32，默认为[],指定按哪个维度进行加和，默认将所有元素进行加和
- `keepdims : bool` 默认为false，表示不维持原来张量的维度，反之维持原张量维度

返回：x沿着指定的数轴（x的某一维度）上的“逻辑和”的值

返回类型：`Var`

示例：

```python
>>> expr.reduce_all([[0,1],[0,3]])
array(0)
>>> expr.reduce_all([[0,1],[0,3]], 0)
array([0, 1])
```

---
### `eltwise_prod(x, y, coeff)`
逐元素对输入的变量执行乘法运算

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量
- `coeff:[float]` 系数，目前仅支持`[1.,0.]`或`[]/[0.]`

返回：`x*y`, 当`coeff=[1.,0.]`时返回`x`

返回类型：`Var`

示例：

```python
>>> expr.eltwise_prod([1., 2., 3.], [2., 2., 2.], [])
array([2., 4., 6.], dtype=float32)
>>> expr.eltwise_prod([1., 2., 3.], [2., 2., 2.], [1., 0.])
array([1., 2., 3.], dtype=float32)
```

---
### `eltwise_sum(x, y, coeff)`
逐元素对输入的变量执行加法运算

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量
- `coeff:[float]` 系数，目前仅支持`[1.,0.]`或`[]/[0.]`

返回：`x+y`, 当`coeff=[1.,0.]`时返回`x`

返回类型：`Var`

示例：

```python
>>> expr.eltwise_sum([1., 2., 3.], [2., 2., 2.], [])
array([3., 4., 5.], dtype=float32)
>>> expr.eltwise_sum([1., 2., 3.], [2., 2., 2.], [1., 0.])
array([1., 2., 3.], dtype=float32)
```

---
### `eltwise_sub(x, y, coeff)`
逐元素对输入的变量执行减法运算

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量
- `coeff:[float]` 系数，目前仅支持`[1.,0.]`或`[]/[0.]`

返回：`x-y`, 当`coeff=[1.,0.]`时返回`x`

返回类型：`Var`

示例：

```python
>>> expr.eltwise_sub([1., 2., 3.], [2., 2., 2.], [])
array([-1.,  0.,  1.], dtype=float32)
>>> expr.eltwise_sub([1., 2., 3.], [2., 2., 2.], [1., 0.])
array([1., 2., 3.], dtype=float32)
```

---
### `eltwise_max(x, y, coeff)`
逐元素对输入的变量执行比较运算，取最大值

参数：
- `x:Var_like` 输入变量
- `y:Var_like` 输入变量
- `coeff:[float]` 系数，目前仅支持`[1.,0.]`或`[]/[0.]`

返回：`max(x,y)`, 当`coeff=[1.,0.]`时返回`x`

返回类型：`Var`

示例：

```python
>>> expr.eltwise_max([1., 2., 3.], [2., 2., 2.], [])
array([2., 2., 3.], dtype=float32)
>>> expr.eltwise_max([1., 2., 3.], [2., 2., 2.], [1., 0.])
array([1., 2., 3.], dtype=float32)
```

---
### `cast(x, dtype=_F.float)`
返回输入数的dtype

参数：
- `x:Var_like` 输入变量
- `dtype` 默认是float类型

返回：x的dtype

返回类型：`Var`

示例：

```python
>>> expr.cast([[0,1],[0,3]], float)
array([[0., 1.],
       [0., 3.]], dtype=float32)
```

---
### `matmul(a, b, transposeA=False, transposeB=False)`
返回两个数组的矩阵乘积

参数：
- `a:Var_like` 输入变量
- `b:Var_like` 输入变量
- `transposeA` 布尔值，用于判定a是否为转置矩阵，默认为false
- `transposeB` 布尔值，用于判定b是否为转置矩阵，默认为false

返回：a @ b 的值，dtype是float32

返回类型：`Var`

示例：

```python
>>> expr.matmul([[1,2],[3,4]], [[1,1],[2,2]])
array([[0., 1.],
       [0., 3.]], dtype=float32)
```

---
### `normalize(x, acrossSpatial, channelShared, eps, scale)`
返回x数据转换成指定的标准化的格式

参数：
- `a:Var_like` 输入变量
- `acrossSpatial` 输入变量，int类型
- `channelShared`  输入变量，int类型
- `eps` 输入变量，float类型，data_format
- `scale` 输入变量，[float]

返回：x数据转换成指定的标准化的格式

返回类型：`Var`

示例：

```python
>>> x = expr.const([-1.0, -2.0, 3.0, 4.0], [1, 2, 2, 1], expr.NCHW)
>>> expr.normalize(x, 0, 0, 0.0, [0.5, 0.5])
array([[[[-0.2236068],
         [-0.4472136]],
        [[ 0.3      ],
         [ 0.4      ]]]], dtype=float32)
```

---
### `argmax(x, axis=0)`
返回数据最大值的索引，根据axis判断返回的是行还是列的最大值索引

参数：
- `x:Var_like` 输入变量
- `axis` 输入变量，int类型，默认为0，当值为0时则按照每一列操作，为1时按照每一行操作

返回：x最大值的索引

返回类型：`Var`

示例：

```python
>>> expr.argmax([[1,2],[3,4]])
array([1, 1], dtype=int32)
```

---
### `argmin(x, axis=0)`
返回数据最小值的索引，根据axis判断返回的是行还是列的最小值索引

参数：
- `x:Var_like` 输入变量
- `axis` 输入变量，int类型，默认为0，0代表列，1代表行

返回：x最小值的索引

返回类型：`Var`

示例：

```python
>>> expr.argmax([[1,2],[3,4]])
array([1, 1], dtype=int32)
```

---
### `cumsum(x, axis=0)`
返回给定axis上的累计和，如果axis == 0，行一不变，行二累加，以此类推；axis == 1，列一不变，列二累加，以此类推

参数：
- `x:Var_like` 输入变量
- `axis` 输入变量，int类型，默认为0，0代表列，1代表行

返回：x在给定axis上的累计和

返回类型：`Var`

示例：

```python
>>> expr.cumsum([[1,2],[3,4]])
array([[1, 2],
       [4, 6]], dtype=int32)
```

---
### `cumprod(x, axis=0)`
返回给定axis上的累计乘积，如果axis == 0，行一不变，行二累计相乘，以此类推；axis == 1，列一不变，列二累计相乘，以此类推

参数：
- `x:Var_like` 输入变量
- `axis` 输入变量，int类型，默认为0，0代表列，1代表行

返回：x在给定axis上的累计乘积

返回类型：`Var`

示例：

```python
>>> expr.cumprod([[1.,2.],[3.,4.]])
array([[1., 2.],
       [3., 8.]], dtype=float32)
```

---
### `svd(x)`
返回'x'的svd矩阵，'x'是一个2D矩阵。
返回'w'，'u'，'vt'为 a = u @ w @ vt。

参数：
- `x:Var_like` 输入变量

返回：w : 形状是 (N).
     u : 形状是 (M, N).
     vt : 形状是 (N, N).

返回类型：`Var`

示例：

```python
>>> expr.cumprod([[1.,2.],[3.,4.]])
[array([5.464986  , 0.36596605], dtype=float32), array([[ 0.40455356,  0.91451436],
       [ 0.91451424, -0.40455365]], dtype=float32), array([[ 0.5760485 ,  0.81741554],
       [-0.81741554,  0.5760485 ]], dtype=float32)]
```

---
### `unravel_index(indices, shape)`
求出数组某元素（或某组元素）拉成一维后的索引值在原本维度（或指定新维度）中对应的索引

参数：
- `indices:Var_like` 输入变量，int32构成的数组， 其中元素是索引值
- `shape:Var_like` 输入变量，一般是原本数组的维度，也可以给定的新维度

返回：索引

返回类型：`Var`

示例：

```python
>>> expr.unravel_index([22, 41, 37], (7,6))
array([[3, 6, 6],
       [4, 5, 1]], dtype=int32)
```

---
### `scatter_nd(indices, updates, shape)`
根据indices将updates散布到新的（初始为零）张量

参数：
- `indices:Var_like` 输入变量，指数张量
- `updates:Var_like` 输入变量，分散到输出的更新
- `shape:Var_like` 输入变量，得到的张量的形状

返回：（初始为零）张量

返回类型：`Var`

示例：

```python
>>> indices = expr.const([4, 3, 1, 7], [4, 1], expr.NHWC, expr.int)
>>> expr.scatter_nd(indices, [9.0, 10.0, 11.0, 12.0], [8])
array([ 0., 11.,  0., 10.,  9.,  0.,  0., 12.], dtype=float32)
```

---
### `one_hot(indices, depth, onValue=1.0, offValue=0.0, axis=-1)`
转换成one_hot类型的张量输出

参数：
- `indices: Var_like` 输入变量，指示on_value的位置，不指示的地方都为off_value。indices可以是向量、矩阵。
- `depth: int` 输入变量，输出张量的尺寸，indices中元素默认不超过（depth-1），如果超过，输出为[0,0,···,0]
- `onValue: float` 输入变量，定义在indices[j] = i 时填充输出值的标量，默认为1
- `offValue: float` 输入变量，定义在indices[j] != i 时填充输出值的标量，默认为0
- `axis: int` 输入变量，要填充的轴，默认为-1，即一个新的最内层轴

返回：one_hot类型的张量输出

返回类型：`Var`

示例：

```python
>>> expr.one_hot([0, 1, 2], 3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]], dtype=float32)
```

---
### `broadcast_to(input, shape)`
利用广播将原始矩阵成倍增加

参数：
- `input: Var_like` 输入变量，一个张量，广播的张量
- `shape: int` 输入变量，一个一维的int32张量，期望输出的形状

返回：成倍增加的原始矩阵

返回类型：`Var`

示例：

```python
>>> expr.broadcast_to([1,2], 4)
array([1, 2, 1571999095, -536868871], dtype=int32)
```

---
### `placeholder(shape=[], format=_F.NCHW, dtype=_F.float)`
构建一个Var类型的占位符

参数：
- `shape: [int]` 输入变量，默认是[]
- `format: data_format` 输入变量，默认是NCHW
- `dtype: dtype` 输入变量，默认是float

返回：Var类型的占位符，使用之前需先`write`

返回类型：`Var`

示例：

```python
>>> expr.placeholder()
array(1., dtype=float32)
>>> expr.placeholder([2,2])
array([[1.67e-43, 1.60e-43],
       [1.36e-43, 1.54e-43]], dtype=float32)
```

---
### `clone(x, deepCopy=False)`
克隆一个`Var`

参数：
- `x: Var_like` 输入变量
- `deepCopy: bool` 输入变量，true代表深拷贝，false代表浅拷贝，默认为false

返回：通过x拷贝一个Var

返回类型：`Var`

示例：

```python
>>> x = expr.const([1.,2.], [2])
>>> expr.clone(x, True)
array([1., 2.], dtype=float32)
```

---
### `conv2d(input, weight, bias, stride=(1,1), padding=(0,0), dilate=(1,1), group=1, padding_mode=_F.VALID)`
对由多个输入平面组成的输入信号进行二维卷积

参数：
- `input: var_like` 输入变量，data_format为NC4HW4，输入图像通道数
- `weight: var_like` 输入变量，卷积产生的通道数
- `bias: var_like` 输入变量，在输出中添加一个可学习的偏差
- `stride: tuple of int` 输入变量，卷积步长，默认为(1,1)
- `padding: tuple of int` 输入变量，填充操作，控制padding_mode的数目
- `dilate: tuple of int` 输入变量，扩张操作：控制kernel点（卷积核点）的间距，默认值为(1,1)
- `group: int` 输入变量，控制分组卷积，默认不分组，为1组
- `padding_mode:  Padding_Mode` 输入变量，填充模式，默认是VALID

返回：二维卷积

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 18., 1.), [1, 2, 3, 3])
>>> x = expr.convert(x, expr.NC4HW4)
>>> w = expr.reshape(expr.range(0., 16., 1.), [2, 2, 2, 2])
>>> b = expr.const([1.0, 1.0], [2])
>>> expr.convert(expr.conv2d(x, w, b), expr.NCHW)
array([[[[ 269.,  297.],
         [ 353.,  381.]],
        [[ 685.,  777.],
         [ 961., 1053.]]]], dtype=float32)
```

---
### `conv2d_transpose(input, weight, bias, stride=(1,1), padding=(0,0), dilate=(1,1), group=1, padding_mode=_F.VALID)`
转置卷积，是卷积的反向操作

参数：
- `input: var_like` 输入变量，需要做反卷积的输入图像
- `weight: var_like` 输入变量，反卷积产生的通道数
- `bias: var_like` 输入变量，在输出中添加一个可学习的偏差
- `stride: tuple of int` 输入变量，反卷积步长，默认为(1,1)
- `padding: tuple of int` 输入变量，填充操作，控制padding_mode的数目
- `dilate: tuple of int` 输入变量，扩张操作：控制kernel点（反卷积核点）的间距，默认值为(1,1)
- `group: int` 输入变量，控制分组反卷积，默认不分组，为1组
- `padding_mode:  Padding_Mode` 输入变量，填充模式，默认是VALID

返回：转置卷积（反卷积）

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 18., 1.), [1, 2, 3, 3])
>>> x = expr.convert(x, expr.NC4HW4)
>>> w = expr.reshape(expr.range(0., 16., 1.), [2, 2, 2, 2])
>>> b = expr.const([1.0, 1.0], [2])
>>> expr.convert(expr.conv2d_transpose(x, w, b), expr.NCHW)
array([[[[ 73., 162., 180., 102.],
         [187., 417., 461., 259.],
         [247., 549., 593., 331.],
         [163., 358., 384., 212.]],
        [[109., 242., 276., 154.],
         [283., 625., 701., 387.],
         [391., 853., 929., 507.],
         [247., 534., 576., 312.]]]], dtype=float32)
```

---
### `max_pool(x, kernel, stride, padding_mode=_F.VALID, pads=(0,0))`
最大值池化操作

参数：
- `x: var_like` 输入变量，池化的输入
- `kernel: var_like` 输入变量
- `stride: tuple of int` 输入变量，窗口在每一个维度上滑动的步长
- `padding_mode:  Padding_Mode` 输入变量，填充模式，默认是VALID
- `pads: tuple of int` 输入变量

返回：最大池化

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 18., 1.), [1, 2, 3, 3])
>>> expr.max_pool(x, [2,2], [1,1])
array([[[[ 4.,  5.],
         [ 7.,  8.]],
        [[13., 14.],
         [16., 17.]]]], dtype=float32)
```

---
### `avg_pool(x, kernel, stride, padding_mode=_F.VALID, pads=(0,0))`
平均池化操作

参数：
- `x: var_like` 输入变量，池化的输入
- `kernel: var_like` 输入变量
- `stride: tuple of int` 输入变量，窗口在每一个维度上滑动的步长
- `padding_mode:  Padding_Mode` 输入变量，填充模式，默认是VALID
- `pads: tuple of int` 输入变量

返回：平均池化

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 18., 1.), [1, 2, 3, 3])
    >>> expr.avg_pool(x, [2,2], [1,1])
array([[[[ 2.,  3.],
         [ 5.,  6.]],
        [[11., 12.],
         [14., 15.]]]], dtype=float32)
```

---
### `reshape(x, shape, original_format=_F.NCHW)`
改变输入数的形状

参数：
- `x: var_like` 输入变量，数组或者矩阵
- `shape: axis_like` 输入变量，返回数据的形状
- `original_format : data_format` 输入变量，默认是NCHW

返回：输入数对应的`shape`

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 18., 1.), [1, 2, 3, 3])
>>> reshape(x, [3, 6])
array([[ 0.,  1.,  2.,  3.,  4.,  5.],
       [ 6.,  7.,  8.,  9., 10., 11.],
       [12., 13., 14., 15., 16., 17.]], dtype=float32)
```

---
### `scale(x, channels, scale, bias)`
返回`x * scale + bias`的值

参数：
- `x: var_like` 输入变量
- `channels : int` 输入变量
- `scale : [float]` 输入变量
- `bias : [float]` 输入变量

返回：`x * scale + bias`的值

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 18., 1.), [1, 2, 3, 3])
>>> x = expr.convert(x, expr.NC4HW4)
>>> y = expr.scale(x, 2, [2.0, 1.0], [3.0, 4.0])
>>> expr.convert(y, expr.NCHW)
array([[[[ 3.,  5.,  7.],
           [ 9., 11., 13.],
           [15., 17., 19.]],
          [[13., 14., 15.],
           [16., 17., 18.],
           [19., 20., 21.]]]], dtype=float32)
```

---
### `relu(x, slope=0.0)`
修正线性单元，修正公式为`slope*x if x < 0 else x`

参数：
- `x: var_like` 输入变量
- `slope : float` 输入变量，修正梯度，默认是0.0

返回：修正后的值

返回类型：`Var`

示例：

```python
>>> expr.relu([-1.0, 0.0, 2.0])
    var[0., 0., 2.], dtype=float32)
```

---
### `relu6(x, min=0.0, max=6.0)`
修正线性单元，修正公式为`max(min(x, max), min)`

参数：
- `x: var_like` 输入变量
- `min : float` 输入变量，修正最小范围，默认是0.0
- `max : float` 输入变量，修正最大范围，默认是6.0

返回：修正后的值

返回类型：`Var`

示例：

```python
>>> expr.relu6([-1.0, 7.0, 2.0])
    var[0., 6., 2.], dtype=float32)
```

---
### `prelu(x, slopes)`
查找指定张量输入的泄漏校正线性，修正公式为`slope*x if x < 0 else x`

参数：
- `x: var_like` 输入变量，data_format 是 NC4HW4.
- `slopes : [float]` 输入变量，修正梯度

返回：修正后的值

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(-4., 4., 1.), [1, 2, 2, 2])
>>> x = expr.convert(x, expr.NC4HW4)
>>> expr.convert(expr.prelu(x, [0.5, 0.6]), expr.NCHW)
array([[[[-2. , -1.5],
         [-1. , -0.5]],
        [[ 0. ,  1. ],
         [ 2. ,  3. ]]]], dtype=float32)
```

---
### `softmax(x, axis=-1)`
数学公式:`exp(x)/sum(exp(x), axis)`

参数：
- `x: var_like` 输入变量
- `axis : int` 输入变量，默认为-1

返回：修正后的值

返回类型：`Var`

示例：

```python
>>> expr.softmax([[1., 2.], [3., 4.]], 0)
array([[0.1191897 , 0.1191897 ],
       [0.88081026, 0.88081026]], dtype=float32)
```

---
### `softplus(x)`
通过输入数据 x（张量）并生成一个输出数据（张量）转换公式:`log(exp(x) + 1)`

参数：
- `x: var_like` 输入变量

返回：输出数据（张量）

返回类型：`Var`

示例：

```python
>>> expr.softplus([[1., 2.], [3., 4.]])
array([[1.313261 , 2.1268892],
       [3.048587 , 4.01813  ]], dtype=float32)
```

---
### `softsign(x)`
返回通过转换公式:`x / (abs(x) + 1)`转换后的数据

参数：
- `x: var_like` 输入变量

返回：转换公式`x / (abs(x) + 1)`转换后的数据

返回类型：`Var`

示例：

```python
>>> expr.softsign([[1., 2.], [3., 4.]])
array([[0.5      , 0.6666667],
       [0.75     , 0.8      ]], dtype=float32)
```

---
### `slice(x, starts, sizes)`
返回从张量中提取想要的切片，此操作从由starts指定位置开始的张量x中提取一个尺寸sizes的切片，切片sizes被表示为张量形状，提供公式`x[starts[0]:starts[0]+sizes[0], ..., starts[-1]:starts[-1]+sizes[-1]]`

参数：
- `x: var_like` 输入变量
- `starts : var_like` 输入变量，切片提取起始位置
- `sizes : var_like` 输入变量，切片提取的尺寸

返回：切片数据

返回类型：`Var`

示例：

```python
>>> expr.slice([[1., 2., 3.], [4., 5., 6.]], [0, 1], [1, 2])
array([[2., 3.]], dtype=float32)
```

---
### `split(x, size_splits, axis)`
返回切割张量的子张量数据

参数：
- `x: var_like` 输入变量
- `size_splits : var_like` 输入变量，int类型，切成的份数
- `axis : int` 输入变量，进行切割的维度

返回：切割张量的子张量数据

返回类型：`Var`

示例：

```python
>>> expr.split([[1., 2., 3.], [4., 5., 6.]], [1, 1], 0)
    [array([[1., 2., 3.]], dtype=float32), array([[4., 5., 6.]], dtype=float32)]
```

---
### `strided_slice(x, begin, end, strides, begin_mask=0, end_mask=0, ellipsis_mask=0, new_axis_mask=0, shrink_axis_mask=0)`
从给定的 x 张量中提取一个尺寸 (end-begin)/stride 的片段，从 begin 片段指定的位置开始，以步长 stride 添加索引，直到所有维度都不小于 end，这里的 stride 可以是负值，表示反向切片,公式：`x[begin[0]:strides[0]:end[0], ..., begin[-1]:strides[-1]:end[-1]]`。

参数：
- `x: var_like` 输入变量
- `begin : var_like` 输入变量，int类型，开始切片处
- `end : var_like` 输入变量，int类型，终止切片处
- `strides : var_like` 输入变量，int类型，步长
- `begin_mask : int` 输入变量，默认为0
- `end_mask : int` 输入变量，默认为0
- `ellipsis_mask : int` 输入变量，默认为0
- `new_axis_mask : int` 输入变量，默认为0
- `shrink_axis_mask : int` 输入变量，默认为0

返回：提取的片段

返回类型：`Var`

示例：

```python
>>> expr.strided_slice([[1., 2., 3.], [4., 5., 6.]], [0, 0], [1, 2], [1, 2])
array([[1.]], dtype=float32)
```

---
### `concat(values, axis)`
根据axis设置的维度拼接输入变量values中的数据

参数：
- `values : [var_like]` 输入变量
- `axis : int` 输入变量，操作的维度

返回：拼接后的数据

返回类型：`Var`

示例：

```python
>>> expr.concat([[1., 2., 3.], [4., 5., 6.]], 0)
array([1., 2., 3., 4., 5., 6.], dtype=float32)
```

---
### `where(x)`
返回满足条件`x > 0`的索引

参数：
- `x : [var_like]` 输入变量

返回：索引，int类型

返回类型：`Var`

示例：

```python
>>> expr.where([0., 1., -2., 3.3])
array([[1],[3]], dtype=int32)
```

---
### `convert(x, format)`
将输入变量 x 的 data_format 转换为 format 

参数：
- `x : [var_like]` 输入变量
- `format : data_format` 输入变量，[NCHW, NHWC, NC4HW4]

返回：转换后的format

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 8., 1.), [1, 2, 2, 2]) # data_format is NCHW
>>> expr.convert(x, expr.NHWC)
array([[[[0., 4.], [1., 5.]],
       [[2., 6.], [3., 7.]]]], dtype=float32)
```

---
### `transpose(x, perm)`
返回一个转置的数据，转置的维度为perm

参数：
- `x : [var_like]` 输入变量
- `perm : [int] or var_like` 新的维度序列

返回：通过perm转置的数据

返回类型：`Var`

示例：

```python
>>> expr.transpose([[1.,2.,3.],[4.,5.,6.]], [1,0])
array([[1., 4.],
       [2., 5.],
       [3., 6.]], dtype=float32)
```

---
### `channel_shuffle(x, axis)`
做以下操作：
    x = _Convert(x, NHWC);
    x = _Reshape(x, {0, 0, 0, group, -1}, NHWC);
    x = _Transpose(x, {0, 1, 2, 4, 3});
    x = _Reshape(x, {0, 0, 0, -1}, NHWC);
    channel_shuffle_res = _Convert(x, NC4HW4);

参数：
- `x : [var_like]` 输入变量
- `axis : int` 输入变量

返回：

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 8., 1.), [1, 4, 1, 2])
>>> expr.convert(expr.channel_shuffle(x, 2), expr.NCHW)
array([[[[0., 1.]],
        [[4., 5.]],
        [[2., 3.]],
        [[6., 7.]]]], dtype=float32)
```

---
### `reverse_sequence(x, y, batch_dim, seq_dim)`
沿着batch_dim维度对x进行切片并反转维度seq_dim上的y[i]元素

参数：
- `x : var_like` 输入变量
- `y : var_like` 输入变量
- `batch_dim : int` 输入变量，切片的维度
- `seq_dim : int` 输入变量，反转的维度

返回：反转序列的值

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 8., 1.), [2, 4])
>>> expr.reverse_sequence(x, [1, 1], 0, 1)
array([[0., 1., 2., 3.],
       [4., 5., 6., 7.]], dtype=float32)
```

---
### `crop(x, size, axis, offset)`
裁剪输入数据x到size对应的尺寸，通过axis维度，起始点offset

参数：
- `x : var_like` 输入变量，data_format 为 NC4HW4.
- `size : var_like` 返回裁剪的尺寸
- `axis : int` 输入变量，裁剪的维度
- `offset : [int]` 输入变量，裁剪的起始点

返回：裁剪后的数据

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 16., 1.), [1, 1, 4, 4])
>>> x = expr.convert(x, expr.NC4HW4)
>>> size = expr.const([0.0, 0.0, 0.0, 0.0], [1, 1, 2, 2])
>>> expr.convert(expr.crop(x, size, 2, [1, 1]), expr.NCHW)
array([[[[ 5.,  6.],
         [ 9., 10.]]]], dtype=float32)
```

---
### `resize(x, x_scale, y_scale)`
调整输入值x的(高度、宽度)的大小，公式为：(y_scale * height, x_scale * width).

参数：
- `x : var_like` 输入变量
- `x_scale : float` 输入变量，图像高度缩放比例
- `y_scale : float` 输入变量，图像宽度缩放比例

返回：(y_scale * height, x_scale * width)的值

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 4., 1.), [1, 1, 2, 2])
>>> x = expr.convert(x, expr.NC4HW4)
>>> expr.convert(expr.resize(x, size, 2, 2), expr.NCHW)
array([[[[0. , 0.5, 1. , 1. ],
         [1. , 1.5, 2. , 2. ],
         [2. , 2.5, 3. , 3. ],
         [2. , 2.5, 3. , 3. ]]]], dtype=float32)
```

---
### `crop_and_resize(x, boxes, box_ind, crop_size, method=_F.BILINEAR, extrapolation_value=0.)`
从输入图像数据中提取固定大小的切片，并指定插值算法 (method) resize成指定的输出大小(crop_size)

参数：
- `x : var_like` 输入变量，data_format 为 NHWC.
- `boxes : var_like` 输入变量，int类型，需要划分的区域
- `box_ind : var_like` 输入变量，是boxes和x之间的索引
- `crop_size : var_like` 输入变量，表示RoiAlign之后的大小
- `method : Interp_Method` 输入变量，[NEAREST, BILINEAR]，默认是BILINEAR，差值算法
- `extrapolation_value : float` 输入变量，默认为0，外插值，boxes>1时裁剪超出图像范围，自动补齐的填充值

返回：crop_size数据

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 16., 1.), [1, 1, 4, 4])
>>> x = expr.convert(x, expr.NHWC)
>>> boxes = expr.const([0.2, 0.3, 0.4, 0.5], [1, 4])
>>> expr.convert(expr.crop_and_resize(x, boxes, [0], [2, 2]), expr.NHWC)
array([[[[3.3000002],
           [3.9      ]],
           [[5.7000003],
           [6.3      ]]]], dtype=float32)
```

---
### `pad(x, paddings, mode=_F.CONSTANT)`
对输入数x某个维度进行填充或复制

参数：
- `x : var_like` 输入变量
- `paddings : var_like` 输入变量，形状是[x.ndim, 2]，int类型，填充的维度
- `mode : PadValue_Mode` 输入变量，[CONSTANT(填充常数), REFLECT(镜像复制), SYMMETRIC(对称复制)]， 默认为CONSTANT

返回：填充或复制后的数据

返回类型：`Var`

示例：

```python
>>> expr.pad([[1.,2.],[3.,4.]], [[0, 1], [1,2]])
array([[0., 1., 2., 0., 0.],
       [0., 3., 4., 0., 0.],
       [0., 0., 0., 0., 0.]], dtype=float32)
```

---
### `randomuniform(shape, dtype=_F.float, low=0.0, high=1.0, seed0=0, seed1=1)`
用于从均匀分布中输出随机值

参数：
- `shape : axis_like` 输入变量，数据形状
- `dtype : dtype` 输出的类型：[float, double, int, int64, uint8]，默认为float
- `low : float` 输入变量，随机值范围下限，默认为0
- `high : float` 输入变量，随机值范围上限，默认为1
- `seed0 : int` 输入变量，随机因子，默认为0
- `seed1 : int` 输入变量，随机因子，默认为0

返回：随机值

返回类型：`Var`

示例：

```python
>>> expr.pad([[1.,2.],[3.,4.]], [[0, 1], [1,2]])
array([[0., 1., 2., 0., 0.],
       [0., 3., 4., 0., 0.],
       [0., 0., 0., 0., 0.]], dtype=float32)
```

---
### `expand_dims(x, axis)`
给输入数据在axis轴上新增一个维度

参数：
- `x : var_like` 输入变量
- `axis : int or var_like` 输入变量，int类型，指定扩大输入数据形状的维度索引值

返回：新增维度后的数据

返回类型：`Var`

示例：

```python
>>> expr.expand_dims([1.,2.], 0)
array([[1., 2.]], dtype=float32)
```

---
### `rank(x)`
返回输入数据的维度

参数：
- `x : var_like` 输入变量

返回：维度信息

返回类型：`Var`

示例：

```python
>>> expr.rank([[1.,2.],[3.,4.]])
array(2, dtype=int32)
```

---
### `size(x)`
返回输入数据的大小

参数：
- `x : var_like` 输入变量

返回：大小size

返回类型：`Var`

示例：

```python
>>> expr.size([[1.,2.],[3.,4.]])
array(4, dtype=int32)
```

---
### `shape(x)`
返回输入数据的形状


参数：
- `x : var_like` 输入变量

返回：形状

返回类型：`Var`

示例：

```python
>>> expr.shape([[1.,2.],[3.,4.]])
array([2, 2], dtype=int32)
```

---
### `stack(values, axis=0)`
将输入数据x和要沿着axis维度进行拼接

参数：
- `x : var_like` 输入变量
- `axis : int` 输入变量，默认为0，指明对矩阵的哪个维度进行拼接

返回：拼接的数据

返回类型：`Var`

示例：

```python
>>> x = expr.const([1., 2.], [2])
>>> y = expr.const([3., 4.], [2])
>>> expr.stack([x, y])
array([[1., 2.],
       [3., 4.]], dtype=float32)
```

---
### `unstack(x, axis=0)`
将输入数据x沿着axis维度堆叠为r-1级数据

参数：
- `x : var_like` 输入变量
- `axis : int` 输入变量，默认为0，指明对矩阵的哪个维度进行分解

返回：分解的数据

返回类型：`Var`

示例：

```python
>>> expr.unstack([[1., 2.], [3., 4.]])
    [array([1., 2.], dtype=float32), array([3., 4.], dtype=float32)]
```

---
### `fill(shape, value)`
创建一个填充有标量值的数据

参数：
- `shape : var_like` 输入变量，int类型，定义输出张量形状的整数数组
- `value : var_like` 输入变量，一个标量值，用于填充输出数据。

返回：填充有标量值的指定形状的数据

返回类型：`Var`

示例：

```python
>>> expr.fill([2,3], 1.0)
array([[1., 1., 1.],
       [1., 1., 1.]], dtype=float32)
```

---
### `tile(x, multiples)`
返回输入数x在同一维度上重复multiples次的数据

参数：
- `x : var_like` 输入变量
- `multiples : var_like` 输入变量，int类型，同一维度上重复的次数

返回：x重复multiples次的数据

返回类型：`Var`

示例：

```python
>>> expr.tile([2,3], [3])
array([2, 3, 2, 3, 2, 3], dtype=int32)
```

---
### `gather(x, index)`
根据下标返回对应的值

参数：
- `x : var_like` 输入变量
- `index : var_like` 输入变量，int类型，下标索引

返回：`x[index]`的值

返回类型：`Var`

示例：

```python
>>> expr.gather([[1.,2.],[3.,4.]], [1])
array([[3., 4.]], dtype=float32)
```

---
### `gather_nd(x, indices)`
根据indeces描述的索引，在x中提取元素，拼接成一个新的数据

参数：
- `x : var_like` 输入变量
- `indices : var_like` 输入变量，int类型，索引

返回：`x[indices[0], ..., indices[-1]]`

返回类型：`Var`

示例：

```python
>>> expr.gather_nd([[1.,2.],[3.,4.]], [1, 0])
array(3., dtype=float32)
```

---
### `select(cond, x, y)`
返回根据'cond'从'x'或'y'中选择的元素

参数：
- `cond : var_like` 输入变量
- `x : var_like` 输入变量
- `y : var_like` 输入变量

返回：根据条件选中的元素

返回类型：`Var`

示例：

```python
>>> expr.select([1., 0., 2.], [-1., -2., -3.], [1., 2., 3.])
array([-1.,  2., -3.], dtype=float32)
```

---
### `squeeze(x, axes=[])`
删除到指定位置的尺寸为1的新数据

参数：
- `x : var_like` 输入变量
- `axes : axis_like` 输入变量，默认为[]，用来指定要删掉的为1的维度

返回：变换后的数据

返回类型：`Var`

示例：

```python
>>> expr.squeeze([[[1.0, 2.0]]], [0, 1])
array([1., 2.], dtype=float32)
```

---
### `unsqueeze(x, axes=[])`
插入到指定位置的尺寸为1的新数据

参数：
- `x : var_like` 输入变量
- `axes : axis_like` 输入变量，默认为[]，用来指定要增加的为1的维度

返回：变换后的数据

返回类型：`Var`

示例：

```python
>>> expr.unsqueeze([1.0, 2.0], [0, 1])
array([[[1., 2.]]], dtype=float32)
```

---
### `depth_to_space(x, axis)`
将数据从深度重新排列为空间数据块

参数：
- `x : var_like` 输入变量，data_format为NHWC.
- `axis : int` 输入变量，操作的维度

返回：空间数据块

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 12., 1.), [1, 4, 1, 3])
>>> expr.depth_to_space(x, 2)
array([[[[ 0.,  3.,  1.,  4.,  2.,  5.],
         [ 6.,  9.,  7., 10.,  8., 11.]]]], dtype=float32)
```

---
### `space_to_depth(x, axis)`
重新排列空间数据块，进入深度。

参数：
- `x : var_like` 输入变量，data_format为NHWC.
- `axis : int` 输入变量，操作的维度

返回：空间数据块，进入深度

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 16., 1.), [1, 1, 4, 4])
>>> x = expr.convert(x, expr.NHWC)
>>> expr.space_to_depth(x, 2)
array([[[[ 0.,  1.,  4.,  5.],
         [ 2.,  3.,  6.,  7.]],
        [[ 8.,  9., 12., 13.],
         [10., 11., 14., 15.]]]], dtype=float32)
```

---
### `batch_to_space_nd(x, block_shape, crops)`
将给定的 “batch” 从零维重构为具有“block-Shape + [batch]”形状的 “M+1” 维，其中 block-Shape 是参数，batch 是指定的张量。这里根据给定的裁剪数组对 in-between 结果进行裁剪。

参数：
- `x : var_like` 输入变量，data_format为NC4HW4.
- `block_shape : var_like` 输入变量，int类型，一维数组的形状必须为 [M]，因为所有值都必须大于或等于 1
- `crops : var_like` 输入变量，int类型，[M, 2] 的二维数组形状，其​​中所有值必须大于或等于0，这里的crop[i] = [cropStart,cropEnd] 定义了从输入维度 i + 1 裁剪的部分

返回：指定批次的重塑版本的数据

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 12., 1.), [4, 1, 1, 3])
>>> x = expr.convert(x, expr.NC4HW4)
>>> crops = expr.const([0, 0, 0, 0], [2, 2], expr.NCHW, expr.int)
>>> expr.convert(expr.batch_to_space_nd(x, [2, 2], crops), expr.NHWC)
array([[[[ 0.],
         [ 3.],
         [ 1.],
         [ 4.],
         [ 2.],
         [ 5.]],
        [[ 6.],
         [ 9.],
         [ 7.],
         [10.],
         [ 8.],
         [11.]]]], dtype=float32)
```

---
### `space_to_batch_nd(x, block_shape, paddings)`
将指定输入空间的空间维度拆分为块的矩阵，其形状为 blockShape，其中 blockshape 是参数。这里根据指定的填充数组填充空间维度

参数：
- `x : var_like` 输入变量，data_format为NC4HW4.
- `block_shape : var_like` 输入变量，int类型，它是一维数组，必须具有 [M] 的形状，因为所有值必须大于或等于 1
- `paddings : var_like` 输入变量，int类型，一个形状为 [M, 2] 的二维数组，所有值必须大于或等于0。这里 padding 等于 [padStart, padEnd]

返回：指定输入空间的拆分版本的数据

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 12., 1.), [3, 1, 2, 2])
>>> x = expr.convert(x, expr.NC4HW4)
>>> paddings = expr.const([0, 0, 0, 0], [2, 2], expr.NCHW, expr.int)
>>> expr.convert(expr.space_to_batch_nd(x, [2, 2], paddings), expr.NHWC)
array([[[[ 0.]]],
       [[[ 4.]]],
       [[[ 8.]]],
       [[[ 1.]]],
       [[[ 5.]]],
       [[[ 9.]]],
       [[[ 2.]]],
       [[[ 6.]]],
       [[[10.]]],
       [[[ 3.]]],
       [[[ 7.]]],
       [[[11.]]]], dtype=float32)
```

---
### `elu(x, alpha)`
激励函数，主要是为计算图归一化返回结果而引进的非线性部分

参数：
- `x : var_like` 输入变量
- `alpha : float` 输入变量，预定义常量

返回：

返回类型：`Var`

示例：

```python
>>> expr.elu([-1.0, 2.0], 1.673263)
array([-1.0577048,  2.], dtype=float32)
```

---
### `selu(x, scale, alpha)`
比例指数线性单元激活函数

参数：
- `x : var_like` 输入变量
- `scale : float` 输入变量，预定义常量
- `alpha : float` 输入变量，预定义常量

返回：缩放的指数单位激活： scale * elu(x, alpha).

返回类型：`Var`

示例：

```python
>>> expr.selu([-1.0, 2.0], 1.0507, 1.673263)
array([-1.1113304, 2.1014], dtype=float32)
```

---
### `matrix_band_part(x, num_lower, num_upper)`
计算矩阵维度

参数：
- `x : var_like` 输入变量
- `num_lower : var_like` 输入变量，int类型，要保持的对角线的数量，如果为负,则保留整个下三角
- `num_upper : var_like` 输入变量，int类型，要保留的superdiagonals数，如果为负,则保持整个上三角.

返回：返回一个与 x 具有相同的类型且有相同形状的秩为k的数据，提取的带状数据

返回类型：`Var`

示例：

```python
>>> expr.matrix_band_part([[-2., 1.], [-1., 2.]], 1, -1)
array([[-2.,  1.],
       [-1.,  2.]], dtype=float32)
```

---
### `moments(x, axes=[2, 3], shift=None, keep_dims=True)`
用于在指定维度计算均值和方差

参数：
- `x : var_like` 输入变量，data_format为NC4HW4
- `axes : axis_like` 输入变量，int类型，指定计算均值和方差的轴，默认是[2,3]
- `shift : var_like` 输入变量，int类型，未在当前实现中使用，默认是None
- `keep_dims : bool` 输入变量，保持维度，表示产生是否与输入数据具有相同的维度，默认是true

返回：均值和方差

返回类型：`Var`

示例：

```python
>>> x = expr.reshape(expr.range(0., 4., 1.), [1, 1, 2, 2])
>>> x = expr.convert(x, expr.NC4HW4)
>>> expr.moments(x)
[array([[[[1.5]]]], dtype=float32), array([[[[1.25]]]], dtype=float32)]
```

---
### `setdiff1d(x, y)`
返回在x中出现，但是在y中没有出现的的元素

参数：
- `x : var_like` 输入变量
- `y : var_like` 输入变量

返回：在x中出现，但是在y中没有出现的的元素

返回类型：`Var`

示例：

```python
>>> expr.setdiff1d([1, 2, 3], [2, 3, 4])
array([1], dtype=int32)
```

---
### `zeros_like(x)`
把所有元素都置为零

参数：
- `x : var_like` 输入变量

返回：所有元素都为零的张量

返回类型：`Var`

示例：

```python
>>> expr.zeros_like([[1, 2], [3, 4]])
array([[0, 0],
       [0, 0]], dtype=int32)
```

---
### `range(start, limit, delta)`
创建数字序列变量

参数：
- `start : var_like` 输入变量，int类型，表示范围的起始编号
- `limit : var_like` 输入变量，int类型，最大编号限制，并且不包括在内
- `delta : var_like` 输入变量，int类型，增量

返回：数字序列变量

返回类型：`Var`

示例：

```python
>>> expr.range(1.0, 7.0, 2.0)
array([1., 3., 5.], dtype=float32)
```

---
### `sort(x, axis=-1, arg=False, descend=False)`
排序

参数：
- `x : var_like` 输入变量
- `axis : int` 输入变量，int类型
- `arg : bool` 输入变量，是否返回排序元素的index， 默认为false
- `descend : bool` 输入变量，true代表倒序，false代表正序，默认为false

返回：排序结果

返回类型：`Var`

示例：

```python
>>> expr.sort([[5, 0], [1, 3]])
array([[1, 0],
       [5, 3]], dtype=int32)
```

---
### `nms(boxes, scores, max_detections, iou_threshold=-1.0, score_threshold=-1.0)`
非极大值抑制算法，搜索局部极大值，抑制非极大值元素

参数：
- `boxes : var_like` 输入变量，形状必须为[num, 4]
- `scores : var_like` 输入变量，float类型的大小为[num_boxes]代表上面boxes的每一行，对应的每一个box的一个score
- `max_detections : int` 输入变量，一个整数张量，代表最多可以利用NMS选中多少个边框
- `iou_threshold : float` 输入变量，IOU阙值展示的是否与选中的那个边框具有较大的重叠度，默认为0
- `score_threshold : float` 输入变量，默认为float_min，来决定什么时候删除这个边框

返回：搜索局部极大值，抑制非极大值元素

返回类型：`Var`

示例：

```python
>>> expr.nms([[1, 1, 4, 4], [0, 0, 3, 3], [5, 5, 7, 7]], [0.9, 0.5, 0.1], 3, 0.1)
array([0, 2], dtype=int32)
array([5., 4.5])
```

---
### `raster(vars, region, shape)`
使用`Raster`创建一个映射关系，`Raster`是表示内存映射的元算子；
`region`使用`[int]`来描述；其表示了从`var`到结果的内存映射关系，对应的C++数据结构如下：
```cpp
struct View {
    int32_t offset = 0;
    int32_t stride[3] = {1, 1, 1};
};

struct Region {
    View src;
    View dst;
    int32_t size[3] = {1, 1, 1};
};
```
在Python中使用11个`int`来表示Region，顺序为：`src_offset, src_stride[3], dst_offset, dst_stride[3], size[3]`；多个region则继续增加int数目，总数目应该为11的倍数；并且region的数目应该与vars的数目相等

参数：
- `var : [Var]` 输入变量，内存映射的数据来源
- `region : [int]` 表示内存映射关系
- `shape : [int]` 输出变量的形状

返回：内存映射后的变量

返回类型：`Var`

示例：

```python
>>> var = expr.const([1., 2., 3. ,4.], [2, 2])
>>> expr.raster([var], [0, 4, 1, 2, 0, 4, 2, 1, 1, 2, 2], [2, 2]) # do transpose
array([[1., 3.],
       [2., 4.]], dtype=float32)
```

---
### `histogram(input, binNum, minVal, maxVal)`
计算输入变量在指定范围内的直方图分布

参数：
- `input : var_like` 输入变量
- `binNum : int` 直方图桶的个数
- `minVal : int` 直方图计算的最小值
- `maxVal : int` 直方图计算的最大值

返回：直方图统计结果

返回类型：`Var`

示例：

```python
>>> expr.histogram(expr.range(0., 10.0, 1.0), 5, 1, 9)
array([2., 2., 1., 2., 2.], dtype=float32)
```

---
### `detection_post_process(encode_boxes, class_predictions, anchors, num_classes, max_detections, max_class_per_detection, detections_per_class, nms_threshold, iou_threshold, use_regular_nms, centersize_encoding)`
SSD检测模型后处理函数

参数：
- `encode_boxes : Var` 检测框坐标
- `class_predictions : Var` 分类结果概率
- `anchors : Var` 锚点
- `num_classes : int` 分类个数
- `max_detections : int` 最大检测值
- `max_class_per_detection : int` 每个检测的最大种类
- `detections_per_class : int` 每个类别的检测结果
- `nms_threshold : float` nms阈值
- `iou_threshold : float` iou阈值
- `use_regular_nms : bool` 是否使用常规nms，目前仅支持`False`
- `centersize_encoding : [float]` 中心尺寸编码

返回：后处理结果

返回类型：`Var`