1# NNRt (V2_0)
2
3
4## 概述
5
6Neural Network Runtime(NNRt, 神经网络运行时)是面向AI领域的跨芯片推理计算运行时,作为中间桥梁连通上层AI推理框架和底层加速芯片,实现AI模型的跨芯片推理计算。提供统一AI芯片驱动接口,实现AI芯片驱动接入OpenHarmony。
7
8**起始版本:** 3.2
9
10
11## 汇总
12
13
14### 文件
15
16| 名称 | 描述 |
17| -------- | -------- |
18| [INnrtDevice.idl](_i_nnrt_device_8idl_v20.md) | 该文件定义芯片设备相关的接口。 |
19| [IPreparedModel.idl](_i_prepared_model_8idl_v20.md) | 该文件定义了AI模型推理、获取模型输入tensor维度范围、导出编译后模型等接口。 |
20| [ModelTypes.idl](_model_types_8idl_v20.md) | 该文件定义AI模型相关的结构体。 |
21| [NnrtTypes.idl](_nnrt_types_8idl_v20.md) | 该文件定义了HDI接口中用到的类型。 |
22| [NodeAttrTypes.idl](_node_attr_types_8idl_v20.md) | 该文件定义AI模型算子的参数和功能。 |
23
24
25### 类
26
27| 名称 | 描述 |
28| -------- | -------- |
29| interface  [INnrtDevice](interface_i_nnrt_device_v20.md) | 定义了与设备相关的接口,实现设备管理和模型编译等操作。 |
30| interface  [IPreparedModel](interface_i_prepared_model_v20.md) | NNRt模块的包路径。 |
31| struct  [Tensor](_tensor_v20.md) | 张量结构体。 |
32| struct  [Node](_node_v20.md) | 算子节点结构体。 |
33| struct  [SubGraph](_sub_graph_v20.md) | 子图结构体。 |
34| struct  [Model](_model_v20.md) | 模型结构体。 |
35| struct  [SharedBuffer](_shared_buffer_v20.md) | 共享内存数据的结构体。 |
36| struct  [ModelConfig](_model_config_v20.md) | 定义编译模型需要的参数配置。 |
37| struct  [QuantParam](_quant_param_v20.md) | 量化参数结构体。 |
38| struct  [IOTensor](_i_o_tensor_v20.md) | AI模型的输入输出张量。 |
39| struct  [Activation](_activation_v20.md) | 激活类型的算子,所有的激活函数都属于该算子,具体的激活函数类型一句参数来确定。 |
40| struct  [AddFusion](_add_fusion_v20.md) | 输入Tensor逐元素相加, 输出x和y的和,数据形状与输入broadcast之后一样,数据类型与较高精度的输入精度一致。 |
41| struct  [ArgMaxFusion](_arg_max_fusion_v20.md) | 返回跨轴的tensor前K个索引或者是数值。 |
42| struct  [AvgPoolFusion](_avg_pool_fusion_v20.md) | 在输入tensor上应用 2D 平均池化。支持int8量化输入。 |
43| struct  [BatchToSpaceND](_batch_to_space_n_d_v20.md) | 将一个4维tensor的batch维度按block_shape切分成小块,并将这些小块拼接到空间维度。 |
44| struct  [BiasAdd](_bias_add_v20.md) | 对给出的输入张量上的各个维度方向上的数据进行偏置。 |
45| struct  [Cast](_cast_v20.md) | 根据输出张量的类型对张量数据类型进行转换。 |
46| struct  [Concat](_concat_v20.md) | 在指定轴上连接张量,将输入张量按给定的轴连接起来。 |
47| struct  [Conv2DFusion](_conv2_d_fusion_v20.md) | 对将4维的tensor执行带有偏置的二维卷积运算。 |
48| struct  [Conv2dTransposeFusion](_conv2d_transpose_fusion_v20.md) | 对一个4维的tensor执行带有偏置的二维反卷积。 |
49| struct  [DivFusion](_div_fusion_v20.md) | 将两个tensor执行除法运算。 |
50| struct  [Eltwise](_eltwise_v20.md) | 元素级别操作的算子。 |
51| struct  [ExpandDims](_expand_dims_v20.md) | 在给定轴上为tensor添加一个额外的维度。 |
52| struct  [Fill](_fill_v20.md) | 根据指定的维度,创建由一个标量填充的tensor。 |
53| struct  [FullConnection](_full_connection_v20.md) | 对输入数据做全连接。 |
54| struct  [FusedBatchNorm](_fused_batch_norm_v20.md) | 对一个tensor进行批标准化的运算。 |
55| struct  [Gather](_gather_v20.md) | 根据指定的索引和轴返回输入tensor的切片。 |
56| struct  [LayerNormFusion](_layer_norm_fusion_v20.md) | 对一个tensor从某一axis开始做层归一化。 |
57| struct  [LessEqual](_less_equal_v20.md) | 对输入x1和x2,计算每对元素的x1<=x2的结果。 |
58| struct  [MatMulFusion](_mat_mul_fusion_v20.md) | 对输入x1和x2,计算x1和x2的内积。 |
59| struct  [Maximum](_maximum_v20.md) | 对输入x1和x2,计算x1和x2对应元素最大值,x1和x2的输入遵守隐式类型转换规则,使数据类型一致。 |
60| struct  [MaxPoolFusion](_max_pool_fusion_v20.md) | 对输入x,计算 2D 最大值池化。 |
61| struct  [MulFusion](_mul_fusion_v20.md) | 对输入x1和x2,将x1和x2相同的位置的元素相乘得到output。 |
62| struct  [OneHot](_one_hot_v20.md) | 根据indices指定的位置,生成一个由one-hot向量构成的tensor。 |
63| struct  [PadFusion](_pad_fusion_v20.md) | 在x指定维度的数据前后,添加指定数值进行增广。 |
64| struct  [PowFusion](_pow_fusion_v20.md) | 求x的y次幂,输入必须是两个tensor或一个tensor和一个标量。 |
65| struct  [PReLUFusion](_p_re_l_u_fusion_v20.md) | 计算x和weight的PReLU激活值。 |
66| struct  [QuantDTypeCast](_quant_d_type_cast_v20.md) | 数据类型转换。 |
67| struct  [ReduceFusion](_reduce_fusion_v20.md) | 减小x张量的维度。 |
68| struct  [Reshape](_reshape_v20.md) | 根据inputShape调整input的形状。 |
69| struct  [Resize](_resize_v20.md) | 按给定的参数对输入的张量进行变形。 |
70| struct  [Rsqrt](_rsqrt_v20.md) | 求x的平方根的倒数。 |
71| struct  [ScaleFusion](_scale_fusion_v20.md) | 给定一个tensor,计算其缩放后的值。 |
72| struct  [Shape](_shape_v20.md) | 输出输入tensor的形状。 |
73| struct  [SliceFusion](_slice_fusion_v20.md) | 在x各维度,在axes维度中,以begin为起点,截取size长度的切片。 |
74| struct  [Softmax](_softmax_v20.md) | 给定一个tensor,计算其softmax结果。 |
75| struct  [SpaceToBatchND](_space_to_batch_n_d_v20.md) | 将4维张量在空间维度上进行切分成多个小块,然后在batch维度上拼接这些小块。 |
76| struct  [Split](_split_v20.md) | 算子沿 axis 维度将x拆分成多个张量,张量数量由outputNum指定。 |
77| struct  [Sqrt](_sqrt_v20.md) | 给定一个tensor,计算其平方根。 |
78| struct  [SquaredDifference](_squared_difference_v20.md) | 计算两个输入的差值并返回差值的平方。SquaredDifference算子支持tensor和tensor相减。 |
79| struct  [Squeeze](_squeeze_v20.md) | 去除axis中,长度为1的维度。支持int8量化输入。 |
80| struct  [Stack](_stack_v20.md) | 将一组tensor沿axis维度进行堆叠,堆叠前每个tensor的维数为n,则堆叠后output维数为n+1。 |
81| struct  [StridedSlice](_strided_slice_v20.md) | 根据步长和索引对输入张量进行切片提取。 |
82| struct  [SubFusion](_sub_fusion_v20.md) | 计算两个输入的差值。 |
83| struct  [TileFusion](_tile_fusion_v20.md) | 以multiples指定的次数拷贝输入张量。 |
84| struct  [TopKFusion](_top_k_fusion_v20.md) | 查找沿axis轴的前K个最大值和对应索引。 |
85| struct  [Transpose](_transpose_v20.md) | 根据perm对x进行数据重排。 |
86| struct  [Unsqueeze](_unsqueeze_v20.md) | 根据输入axis的值。增加一个维度。 |
87
88
89### 枚举
90
91| 名称 | 描述 |
92| -------- | -------- |
93| [DeviceType](#devicetype) : int { OTHER , CPU , GPU , ACCELERATOR } | AI计算芯片的类型。 |
94| [DeviceStatus](#devicestatus) : int { AVAILABLE , BUSY , OFFLINE , UNKNOWN } | 用于AI计算芯片的状态。 |
95| [PerformanceMode](#performancemode) : int {<br/>PERFORMANCE_NONE , PERFORMANCE_LOW , PERFORMANCE_MEDIUM , PERFORMANCE_HIGH , PERFORMANCE_EXTREME<br/>} | 芯片执行AI计算的性能模式。 |
96| [Priority](#priority) : int { PRIORITY_NONE , PRIORITY_LOW , PRIORITY_MEDIUM , PRIORITY_HIGH } | AI计算任务的优先级。 |
97| [Format](#format) : byte { FORMAT_NONE = -1 , FORMAT_NCHW = 0 , FORMAT_NHWC = 1 } | 算子数据排布。需要配合[Tensor](_tensor_v20.md)使用。 |
98| [DataType](#datatype) : byte {<br/>DATA_TYPE_UNKNOWN = 0 , DATA_TYPE_BOOL = 30 , DATA_TYPE_INT8 = 32 , DATA_TYPE_INT16 = 33 , DATA_TYPE_INT32 = 34 , DATA_TYPE_INT64 = 35 , DATA_TYPE_UINT8 = 37 , DATA_TYPE_UINT16 = 38 , DATA_TYPE_UINT32 = 39 , DATA_TYPE_UINT64 = 40 , DATA_TYPE_FLOAT16 = 42 , DATA_TYPE_FLOAT32 = 43 , DATA_TYPE_FLOAT64 = 44<br/>} | 张量的数据类型。需要配合[Tensor](_tensor_v20.md)使用。 |
99| [QuantType](#quanttype) : byte { QUANT_TYPE_NONE , QUANT_TYPE_ALL } | 量化类型。需要配合[Node](_node_v20.md)使用。 |
100| [NodeType](#nodetype) : unsigned int {<br/>NODE_TYPE_NONE = 0 , NODE_TYPE_ACTIVATION = 2 , NODE_TYPE_ADD_FUSION = 5 , NODE_TYPE_ARGMAX_FUSION = 11 , NODE_TYPE_AVGPOOL_FUSION = 17 , NODE_TYPE_BATCH_TO_SPACE_ND = 22 , NODE_TYPE_BIAS_ADD = 23 , NODE_TYPE_CAST = 28 , NODE_TYPE_CONCAT = 31 , NODE_TYPE_CONV2D_FUSION = 35 , NODE_TYPE_CONV2D_TRANSPOSE_FUSION = 36 , NODE_TYPE_DIV_FUSION = 47 , NODE_TYPE_ELTWISE = 52 , NODE_TYPE_EXPAND_DIMS = 56 , NODE_TYPE_FILL = 66 , NODE_TYPE_FULL_CONNECTION = 67 ,<br/>NODE_TYPE_FUSED_BATCH_NORM = 68 , NODE_TYPE_GATHER = 69 , NODE_TYPE_LAYER_NORM_FUSION = 75 , NODE_TYPE_LESS_EQUAL = 78 ,<br/>NODE_TYPE_MATMUL_FUSION = 89 , NODE_TYPE_MAXIMUM = 90 , NODE_TYPE_MAX_POOL_FUSION = 92 , NODE_TYPE_MUL_FUSION = 99 ,<br/>NODE_TYPE_ONE_HOT = 105 , NODE_TYPE_PAD_FUSION = 107 , NODE_TYPE_POW_FUSION = 110 , NODE_TYPE_PRELU_FUSION = 112 ,<br/>NODE_TYPE_QUANT_DTYPE_CAST = 113 , NODE_TYPE_REDUCE_FUSION = 118 , NODE_TYPE_RESHAPE = 119 , NODE_TYPE_RESIZE = 120 ,<br/>NODE_TYPE_RSQRT = 126 , NODE_TYPE_SCALE_FUSION = 127 , NODE_TYPE_SHAPE = 130 , NODE_TYPE_SLICE_FUSION = 135 ,<br/>NODE_TYPE_SOFTMAX = 138 , NODE_TYPE_SPACE_TO_BATCH_ND = 141 , NODE_TYPE_SPLIT = 145 , NODE_TYPE_SQRT = 146 ,<br/>NODE_TYPE_SQUEEZE = 147 , NODE_TYPE_SQUARED_DIFFERENCE = 149 , NODE_TYPE_STACK = 150 , NODE_TYPE_STRIDED_SLICE = 151 ,<br/>NODE_TYPE_SUB_FUSION = 152 , NODE_TYPE_TILE_FUSION = 160 , NODE_TYPE_TOPK_FUSION = 161 , NODE_TYPE_TRANSPOSE = 162 , NODE_TYPE_UNSQUEEZE = 165<br/>} | 算子类型。 |
101| [ResizeMethod](#resizemethod) : byte { RESIZE_METHOD_UNKNOWN = -1 , RESIZE_METHOD_LINEAR = 0 , RESIZE_METHOD_NEAREST = 1 , RESIZE_METHOD_CUBIC = 2 } | 调整尺寸的方法。需要配合[Resize](_resize_v20.md)算子使用。 |
102| [CoordinateTransformMode](#coordinatetransformmode) : byte { COORDINATE_TRANSFORM_MODE_ASYMMETRIC = 0 , COORDINATE_TRANSFORM_MODE_ALIGN_CORNERS = 1 , COORDINATE_TRANSFORM_MODE_HALF_PIXEL = 2 } | 坐标变换模式,仅[Resize](_resize_v20.md)算子使用这些枚举。 以变换 Width 为例, 记 new_i 为resize之后的Tenosr沿x轴的第i个坐标; 记 old_i 为输入Tensor沿x的轴的对应坐标; 记 newWidth 是resize之后的Tensor沿着x的轴的长度; 记 oldWidth 是输入tensor沿x的轴的长度。 可以通过下面的公式计算出 old_i : |
103| [NearestMode](#nearestmode) : byte {<br/>NEAREST_MODE_NORMAL = 0 , NEAREST_MODE_ROUND_HALF_DOWN = 1 , NEAREST_MODE_ROUND_HALF_UP = 2 , NEAREST_MODE_FLOOR = 3 , NEAREST_MODE_CEIL = 4<br/>} | 临近算法类型。需要配合[Resize](_resize_v20.md)算子使用。 |
104| [ActivationType](#activationtype) : byte {<br/>ACTIVATION_TYPE_NO_ACTIVATION = 0 , ACTIVATION_TYPE_RELU = 1 , ACTIVATION_TYPE_SIGMOID = 2 , ACTIVATION_TYPE_RELU6 = 3 , ACTIVATION_TYPE_ELU = 4 , ACTIVATION_TYPE_LEAKY_RELU = 5 , ACTIVATION_TYPE_ABS = 6 , ACTIVATION_TYPE_RELU1 = 7 , ACTIVATION_TYPE_SOFTSIGN = 8 , ACTIVATION_TYPE_SOFTPLUS = 9 , ACTIVATION_TYPE_TANH = 10 , ACTIVATION_TYPE_SELU = 11 , ACTIVATION_TYPE_HSWISH = 12 , ACTIVATION_TYPE_HSIGMOID = 13 , ACTIVATION_TYPE_THRESHOLDRELU = 14 , ACTIVATION_TYPE_LINEAR = 15 , ACTIVATION_TYPE_HARD_TANH = 16 , ACTIVATION_TYPE_SIGN = 17 , ACTIVATION_TYPE_SWISH = 18 , ACTIVATION_TYPE_GELU = 19 , ACTIVATION_TYPE_UNKNOWN = 20<br/>} | 激活函数类型。激活函数使得神经网络模型具有区分非线性函数的能力,这也让神经网络模型可以被应用于众多非线性模型中。 [NodeAttrTypes.idl](_node_attr_types_8idl_v20.md)文件中拥有ActivationType类型的参数的算子会在运行完成算子的运算之后执行相对应的激活函数。 |
105| [ReduceMode](#reducemode) : byte {<br/>REDUCE_MODE_MEAN = 0 , REDUCE_MODE_MAX = 1 , REDUCE_MODE_MIN = 2 , REDUCE_MODE_PROD = 3 , REDUCE_MODE_SUM = 4 , REDUCE_MODE_SUM_SQUARE = 5 , REDUCE_MODE_ASUM = 6 , REDUCE_MODE_ALL = 7<br/>} | 用于维度移除的方法,需要配合[ReduceFusion](_reduce_fusion_v20.md)算子使用。 |
106| [EltwiseMode](#eltwisemode) : byte { ELTWISE_MODE_PROD = 0 , ELTWISE_MODE_SUM = 1 , ELTWISE_MODE_MAXIMUM = 2 , ELTWISE_MODE_UNKNOWN = 3 } | 元素级别运算支持的计算类型,需要配合[Eltwise](_eltwise_v20.md)算子使用。 |
107| [PadMode](#padmode) : byte { PAD_MODE_PAD = 0 , PAD_MODE_SAME = 1 , PAD_MODE_VALID = 2 } | 填充类型,需要配合[AvgPoolFusion](_avg_pool_fusion_v20.md),[AvgPoolFusion](_avg_pool_fusion_v20.md),[Conv2DFusion](_conv2_d_fusion_v20.md),[MaxPoolFusion](_max_pool_fusion_v20.md)使用。 |
108| [RoundMode](#roundmode) : byte { ROUND_MODE_FLOOR = 0 , ROUND_MODE_CEIL = 1 } | 小数取整算法,需要配合[AvgPoolFusion](_avg_pool_fusion_v20.md)算子使用。 |
109| [PaddingMode](#paddingmode) : byte { PADDING_MODE_CONSTANT = 0 , PADDING_MODE_REFLECT = 1 , PADDING_MODE_SYMMETRIC = 2 , PADDING_MODE_RESERVED = 3 } | 填充类型,需要配合[PadFusion](_pad_fusion_v20.md)算子使用。 |
110| [NNRT_ReturnCode](#nnrt_returncode) : int {<br/>NNRT_SUCCESS = 0 , NNRT_FAILED = 1 , NNRT_NULL_PTR = 2 , NNRT_INVALID_PARAMETER = 3 ,<br/>NNRT_MEMORY_ERROR = 4 , NNRT_OUT_OF_MEMORY = 5 , NNRT_OPERATION_FORBIDDEN = 6 , NNRT_INVALID_FILE = 7 ,<br/>NNRT_INVALID_PATH = 8 , NNRT_INSUFFICIENT_BUFFER = 9 , NNRT_NO_CHANGE = 10 , NNRT_NOT_SUPPORT = 11 ,<br/>NNRT_SERVICE_ERROR = 12 , NNRT_DEVICE_ERROR = 13 , NNRT_DEVICE_BUSY = 14 , NNRT_CANCELLED = 15 ,<br/>NNRT_PERMISSION_DENIED = 16 , NNRT_TIME_OUT = 17 , NNRT_INVALID_TENSOR = 18 , NNRT_INVALID_NODE = 19 ,<br/>NNRT_INVALID_INPUT = 20 , NNRT_INVALID_OUTPUT = 21 , NNRT_INVALID_DATATYPE = 22 , NNRT_INVALID_FORMAT = 23 ,<br/>NNRT_INVALID_TENSOR_NAME = 24 , NNRT_INVALID_SHAPE = 25 , NNRT_OUT_OF_DIMENTION_RANGES = 26 , NNRT_INVALID_BUFFER = 27 ,<br/>NNRT_INVALID_BUFFER_SIZE = 28 , NNRT_INVALID_PERFORMANCE_MODE = 29 , NNRT_INVALID_PRIORITY = 30 , NNRT_INVALID_MODEL = 31 ,<br/>NNRT_INVALID_MODEL_CACHE = 32 , NNRT_UNSUPPORTED_OP = 33<br/>} | NNRt定义的专用错误码,为HDI接口的返回值。 |
111
112
113## 枚举类型说明
114
115
116### ActivationType
117
118```
119enum ActivationType : byte
120```
121
122**描述**
123
124
125激活函数类型。激活函数使得神经网络模型具有区分非线性函数的能力,这也让神经网络模型可以被应用于众多非线性模型中。 [NodeAttrTypes.idl](_node_attr_types_8idl_v20.md)文件中拥有ActivationType类型的参数的算子会在运行完成算子的运算之后执行相对应的激活函数。
126
127**起始版本:** 3.2
128
129| 枚举值 | 描述 |
130| -------- | -------- |
131| ACTIVATION_TYPE_NO_ACTIVATION | 无激活函数。 |
132| ACTIVATION_TYPE_RELU | ReLU激活函数。逐元素求$ max(x_i, 0) $,负数输出值会被修改为0,正数输出不受影响。<br/>$ \text{ReLU}(x_i) = (x_i)^+ = \max(x_i, 0),$<br/>其中$ x_i $是输入元素。 |
133| ACTIVATION_TYPE_SIGMOID | Sigmoid激活函数。按元素计算Sigmoid激活函数。Sigmoid函数定义为:<br/>$ \text{Sigmoid}(x_i) = \frac{1}{1 + \exp(-x_i)} $<br/>其中$ x_i $是输入的元素。 |
134| ACTIVATION_TYPE_RELU6 | ReLU6激活函数。ReLU6类似于ReLU,不同之处在于设置了上限,其上限为6,如果输入大于6,输出会被限制为6。ReLU6函数定义为:<br/>$ \text{ReLU6}(x_i) = \min(\max(0, x_i), 6) $<br/>其中$ x_i $是输入的元素。 |
135| ACTIVATION_TYPE_ELU | 指数线性单元激活函数(Exponential Linear Unit activation function,ELU)激活函数。对输入的每个元素计算ELU。ELU函数定义为:<br/>$ ELU(x_{i}) = \begin{cases} x_i, &amp;\text{if } x_i \geq 0; \cr \alpha \* (\exp(x_i) - 1), &amp;\text{otherwise.} \end{cases} $<br/>其中,$ x_i $表示输入的元素,$ \alpha $表示alpha参数,该参数通过[Activation](_activation_v20.md)进行设置。 |
136| ACTIVATION_TYPE_LEAKY_RELU | LeakyReLU激活函数。 LeakyReLU函数定义为:<br/>$ \text{LeakyReLU}(x_i) = \begin{cases} x_i, &amp;\text{if } x_i \geq 0; \cr {\alpha} \* x_i, &amp;\text{otherwise.} \end{cases}$<br/>其中,$ x_i $表示输入的元素,$ \alpha $表示alpha参数,该参数通过[Activation](_activation_v20.md)进行设置。 |
137| ACTIVATION_TYPE_ABS | 计算绝对值的激活函数。函数定义为:<br/>$ \text{abs}(x_i) = \|x_i\| $<br/>其中,$ x_i $表示输入的元素。 |
138| ACTIVATION_TYPE_RELU1 | ReLU1激活函数。ReLU1函数定义为:<br/>$ \text{ReLU1}(x_i)= \min(\max(0, x_i), 1) $<br/>其中,$ x_i $表示输入的元素。 |
139| ACTIVATION_TYPE_SOFTSIGN | SoftSign激活函数。SoftSign函数定义如下:<br/>$ \text{SoftSign}(x_i) = \frac{x_i}{1 + \|x_i\|} $<br/>其中,$ x_i $表示输入的元素。 |
140| ACTIVATION_TYPE_SOFTPLUS | Softplus激活函数。Softplus为ReLU函数的平滑近似。可对一组数值使用来确保转换后输出结果均为正值。Softplus函数定义如下:<br/>$ \text{Softplus}(x_i) = \log(1 + \exp(x_i)) $<br/>其中,$ x_i $表示输入的元素。 |
141| ACTIVATION_TYPE_TANH | Tanh激活函数。Tanh函数定义如下:<br/>$ tanh(x) = \frac{\exp(x_i) - \exp(-x_i)}{\exp(x_i) + \exp(-x_i)} = \frac{\exp(2x_i) - 1}{\exp(2x_i) + 1} $<br/>其中,$ x_i $表示输入的元素。 |
142| ACTIVATION_TYPE_SELU | SELU(Scaled exponential Linear Unit)激活函数。SELU函数定义如下:<br/>$ SELU(x_{i}) = scale \* \begin{cases} x_{i}, &amp;\text{if } x_{i} \geq 0; \cr \text{alpha} \* (\exp(x_i) - 1), &amp;\text{otherwise.} \end{cases} $<br/>其中,$ x_i $是输入元素,$ \alpha $和$ scale $是预定义的常量( $\alpha=1.67326324$,$scale=1.05070098$)。 |
143| ACTIVATION_TYPE_HSWISH | Hard Swish激活函数。<br/>$ \text{Hardswish}(x_{i}) = x_{i} \* \frac{ReLU6(x_{i} + 3)}{6} $<br/>其中,$ x_i $表示输入的元素。 |
144| ACTIVATION_TYPE_HSIGMOID | Hard Sigmoid激活函数。 Hard Sigmoid函数定义如下:<br/>$ \text{Hardsigmoid}(x_{i}) = max(0, min(1, \frac{x_{i} + 3}{6})) $<br/>其中,$ x_i $表示输入的元素。 |
145| ACTIVATION_TYPE_THRESHOLDRELU | ThresholdedReLU激活函数。类似ReLU激活函数,min数定义如下:<br/>$ \text{ThresholdedReLU}(x_i) = \min(\max(0, x_i), t) $<br/>其中,$ x_i $是输入元素,$ t $是最大值。 |
146| ACTIVATION_TYPE_LINEAR | Linear激活函数。Linear函数定义如下:<br/>$ \text{Linear}(x_i) = x_i $<br/>其中,$ x_i $表示输入的元素。 |
147| ACTIVATION_TYPE_HARD_TANH | HardTanh激活函数。HardTanh函数定义如下:<br/>$ \text{HardTanh}(x_i) = \begin{cases} \text{max_val} &amp; \text{ if } x_i &gt; \text{ max_val } \\ \text{min_val} &amp; \text{ if } x_i &lt; \text{ min_val } \\ x_i &amp; \text{ otherwise } \\ \end{cases} $<br/>其中,$ x_i $是输入,$ max\_val $是最大值,$ min\_val $是最小值,这两个参数通过[Activation](_activation_v20.md)进行设置。 |
148| ACTIVATION_TYPE_SIGN | Sign激活函数。Sign函数定义如下:<br/>$ Sign(x_i) = \begin{cases} -1, &amp;if\ x_i &lt; 0 \cr 0, &amp;if\ x_i = 0 \cr 1, &amp;if\ x_i &gt; 0\end{cases} $<br/>其中,$ x_i $表示输入的元素。 |
149| ACTIVATION_TYPE_SWISH | Swish激活函数。Swish激活函数定义如下:<br/>$ \text{Swish}(x_i) = x_i \* Sigmoid(x_i) $<br/>其中,$ x_i $表示输入的元素。 |
150| ACTIVATION_TYPE_GELU | GELU(Gaussian error linear unit activation function)高斯误差线性单元激活函数。GELU函数定义如下:<br/>$ GELU(x_i) = x_i\*P(X &lt; x_i) $<br/>其中,$ x_i $是输入元素,$ P $是标准高斯分布的累积分布函数。需要通过[Activation](_activation_v20.md)的approximate参数指定是否使用近似。 |
151| ACTIVATION_TYPE_UNKNOWN | 未知 |
152
153
154### CoordinateTransformMode
155
156```
157enum CoordinateTransformMode : byte
158```
159
160**描述**
161
162
163坐标变换模式,仅[Resize](_resize_v20.md)算子使用这些枚举。 以变换 Width 为例, 记 new_i 为resize之后的Tenosr沿x轴的第i个坐标; 记 old_i 为输入Tensor沿x的轴的对应坐标; 记 newWidth 是resize之后的Tensor沿着x的轴的长度; 记 oldWidth 是输入tensor沿x的轴的长度。 可以通过下面的公式计算出 old_i :
164
165- COORDINATE_TRANSFORM_MODE_ASYMMETRIC:
166  $ old_i = newWidth != 0 ? new_i \* oldWidth / newWidth : 0 $
167
168- COORDINATE_TRANSFORM_MODE_ALIGN_CORNERS:
169  $ old_i = newWidth != 1 ? new_i \* (oldWidth - 1) / (newWidth - 1) $
170
171- COORDINATE_TRANSFORM_MODE_HALF_PIXEL:
172  $ old_i = newWidth &gt; 1 ? (new_x + 0.5) \* oldWidth / newWidth - 0.5 : 0 $
173
174**起始版本:** 3.2
175
176| 枚举值 | 描述 |
177| -------- | -------- |
178| COORDINATE_TRANSFORM_MODE_ASYMMETRIC | 不进行对齐,直接按照比例缩放 |
179| COORDINATE_TRANSFORM_MODE_ALIGN_CORNERS | 对齐图像的4个角 |
180| COORDINATE_TRANSFORM_MODE_HALF_PIXEL | 对齐像素点中心 |
181
182
183### DataType
184
185```
186enum DataType : byte
187```
188
189**描述**
190
191
192张量的数据类型。需要配合[Tensor](_tensor_v20.md)使用。
193
194**起始版本:** 3.2
195
196| 枚举值 | 描述 |
197| -------- | -------- |
198| DATA_TYPE_UNKNOWN | 数据类型未知 |
199| DATA_TYPE_BOOL | 数据类型是BOOL |
200| DATA_TYPE_INT8 | 数据类型是INT8 |
201| DATA_TYPE_INT16 | 数据类型是INT16 |
202| DATA_TYPE_INT32 | 数据类型是INT32 |
203| DATA_TYPE_INT64 | 数据类型是INT64 |
204| DATA_TYPE_UINT8 | 数据类型是UINT8 |
205| DATA_TYPE_UINT16 | 数据类型是UINT16 |
206| DATA_TYPE_UINT32 | 数据类型是UINT32 |
207| DATA_TYPE_UINT64 | 数据类型是UINT64 |
208| DATA_TYPE_FLOAT16 | 数据类型是FLOAT16 |
209| DATA_TYPE_FLOAT32 | 数据类型是FLOAT32 |
210| DATA_TYPE_FLOAT64 | 数据类型是FLOAT64 |
211
212
213### DeviceStatus
214
215```
216enum DeviceStatus : int
217```
218
219**描述**
220
221
222用于AI计算芯片的状态。
223
224**起始版本:** 3.2
225
226| 枚举值 | 描述 |
227| -------- | -------- |
228| AVAILABLE | 芯片当前处于可用状态 |
229| BUSY | 芯片当前处于忙碌状态,可能无法及时响应计算任务 |
230| OFFLINE | 芯片当前处于下线状态,无法响应计算任务 |
231| UNKNOWN | 芯片当前处于未知状态 |
232
233
234### DeviceType
235
236```
237enum DeviceType : int
238```
239
240**描述**
241
242
243AI计算芯片的类型。
244
245**起始版本:** 3.2
246
247| 枚举值 | 描述 |
248| -------- | -------- |
249| OTHER | 不属于以下类型的芯片 |
250| CPU | CPU芯片 |
251| GPU | GPU芯片 |
252| ACCELERATOR | AI专用加速芯片,比如NPU、DSP |
253
254
255### EltwiseMode
256
257```
258enum EltwiseMode : byte
259```
260
261**描述**
262
263
264元素级别运算支持的计算类型,需要配合[Eltwise](_eltwise_v20.md)算子使用。
265
266**起始版本:** 3.2
267
268| 枚举值 | 描述 |
269| -------- | -------- |
270| ELTWISE_MODE_PROD | 两个tensor对应元素乘积。 |
271| ELTWISE_MODE_SUM | 两个tensor对应元素之差。 |
272| ELTWISE_MODE_MAXIMUM | 两个tensor对应元素的最大值。 |
273| ELTWISE_MODE_UNKNOWN | 未知。 |
274
275
276### Format
277
278```
279enum Format : byte
280```
281
282**描述**
283
284
285算子数据排布。需要配合[Tensor](_tensor_v20.md)使用。
286
287**起始版本:** 3.2
288
289| 枚举值 | 描述 |
290| -------- | -------- |
291| FORMAT_NONE | 用于数据排列,作为Format初始的值。 |
292| FORMAT_NCHW | 数据排列为NCHW。 |
293| FORMAT_NHWC | 数据排列为NHWC。 |
294
295
296### NearestMode
297
298```
299enum NearestMode : byte
300```
301
302**描述**
303
304
305临近算法类型。需要配合[Resize](_resize_v20.md)算子使用。
306
307**起始版本:** 3.2
308
309| 枚举值 | 描述 |
310| -------- | -------- |
311| NEAREST_MODE_NORMAL | 四舍五入取整 |
312| NEAREST_MODE_ROUND_HALF_DOWN | 向负无穷取整,例如23.5取整为23,−23.5取整为−24 |
313| NEAREST_MODE_ROUND_HALF_UP | 向正无穷取整,例如23.5取整为24,−23.5取整为−23 |
314| NEAREST_MODE_FLOOR | 向下取临近的整数,例如23.5取整为23,−23.5取整为−24 |
315| NEAREST_MODE_CEIL | 向上取临近的整数整,例如23.5取整为24,−23.5取整为−23 |
316
317
318### NNRT_ReturnCode
319
320```
321enum NNRT_ReturnCode : int
322```
323
324**描述**
325
326
327NNRt定义的专用错误码,为HDI接口的返回值。
328
329**起始版本:** 4.0
330
331| 枚举值 | 描述 |
332| -------- | -------- |
333| NNRT_SUCCESS | 成功 |
334| NNRT_FAILED | 失败 |
335| NNRT_NULL_PTR | 空指针 |
336| NNRT_INVALID_PARAMETER | 非法参数 |
337| NNRT_MEMORY_ERROR | 内存错误 |
338| NNRT_OUT_OF_MEMORY | 内存不足 |
339| NNRT_OPERATION_FORBIDDEN | 禁止的操作 |
340| NNRT_INVALID_FILE | 非法文件 |
341| NNRT_INVALID_PATH | 非法路径 |
342| NNRT_INSUFFICIENT_BUFFER | 缓存不足 |
343| NNRT_NO_CHANGE | 无变化 |
344| NNRT_NOT_SUPPORT | 不支持 |
345| NNRT_SERVICE_ERROR | 服务错误 |
346| NNRT_DEVICE_ERROR | 设备错误 |
347| NNRT_DEVICE_BUSY | 设备忙碌 |
348| NNRT_CANCELLED | 操作取消 |
349| NNRT_PERMISSION_DENIED | 拒绝访问 |
350| NNRT_TIME_OUT | 超时 |
351| NNRT_INVALID_TENSOR | 非法tensor |
352| NNRT_INVALID_NODE | 非法节点 |
353| NNRT_INVALID_INPUT | 非法输入 |
354| NNRT_INVALID_OUTPUT | 非法输出 |
355| NNRT_INVALID_DATATYPE | 非法数据类型 |
356| NNRT_INVALID_FORMAT | 非法数据布局 |
357| NNRT_INVALID_TENSOR_NAME | 非法tensor名称 |
358| NNRT_INVALID_SHAPE | 非法shape |
359| NNRT_OUT_OF_DIMENTION_RANGES | 超出维度范围 |
360| NNRT_INVALID_BUFFER | 非法缓存 |
361| NNRT_INVALID_BUFFER_SIZE | 非法缓存大小 |
362| NNRT_INVALID_PERFORMANCE_MODE | 非法性能模式 |
363| NNRT_INVALID_PRIORITY | 非法优先级 |
364| NNRT_INVALID_MODEL | 非法模型 |
365| NNRT_INVALID_MODEL_CACHE | 非法模型缓存 |
366| NNRT_UNSUPPORTED_OP | 算子不支持 |
367
368
369### NodeType
370
371```
372enum NodeType : unsigned int
373```
374
375**描述**
376
377
378算子类型。
379
380**起始版本:** 3.2
381
382| 枚举值 | 描述 |
383| -------- | -------- |
384| NODE_TYPE_NONE | 算子类型为NONE |
385| NODE_TYPE_ACTIVATION | 激活函数类型 |
386| NODE_TYPE_ADD_FUSION | ADD算子 |
387| NODE_TYPE_ARGMAX_FUSION | ArgMax算子 |
388| NODE_TYPE_AVGPOOL_FUSION | AVGPOOL算子 |
389| NODE_TYPE_BATCH_TO_SPACE_ND | BatchToSpaceND算子 |
390| NODE_TYPE_BIAS_ADD | BiasAdd算子 |
391| NODE_TYPE_CAST | Cast算子 |
392| NODE_TYPE_CONCAT | Concat算子 |
393| NODE_TYPE_CONV2D_FUSION | Conv2D算子,包含了普通卷积、可分离卷积和分组卷积 |
394| NODE_TYPE_CONV2D_TRANSPOSE_FUSION | 二维反卷积算子 |
395| NODE_TYPE_DIV_FUSION | Div算子 |
396| NODE_TYPE_ELTWISE | 元素级别算子 |
397| NODE_TYPE_EXPAND_DIMS | ExpandDims张算子 |
398| NODE_TYPE_FILL | Fill算子 |
399| NODE_TYPE_FULL_CONNECTION | FullConnection算子 |
400| NODE_TYPE_FUSED_BATCH_NORM | BatchNorm算子 |
401| NODE_TYPE_GATHER | Gather算子 |
402| NODE_TYPE_LAYER_NORM_FUSION | LayerNorm算子 |
403| NODE_TYPE_LESS_EQUAL | LessEqual算子 |
404| NODE_TYPE_MATMUL_FUSION | MatMul算子 |
405| NODE_TYPE_MAXIMUM | Maximum算子 |
406| NODE_TYPE_MAX_POOL_FUSION | MaxPool算子 |
407| NODE_TYPE_MUL_FUSION | Mul算子 |
408| NODE_TYPE_ONE_HOT | OneHot算子 |
409| NODE_TYPE_PAD_FUSION | Pad算子 |
410| NODE_TYPE_POW_FUSION | Pow算子 |
411| NODE_TYPE_PRELU_FUSION | PReLU算子 |
412| NODE_TYPE_QUANT_DTYPE_CAST | QuantDTypeCast算子 |
413| NODE_TYPE_REDUCE_FUSION | Reduce算子 |
414| NODE_TYPE_RESHAPE | Reshape算子 |
415| NODE_TYPE_RESIZE | Resize算子 |
416| NODE_TYPE_RSQRT | Rsqrt算子 |
417| NODE_TYPE_SCALE_FUSION | Scale算子 |
418| NODE_TYPE_SHAPE | Shape算子 |
419| NODE_TYPE_SLICE_FUSION | Slice算子 |
420| NODE_TYPE_SOFTMAX | Softmax算子 |
421| NODE_TYPE_SPACE_TO_BATCH_ND | SpaceToBatchND算子 |
422| NODE_TYPE_SPLIT | Split算子 |
423| NODE_TYPE_SQRT | Sqrt算子 |
424| NODE_TYPE_SQUEEZE | SquaredDifference算子 |
425| NODE_TYPE_SQUARED_DIFFERENCE | Squeeze算子 |
426| NODE_TYPE_STACK | Stack算子 |
427| NODE_TYPE_STRIDED_SLICE | StridedSlice算子 |
428| NODE_TYPE_SUB_FUSION | Sub算子 |
429| NODE_TYPE_TILE_FUSION | Tile算子 |
430| NODE_TYPE_TOPK_FUSION | TopK算子 |
431| NODE_TYPE_TRANSPOSE | Transpose算子 |
432| NODE_TYPE_UNSQUEEZE | Unsqueeze算子 |
433
434
435### PaddingMode
436
437```
438enum PaddingMode : byte
439```
440
441**描述**
442
443
444填充类型,需要配合[PadFusion](_pad_fusion_v20.md)算子使用。
445
446当输入的张量x= \([[1,2,3],[4,5,6],[7,8,9]]\),paddings= \([[2,2],[2,2]] \) 时效果如下:
447
448- paddingMode==PADDING_MODE_CONSTANT并且constantValue = 0时输出为:
449  $[[0. 0. 0. 0. 0. 0. 0.],\\ [0. 0. 0. 0. 0. 0. 0.],\\ [0. 0. 1. 2. 3. 0. 0.],\\ [0. 0. 4. 5. 6. 0. 0.],\\ [0. 0. 7. 8. 9. 0. 0.],\\ [0. 0. 0. 0. 0. 0. 0.],\\ [0. 0. 0. 0. 0. 0. 0.]]\\ $
450
451- paddingMode==PADDING_MODE_REFLECT输出为:
452  $[[9. 8. 7. 8. 9. 8. 7.],\\ [6. 5. 4. 5. 6. 5. 4.],\\ [3. 2. 1. 2. 3. 2. 1.],\\ [6. 5. 4. 5. 6. 5. 4.],\\ [9. 8. 7. 8. 9. 8. 7.],\\ [6. 5. 4. 5. 6. 5. 4.],\\ [3. 2. 1. 2. 3. 2. 1.]]\\ $
453
454- paddingMode==PADDING_MODE_SYMMETRIC输出为:
455  $[[5. 4. 4. 5. 6. 6. 5.],\\ [2. 1. 1. 2. 3. 3. 2.],\\ [2. 1. 1. 2. 3. 3. 2.],\\ [5. 4. 4. 5. 6. 6. 5.],\\ [8. 7. 7. 8. 9. 9. 8.],\\ [8. 7. 7. 8. 9. 9. 8.],\\ [5. 4. 4. 5. 6. 6. 5.]]\\ $
456
457**起始版本:** 3.2
458
459| 枚举值 | 描述 |
460| -------- | -------- |
461| PADDING_MODE_CONSTANT | 使用常量填充,默认值为0。 |
462| PADDING_MODE_REFLECT | 以数据区的便捷为轴,使填充区和数据区的数据以该轴保持对称。 |
463| PADDING_MODE_SYMMETRIC | 此填充方法类似于 PADDING_MODE_REFLECT,它以待填充区和数据区的交界为轴,使待填充区和数据区的数据以该轴保持对称。 |
464| PADDING_MODE_RESERVED | 预留,暂未使用。 |
465
466
467### PadMode
468
469```
470enum PadMode : byte
471```
472
473**描述**
474
475
476填充类型,需要配合[AvgPoolFusion](_avg_pool_fusion_v20.md),[AvgPoolFusion](_avg_pool_fusion_v20.md),[Conv2DFusion](_conv2_d_fusion_v20.md),[MaxPoolFusion](_max_pool_fusion_v20.md)使用。
477
478**起始版本:** 3.2
479
480| 枚举值 | 描述 |
481| -------- | -------- |
482| PAD_MODE_PAD | 在输入的高度和宽度方向上填充0。 若设置该模式,算子的padding参数必须大于等于0。 |
483| PAD_MODE_SAME | 输出的高度和宽度分别与输入整除 stride 后的值相同。 若设置该模式,算子的padding参数必须为0。 |
484| PAD_MODE_VALID | 在不填充的前提下返回有效计算所得的输出。不满足计算的多余像素会被丢弃。 若设置此模式,则算子的padding参数必须为0。 |
485
486
487### PerformanceMode
488
489```
490enum PerformanceMode : int
491```
492
493**描述**
494
495
496芯片执行AI计算的性能模式。
497
498**起始版本:** 3.2
499
500| 枚举值 | 描述 |
501| -------- | -------- |
502| PERFORMANCE_NONE | 不指定任何性能模式,具体运行模式由芯片定义 |
503| PERFORMANCE_LOW | 低性能模式,执行AI计算速度慢,功耗低 |
504| PERFORMANCE_MEDIUM | 中性能模式,执行AI计算速度较慢,功耗较低 |
505| PERFORMANCE_HIGH | 高性能模式,执行AI计算速度较快,功耗较高 |
506| PERFORMANCE_EXTREME | 最高性能模式,执行AI计算速度快,功耗高 |
507
508
509### Priority
510
511```
512enum Priority : int
513```
514
515**描述**
516
517
518AI计算任务的优先级。
519
520**起始版本:** 3.2
521
522| 枚举值 | 描述 |
523| -------- | -------- |
524| PRIORITY_NONE | 不指定任何任务优先级,具体执行策略由芯片定义 |
525| PRIORITY_LOW | 低优先级,若有更高优先级的任务,芯片会执行更高优先级的任务 |
526| PRIORITY_MEDIUM | 中等优先级,若有更高优先级的任务,芯片会执行更高优先级的任务 |
527| PRIORITY_HIGH | 高优先级,高优先级任务最先执行 |
528
529
530### QuantType
531
532```
533enum QuantType : byte
534```
535
536**描述**
537
538
539量化类型。需要配合[Node](_node_v20.md)使用。
540
541**起始版本:** 3.2
542
543| 枚举值 | 描述 |
544| -------- | -------- |
545| QUANT_TYPE_NONE | 不使用量化 |
546| QUANT_TYPE_ALL | int8全量化 |
547
548
549### ReduceMode
550
551```
552enum ReduceMode : byte
553```
554
555**描述**
556
557
558用于维度移除的方法,需要配合[ReduceFusion](_reduce_fusion_v20.md)算子使用。
559
560**起始版本:** 3.2
561
562| 枚举值 | 描述 |
563| -------- | -------- |
564| REDUCE_MODE_MEAN | 使用指定维度所有元素的平均值代替该维度的其他元素,以移除该维度。 |
565| REDUCE_MODE_MAX | 使用指定维度所有元素的最大值代替该维度的其他元素,以移除该维度。 |
566| REDUCE_MODE_MIN | 使用指定维度所有元素的最小值代替该维度的其他元素,以移除该维度。 |
567| REDUCE_MODE_PROD | 使用指定维度所有元素的乘积代替该维度的其他元素,以移除该维度。 |
568| REDUCE_MODE_SUM | 使用指定维度所有元素的加和代替该维度的其他元素,以移除该维度。 |
569| REDUCE_MODE_SUM_SQUARE | 使用指定维度所有元素的平方和替该维度的其他元素,以移除该维度。 |
570| REDUCE_MODE_ASUM | 使用指定维度所有元素的绝对值和代替该维度的其他元素,以移除该维度。 |
571| REDUCE_MODE_ALL | 使用指定维度所有元素的逻辑与代替该维度的其他元素,以移除该维度。 |
572
573
574### ResizeMethod
575
576```
577enum ResizeMethod : byte
578```
579
580**描述**
581
582
583调整尺寸的方法。需要配合[Resize](_resize_v20.md)算子使用。
584
585**起始版本:** 3.2
586
587| 枚举值 | 描述 |
588| -------- | -------- |
589| RESIZE_METHOD_UNKNOWN | 未知,默认值。 |
590| RESIZE_METHOD_LINEAR | 双线性插值。 假设需要计算未知函数f在点$ (x,y) $的值其中$ x_1 &lt; x &lt; x_2, y_1 &lt; y &lt; y_2$,并且已知四个坐标点的值$ Q_{11} = (x_1, y_1), Q_{12} = (x1, y2), Q_{21} = (x_2, y_1),Q_{22} = (x_2, y_2) $,并且$ f(Q_{11}),f(Q_{12}),f(Q_{21}),f(Q_{22}) $表示四个点的数值,则通过如下公式可计算$ f(x,y) $的值:<br/>$ f(x,y_1) = \frac{x_2-x}{x_2-x_1}f(Q_{11})+\frac{x-x_1}{x_2-x_1}f(Q_{21}) $<br/>$ f(x,y_2) = \frac{x_2-x}{x_2-x_1}f(Q_{12})+\frac{x-x_1}{x_2-x_1}f(Q_{22}) $<br/>$ f(x,y) = \frac{y_2-y}{y_2-y_1}f(x,y_1)+\frac{y-y_1}{y_2-y_1}f(x,y_2) $ |
591| RESIZE_METHOD_NEAREST | 最近临近插值。假设需要计算未知函数f在点$ (x,y) $的值其中$ x_1 &lt; x &lt;x_2, y_1 &lt; y &lt; y_2 $,并且已知四个坐标点的值$ Q_{11} = (x_1, y_1), Q_{12} = (x1, y2), Q_{21} = (x_2, y_1),Q_{22} = (x_2, y_2) $,则从4个点中选择距离点$ (x,y) $最近的点的数值作为$ f(x,y) $的值。 |
592| RESIZE_METHOD_CUBIC | 双三次插值。 双三次插值是取采样点周围16个点的值的加权平均来计算采样点的数值。该参数需要配合[Resize](_resize_v20.md)的cubicCoeff和coordinateTransformMode参数使用。 当coordinateTransformMode==COORDINATE_TRANSFORM_MODE_HALF_PIXEL时,cubicCoeff=-0.5,其他情况cubicCoeff=-0.75。插值函数的权重函数如下:<br/>$ W(x) = \begin{cases} (cubicCoeff+2)\|x\|^3 - (cubicCoeff+3)\|x\|^2 +1 , &amp;\text{if } \|x\| \leq 1; \cr cubicCoeff\|x\|^3 - 5cubicCoeff\|x\|^2 + 8cubicCoeff\|x\| - 4a, &amp;\text{if } 1 \lt \|x\| \leq 2; \cr 0, &amp;\text{otherwise.} \end{cases} $ |
593
594
595### RoundMode
596
597```
598enum RoundMode : byte
599```
600
601**描述**
602
603
604小数取整算法,需要配合[AvgPoolFusion](_avg_pool_fusion_v20.md)算子使用。
605
606**起始版本:** 3.2
607
608| 枚举值 | 描述 |
609| -------- | -------- |
610| ROUND_MODE_FLOOR | 向下取临近的整数,例如23.5取整为23,−23.5取整为−24 |
611| ROUND_MODE_CEIL | 向上取临近的整数整,例如23.5取整为24,−23.5取整为−23 |
612