NeuralNetworks
摘要
类型定义 |
|
---|---|
ANeuralNetworksBurst
|
typedefstruct ANeuralNetworksBurst
ANeuralNetworksBurst 是一种不透明类型,可用于降低快速连续执行的延迟。 |
ANeuralNetworksCompilation
|
typedefstruct ANeuralNetworksCompilation
ANeuralNetworksCompilation 是一种不透明类型,可用于编译机器学习模型。 |
ANeuralNetworksDevice
|
typedefstruct ANeuralNetworksDevice
ANeuralNetworksDevice 是一种表示设备的不透明类型。 |
ANeuralNetworksEvent
|
typedefstruct ANeuralNetworksEvent
ANeuralNetworksEvent 是一种不透明类型,表示执行完成后将发出的事件。 |
ANeuralNetworksExecution
|
typedefstruct ANeuralNetworksExecution
ANeuralNetworksExecution 是一种不透明类型,可用于将机器学习模型应用于一组输入。 |
ANeuralNetworksMemory
|
typedefstruct ANeuralNetworksMemory
ANeuralNetworksMemory 是一种表示内存的不透明类型。 |
ANeuralNetworksMemoryDesc
|
typedefstruct ANeuralNetworksMemoryDesc
ANeuralNetworksMemoryDesc 是一种表示内存描述符的不透明类型。 |
ANeuralNetworksModel
|
typedefstruct ANeuralNetworksModel
ANeuralNetworksModel 是一种不透明类型,包含构成模型的数学运算的描述。 |
ANeuralNetworksOperandType
|
typedefstruct ANeuralNetworksOperandType
ANeuralNetworksOperandType 描述了操作数的类型。 |
ANeuralNetworksOperationType
|
typedefint32_t
别名 OperationCode,在函数 ANeuralNetworksModel_addOperation 中使用。 |
ANeuralNetworksSymmPerChannelQuantParams
|
typedef ANEURALNETWORKS_TENSOR_QUANT8_SYMM_PER_CHANNEL 操作数的参数。 |
函数 |
|
---|---|
ANeuralNetworksBurst_create(ANeuralNetworksCompilation *compilation, ANeuralNetworksBurst **burst)
|
int
创建一个 ANeuralNetworksBurst 来应用给定的编译。 |
ANeuralNetworksBurst_free(ANeuralNetworksBurst *burst)
|
void
销毁 burst 对象。 |
ANeuralNetworksCompilation_create(ANeuralNetworksModel *model, ANeuralNetworksCompilation **compilation)
|
int
创建一个 ANeuralNetworksCompilation 来编译给定模型。 |
ANeuralNetworksCompilation_createForDevices(ANeuralNetworksModel *model, const ANeuralNetworksDevice *const *devices, uint32_t numDevices, ANeuralNetworksCompilation **compilation)
|
int
创建一个 ANeuralNetworksCompilation 来为指定设备集编译给定模型。 |
ANeuralNetworksCompilation_finish(ANeuralNetworksCompilation *compilation)
|
int
表示我们已完成对编译的修改。 |
ANeuralNetworksCompilation_free(ANeuralNetworksCompilation *compilation)
|
void
销毁编译。 |
ANeuralNetworksCompilation_getPreferredMemoryAlignmentForInput(const ANeuralNetworksCompilation *compilation, uint32_t index, uint32_t *alignment)
|
int
获取从特定编译创建的执行的输入的首选缓冲区和内存对齐方式。 |
ANeuralNetworksCompilation_getPreferredMemoryAlignmentForOutput(const ANeuralNetworksCompilation *compilation, uint32_t index, uint32_t *alignment)
|
int
获取从特定编译创建的执行的输出的首选缓冲区和内存对齐方式。 |
ANeuralNetworksCompilation_getPreferredMemoryPaddingForInput(const ANeuralNetworksCompilation *compilation, uint32_t index, uint32_t *padding)
|
int
获取从特定编译创建的执行的输入的首选缓冲区和内存末尾填充。 |
ANeuralNetworksCompilation_getPreferredMemoryPaddingForOutput(const ANeuralNetworksCompilation *compilation, uint32_t index, uint32_t *padding)
|
int
获取从特定编译创建的执行的输出的首选内存末尾填充。 |
ANeuralNetworksCompilation_setCaching(ANeuralNetworksCompilation *compilation, const char *cacheDir, const uint8_t *token)
|
int
设置编译缓存签名和缓存目录。 |
ANeuralNetworksCompilation_setPreference(ANeuralNetworksCompilation *compilation, int32_t preference)
|
int
设置执行偏好。 |
ANeuralNetworksCompilation_setPriority(ANeuralNetworksCompilation *compilation, int priority)
|
int
设置执行优先级。 |
ANeuralNetworksCompilation_setTimeout(ANeuralNetworksCompilation *compilation, uint64_t duration)
|
int
设置编译模型的最大预期持续时间。 |
ANeuralNetworksDevice_getFeatureLevel(const ANeuralNetworksDevice *device, int64_t *featureLevel)
|
int
获取指定 NNAPI 设备的功能级别。 |
ANeuralNetworksDevice_getName(const ANeuralNetworksDevice *device, const char **name)
|
int
获取指定设备的名称。 |
ANeuralNetworksDevice_getType(const ANeuralNetworksDevice *device, int32_t *type)
|
int
获取给定设备的类型。 |
ANeuralNetworksDevice_getVersion(const ANeuralNetworksDevice *device, const char **version)
|
int
获取指定设备的驱动实现版本。 |
ANeuralNetworksDevice_wait(const ANeuralNetworksDevice *device)
|
int
等待设备处于活动状态。 |
ANeuralNetworksEvent_createFromSyncFenceFd(int sync_fence_fd, ANeuralNetworksEvent **event)
|
int
从 sync_fence 文件描述符创建一个 ANeuralNetworksEvent。 |
ANeuralNetworksEvent_free(ANeuralNetworksEvent *event)
|
void
销毁事件。 |
ANeuralNetworksEvent_getSyncFenceFd(const ANeuralNetworksEvent *event, int *sync_fence_fd)
|
int
从事件中获取 sync_fence 文件描述符。 |
ANeuralNetworksEvent_wait(ANeuralNetworksEvent *event)
|
int
等待执行完成。 |
ANeuralNetworksExecution_burstCompute(ANeuralNetworksExecution *execution, ANeuralNetworksBurst *burst)
|
int
安排在 burst 对象上同步评估执行。 |
ANeuralNetworksExecution_compute(ANeuralNetworksExecution *execution)
|
int
安排同步评估执行。 |
ANeuralNetworksExecution_create(ANeuralNetworksCompilation *compilation, ANeuralNetworksExecution **execution)
|
int
创建一个 ANeuralNetworksExecution 来应用给定的编译。 |
ANeuralNetworksExecution_enableInputAndOutputPadding(ANeuralNetworksExecution *execution, bool enable)
|
int
指定 ANeuralNetworksExecution 是否能够接受带填充的输入和输出缓冲区及内存对象。 |
ANeuralNetworksExecution_free(ANeuralNetworksExecution *execution)
|
void
销毁执行。 |
ANeuralNetworksExecution_getDuration(const ANeuralNetworksExecution *execution, int32_t durationCode, uint64_t *duration)
|
int
获取在指定的 ANeuralNetworksExecution 上评估的最新计算所花费的时间(以纳秒为单位)。 |
ANeuralNetworksExecution_getOutputOperandDimensions(ANeuralNetworksExecution *execution, int32_t index, uint32_t *dimensions)
|
int
获取在 ANeuralNetworksExecution 上评估的最新计算中,模型的指定输出操作数的维度信息。 |
ANeuralNetworksExecution_getOutputOperandRank(ANeuralNetworksExecution *execution, int32_t index, uint32_t *rank)
|
int
获取在 ANeuralNetworksExecution 上评估的最新计算中,模型的指定输出操作数的维度信息。 |
ANeuralNetworksExecution_setInput(ANeuralNetworksExecution *execution, int32_t index, const ANeuralNetworksOperandType *type, const void *buffer, size_t length)
|
int
将用户缓冲区与 ANeuralNetworksExecution 的模型输入相关联。 |
ANeuralNetworksExecution_setInputFromMemory(ANeuralNetworksExecution *execution, int32_t index, const ANeuralNetworksOperandType *type, const ANeuralNetworksMemory *memory, size_t offset, size_t length)
|
int
将内存对象的区域与 ANeuralNetworksExecution 的模型输入相关联。 |
ANeuralNetworksExecution_setLoopTimeout(ANeuralNetworksExecution *execution, uint64_t duration)
|
int
设置指定执行中 WHILE 循环的最大持续时间。 |
ANeuralNetworksExecution_setMeasureTiming(ANeuralNetworksExecution *execution, bool measure)
|
int
指定是否测量 ANeuralNetworksExecution 的持续时间。 |
ANeuralNetworksExecution_setOutput(ANeuralNetworksExecution *execution, int32_t index, const ANeuralNetworksOperandType *type, void *buffer, size_t length)
|
int
将用户缓冲区与 ANeuralNetworksExecution 的模型输出相关联。 |
ANeuralNetworksExecution_setOutputFromMemory(ANeuralNetworksExecution *execution, int32_t index, const ANeuralNetworksOperandType *type, const ANeuralNetworksMemory *memory, size_t offset, size_t length)
|
int
将内存对象的区域与 ANeuralNetworksExecution 的模型输出相关联。 |
ANeuralNetworksExecution_setReusable(ANeuralNetworksExecution *execution, bool reusable)
|
int
指定 ANeuralNetworksExecution 是否可重复用于多次计算。 |
ANeuralNetworksExecution_setTimeout(ANeuralNetworksExecution *execution, uint64_t duration)
|
int
设置指定执行的最大预期持续时间。 |
ANeuralNetworksExecution_startCompute(ANeuralNetworksExecution *execution, ANeuralNetworksEvent **event)
|
int
安排执行的异步评估。 |
ANeuralNetworksExecution_startComputeWithDependencies(ANeuralNetworksExecution *execution, const ANeuralNetworksEvent *const *dependencies, uint32_t num_dependencies, uint64_t duration, ANeuralNetworksEvent **event)
|
int
安排执行的异步评估,并带有依赖项。 |
ANeuralNetworksMemoryDesc_addInputRole(ANeuralNetworksMemoryDesc *desc, const ANeuralNetworksCompilation *compilation, uint32_t index, float frequency)
|
int
指定内存对象将在从特定编译创建的执行中扮演输入角色。 |
ANeuralNetworksMemoryDesc_addOutputRole(ANeuralNetworksMemoryDesc *desc, const ANeuralNetworksCompilation *compilation, uint32_t index, float frequency)
|
int
指定内存对象将在从特定编译创建的执行中扮演输出角色。 |
ANeuralNetworksMemoryDesc_create(ANeuralNetworksMemoryDesc **desc)
|
int
创建一个不带任何属性的 ANeuralNetworksMemoryDesc。 |
ANeuralNetworksMemoryDesc_finish(ANeuralNetworksMemoryDesc *desc)
|
int
表示我们已完成对内存描述符的修改。 |
ANeuralNetworksMemoryDesc_free(ANeuralNetworksMemoryDesc *desc)
|
void
销毁内存描述符。 |
ANeuralNetworksMemoryDesc_setDimensions(ANeuralNetworksMemoryDesc *desc, uint32_t rank, const uint32_t *dimensions)
|
int
设置内存描述符的维度信息。 |
ANeuralNetworksMemory_copy(const ANeuralNetworksMemory *src, const ANeuralNetworksMemory *dst)
|
int
将数据从一个内存对象复制到另一个内存对象。 |
ANeuralNetworksMemory_createFromAHardwareBuffer(const AHardwareBuffer *ahwb, ANeuralNetworksMemory **memory)
|
int
从 AHardwareBuffer 句柄创建共享内存对象。 |
ANeuralNetworksMemory_createFromDesc(const ANeuralNetworksMemoryDesc *desc, ANeuralNetworksMemory **memory)
|
int
从内存描述符创建内存对象。 |
ANeuralNetworksMemory_createFromFd(size_t size, int protect, int fd, size_t offset, ANeuralNetworksMemory **memory)
|
int
从文件描述符创建共享内存对象。 |
ANeuralNetworksMemory_free(ANeuralNetworksMemory *memory)
|
void
删除内存对象。 |
ANeuralNetworksModel_addOperand(ANeuralNetworksModel *model, const ANeuralNetworksOperandType *type)
|
int
向模型添加操作数。 |
ANeuralNetworksModel_addOperation(ANeuralNetworksModel *model, ANeuralNetworksOperationType type, uint32_t inputCount, const uint32_t *inputs, uint32_t outputCount, const uint32_t *outputs)
|
int
向模型添加操作。 |
ANeuralNetworksModel_create(ANeuralNetworksModel **model)
|
int
创建一个空的 ANeuralNetworksModel。 |
ANeuralNetworksModel_finish(ANeuralNetworksModel *model)
|
int
表示我们已完成对模型的修改。 |
ANeuralNetworksModel_free(ANeuralNetworksModel *model)
|
void
销毁模型。 |
ANeuralNetworksModel_getSupportedOperationsForDevices(const ANeuralNetworksModel *model, const ANeuralNetworksDevice *const *devices, uint32_t numDevices, bool *supportedOps)
|
int
获取指定设备集支持的操作。 |
ANeuralNetworksModel_identifyInputsAndOutputs(ANeuralNetworksModel *model, uint32_t inputCount, const uint32_t *inputs, uint32_t outputCount, const uint32_t *outputs)
|
int
指定哪些操作数将是模型的输入和输出。 |
ANeuralNetworksModel_relaxComputationFloat32toFloat16(ANeuralNetworksModel *model, bool allow)
|
int
指定是否允许使用低至 IEEE 754 16 位浮点格式的范围和/或精度计算 ANEURALNETWORKS_TENSOR_FLOAT32。 |
ANeuralNetworksModel_setOperandSymmPerChannelQuantParams(ANeuralNetworksModel *model, int32_t index, const ANeuralNetworksSymmPerChannelQuantParams *channelQuant)
|
int
设置操作数的每通道量化参数。 |
ANeuralNetworksModel_setOperandValue(ANeuralNetworksModel *model, int32_t index, const void *buffer, size_t length)
|
int
将操作数设置为常量值。 |
ANeuralNetworksModel_setOperandValueFromMemory(ANeuralNetworksModel *model, int32_t index, const ANeuralNetworksMemory *memory, size_t offset, size_t length)
|
int
将内存对象中存储的值设置为操作数。 |
ANeuralNetworksModel_setOperandValueFromModel(ANeuralNetworksModel *model, int32_t index, const ANeuralNetworksModel *value)
|
int
将操作数设置为引用另一个 NNAPI 模型的值。 |
ANeuralNetworks_getDefaultLoopTimeout()
|
uint64_t
获取 WHILE 循环的默认超时值。 |
ANeuralNetworks_getDevice(uint32_t devIndex, ANeuralNetworksDevice **device)
|
int
获取指定设备的表示形式。 |
ANeuralNetworks_getDeviceCount(uint32_t *numDevices)
|
int
获取可用设备的数量。 |
ANeuralNetworks_getMaximumLoopTimeout()
|
uint64_t
获取 WHILE 循环的最大超时值。 |
ANeuralNetworks_getRuntimeFeatureLevel()
|
int64_t
获取 NNAPI 运行时功能级别。 |
结构体 |
|
---|---|
ANeuralNetworksOperandType |
ANeuralNetworksOperandType 描述了操作数的类型。 |
ANeuralNetworksSymmPerChannelQuantParams |
ANEURALNETWORKS_TENSOR_QUANT8_SYMM_PER_CHANNEL 操作数的参数。 |
枚举
匿名枚举 53
在android/NeuralNetworksTypes.h
中声明
Anonymous Enum 53
对于 ANeuralNetworksModel_setOperandValue,长度小于或等于此值的值将立即复制到模型中。
大小以字节为单位。
自 NNAPI 功能级别 1 起可用。
属性 | |
---|---|
ANEURALNETWORKS_MAX_SIZE_OF_IMMEDIATELY_COPIED_VALUES |
匿名枚举 54
在android/NeuralNetworksTypes.h
中声明
Anonymous Enum 54
对于 ANeuralNetworksCompilation_setCaching,指定应用所需的缓存令牌大小。
大小以字节为单位。
自 NNAPI 功能级别 3 起可用。
属性 | |
---|---|
ANEURALNETWORKS_BYTE_SIZE_OF_CACHE_TOKEN |
DeviceTypeCode
在android/NeuralNetworksTypes.h
中声明
DeviceTypeCode
设备类型。
NNAPI 设备的类型。
属性 | |
---|---|
ANEURALNETWORKS_DEVICE_ACCELERATOR |
用于机器学习工作负载的专用加速器。 |
ANEURALNETWORKS_DEVICE_CPU |
设备在单核或多核 CPU 上运行 NNAPI 模型。 |
ANEURALNETWORKS_DEVICE_GPU |
设备可以运行 NNAPI 模型,也可以加速图形 API(如 OpenGL ES 和 Vulkan)。 |
ANEURALNETWORKS_DEVICE_OTHER |
设备不属于以下任何类别。 |
ANEURALNETWORKS_DEVICE_UNKNOWN |
无法提供设备类型。 |
DurationCode
在android/NeuralNetworksTypes.h
中声明
DurationCode
不同的持续时间测量。
持续时间以纳秒为单位测量。
自 NNAPI 功能级别 3 起可用。
属性 | |
---|---|
ANEURALNETWORKS_DURATION_IN_DRIVER |
|
ANEURALNETWORKS_DURATION_ON_HARDWARE |
|
ANEURALNETWORKS_FENCED_DURATION_IN_DRIVER |
|
ANEURALNETWORKS_FENCED_DURATION_ON_HARDWARE |
FeatureLevelCode
在android/NeuralNetworksTypes.h
中声明
FeatureLevelCode
NNAPI 功能级别。
NNAPI 规范的每次更新都会生成一个新的 NNAPI 功能级别枚举值。NNAPI 功能级别对应于驱动程序和/或 NNAPI 运行时可以实现的 NNAPI 规范版本。
包含“FEATURE_LEVEL_5”在内的功能级别直接映射到引入相应 NNAPI 规范更新的 Android API 级别。Android API 级别 31 之后的功能级别与 API 级别没有关联,因为 NNAPI 规范可以在 Android API 版本之间更新。应将 ANeuralNetworksDevice_getFeatureLevel 和 ANeuralNetworks_getRuntimeFeatureLevel 的输出与这些枚举值进行比较,而不是与 Android API 级别进行比较。
属性 | |
---|---|
ANEURALNETWORKS_FEATURE_LEVEL_1 |
Android O-MR1 中可用的 NNAPI 规范,Android NNAPI 功能级别 1。 |
ANEURALNETWORKS_FEATURE_LEVEL_2 |
Android P 中可用的 NNAPI 规范,Android NNAPI 功能级别 2。 |
ANEURALNETWORKS_FEATURE_LEVEL_3 |
Android Q 中可用的 NNAPI 规范,Android NNAPI 功能级别 3。 |
ANEURALNETWORKS_FEATURE_LEVEL_4 |
Android R 中可用的 NNAPI 规范,Android NNAPI 功能级别 4。 |
ANEURALNETWORKS_FEATURE_LEVEL_5 |
Android S 中可用的 NNAPI 规范,Android NNAPI 功能级别 5。 在 Android S 之后,NNAPI 规范可以在 Android API 版本之间更新。 |
ANEURALNETWORKS_FEATURE_LEVEL_6 |
Android NNAPI 功能级别 6。 |
ANEURALNETWORKS_FEATURE_LEVEL_7 |
Android NNAPI 功能级别 7。 |
ANEURALNETWORKS_FEATURE_LEVEL_8 |
Android NNAPI 功能级别 8。 |
FuseCode
在android/NeuralNetworksTypes.h
中声明
FuseCode
融合激活函数类型。
自 NNAPI 功能级别 1 起可用。
属性 | |
---|---|
ANEURALNETWORKS_FUSED_NONE |
无融合激活函数。 |
ANEURALNETWORKS_FUSED_RELU |
融合 ReLU 激活函数。 |
ANEURALNETWORKS_FUSED_RELU1 |
融合 ReLU1 激活函数。 |
ANEURALNETWORKS_FUSED_RELU6 |
融合 ReLU6 激活函数。 |
OperandCode
在android/NeuralNetworksTypes.h
中声明
OperandCode
操作数类型。
模型中操作数的类型。
以 ANEURALNETWORKS_TENSOR_* 开头的类型必须用于张量数据(即至少有一个维度的张量)。不以 ANEURALNETWORKS_TENSOR_* 开头的类型表示标量值且必须没有维度。
虽然我们定义了许多类型,但大多数运算符只接受少数几种类型。最常用的是 ANEURALNETWORKS_TENSOR_FLOAT32、ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 和 ANEURALNETWORKS_INT32。
自 NNAPI 功能级别 1 起可用。
属性 | |
---|---|
ANEURALNETWORKS_BOOL |
一个 8 位布尔标量值。 此操作数类型的值为 true 或 false。零值表示 false;任何其他值表示 true。 自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_FLOAT16 |
一个 IEEE 754 16 位浮点标量值。 自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_FLOAT32 |
一个 32 位浮点标量值。 |
ANEURALNETWORKS_INT32 |
一个带符号的 32 位整数标量值。 |
ANEURALNETWORKS_MODEL |
对模型的引用。 设置此类型操作数的值时必须使用 ANeuralNetworksModel_setOperandValueFromModel。 自 NNAPI 功能级别 4 起可用。 |
ANEURALNETWORKS_TENSOR_BOOL8 |
一个 8 位布尔值张量。 此操作数类型的值为 true 或 false。零值表示 false;任何其他值表示 true。 自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_TENSOR_FLOAT16 |
一个 IEEE 754 16 位浮点值张量。 自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_TENSOR_FLOAT32 |
一个 32 位浮点值张量。 |
ANEURALNETWORKS_TENSOR_INT32 |
一个 32 位整数值张量。 |
ANEURALNETWORKS_TENSOR_QUANT16_ASYMM |
一个表示实数的 16 位无符号整数张量。 此张量附加了两个数字,可用于将 16 位整数转换为实值,反之亦然。这两个数字是
公式为:real_value = (integer_value - zeroPoint) * scale。 自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_TENSOR_QUANT16_SYMM |
一个表示实数的 16 位有符号整数张量。 此张量附加了一个表示实值比例的数字,用于通过以下方式将 16 位数字转换为实值:realValue = integerValue * scale。 scale 是一个大于零的 32 位浮点值。 自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_TENSOR_QUANT8_ASYMM |
一个表示实数的 8 位无符号整数张量。 此张量附加了两个数字,可用于将 8 位整数转换为实值,反之亦然。这两个数字是
公式为:real_value = (integer_value - zeroPoint) * scale。 |
ANEURALNETWORKS_TENSOR_QUANT8_ASYMM_SIGNED |
一个表示实数的 8 位有符号整数张量。 此张量附加了两个数字,可用于将 8 位整数转换为实值,反之亦然。这两个数字是
公式为:real_value = (integer_value - zeroPoint) * scale。 自 NNAPI 功能级别 4 起可用。 |
ANEURALNETWORKS_TENSOR_QUANT8_SYMM |
一个表示实数的 8 位有符号整数张量。 此张量附加了一个表示实值比例的数字,用于通过以下方式将 8 位数字转换为实值:realValue = integerValue * scale。 scale 是一个大于零的 32 位浮点值。 自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_TENSOR_QUANT8_SYMM_PER_CHANNEL |
一个表示实数的 8 位有符号整数张量。 此张量关联了附加字段,可用于将 8 位有符号整数转换为实值,反之亦然。这些字段是
设置此类型操作数的参数时必须使用 ANeuralNetworksModel_setOperandSymmPerChannelQuantParams。 此张量的通道维度不能是未知(dimensions[channelDim] != 0)。 公式为:realValue[..., C, ...] = integerValue[..., C, ...] * scales[C],其中 C 是通道维度的索引。 自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_UINT32 |
一个无符号的 32 位整数标量值。 |
OperationCode
在android/NeuralNetworksTypes.h
中声明
OperationCode
操作类型。
模型中操作的类型。
自 NNAPI 功能级别 1 起可用。
属性 | |
---|---|
ANEURALNETWORKS_ABS |
逐元素计算张量的绝对值。 支持的张量 OperandCode
支持的张量维度:从 1 起。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_ADD |
逐元素添加两个张量。 接受两个具有相同 OperandCode 和兼容维度的输入张量。输出是两个输入张量之和,可选择通过激活函数进行修改。 当两个维度满足以下条件之一时兼容
输出的大小是输入操作数沿每个维度的最大大小。它从尾部维度开始,向前推进。 示例 input1.dimension = {4, 1, 2} input2.dimension = {5, 4, 3, 1} output.dimension = {5, 4, 3, 2} 自 NNAPI 功能级别 3 起,支持泛型零大小输入张量。零维度仅与 0 或 1 兼容。如果任一对应输入维度为零,则输出维度的大小为零。 支持的张量 OperandCode
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_ARGMAX |
返回沿轴的最小元素的索引。 支持的张量 OperandCode
支持的张量维度:从 1 起 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_ARGMIN |
返回沿轴的最大元素的索引。 支持的张量 OperandCode
支持的张量维度:从 1 起 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_AVERAGE_POOL_2D |
执行二维平均池化操作。 输出维度是滤波器维度、步幅和填充的函数。 输出张量中的值计算如下 output[b, i, j, channel] =
sum_{di, dj}(
input[b, strides[1] * i + di, strides[2] * j + dj, channel]
) / sum(1) 支持的张量 OperandCode
支持的张量维度:4,采用“NHWC”或“NCHW”数据布局。默认数据布局 NHWC 的数据存储顺序为:[批次,高度,宽度,通道]。或者,数据布局可以是 NCHW,数据存储顺序为:[批次,通道,高度,宽度]。NCHW 自 NNAPI 功能级别 3 起受支持。 显式填充和隐式填充都受支持。 输入(显式填充)
输入(隐式填充)
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_AXIS_ALIGNED_BBOX_TRANSFORM |
使用边界框增量转换轴对齐的边界框提案。 给定边界框提案的位置和每个类别的相应边界框增量,返回细化的边界框区域。结果边界框会裁剪到图像的边缘。 支持的张量 OperandCode 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_BATCH_MATMUL |
成批执行两个张量的乘法。 将两个输入张量的所有切片相乘,并将各个结果排列在同一批次大小的单个输出张量中。同一批次中的每对切片具有相同的 OperandCode。每个切片在乘法之前都可以选择进行伴随 (转置和共轭)。 两个输入张量和输出张量必须是二维或更高维度,并具有相同的批次大小。 支持的张量 OperandCode
支持的张量维度:至少 2 且最多 4 输入
输出
自 NNAPI 功能级别 6 起可用。 |
ANEURALNETWORKS_BATCH_TO_SPACE_ND |
N 维张量的 BatchToSpace。 此操作将批次维度(维度 0)重塑为 M + 1 个维度,形状为 block_shape + [batch],然后将这些块交织回空间维度 [1, ..., M] 定义的网格中,从而获得与输入具有相同维度的结果。 这是 SpaceToBatch 的反向操作。 支持的张量 OperandCode
支持的张量维度:4,采用“NHWC”或“NCHW”数据布局。默认数据布局 NHWC 的数据存储顺序为:[批次,高度,宽度,通道]。或者,数据布局可以是 NCHW,数据存储顺序为:[批次,通道,高度,宽度]。NCHW 自 NNAPI 功能级别 3 起受支持。 输入
输出
自 NNAPI 功能级别 2 起可用。 |
ANEURALNETWORKS_BIDIRECTIONAL_SEQUENCE_LSTM |
一种循环神经网络层,以正向和反向方向将 LSTM 单元应用于输入序列。 该操作支持通过辅助输入进行交叉链接。常规单元将一个输入馈送到两个 RNN 单元,方式如下: INPUT (INPUT_REVERSED) | | | FW_LSTM BW_LSTM || | FW_OUT BW_OUT 带有交叉链接的操作接受两个输入,并以前馈到 RNN 单元的方式馈送它们: AUX_INPUT (AUX_INPUT_REVERSED) | | INPUT | (INPUT_R'D.)| | | | | | \ / \ / | | FW_LSTM BW_LSTM || | FW_OUT BW_OUT 仅当存在辅助输入和辅助权重时,才会启用交叉链接模式。将此操作堆叠在其自身之上时,这允许将先前单元的正向和反向输出连接到下一个单元的输入。 由于支持 NNAPI 特性级别 4 的并行链接模式,当辅助输入存在但辅助权重被省略时,该模式启用。在这种情况下,单元格以下列方式将输入馈送到 RNN 中: INPUT (AUX_INPUT_REVERSED) | | | FW_LSTM BW_LSTM || | FW_OUT BW_OUT 将此操作堆叠在自身之上时,这允许将前一单元格的正向和反向输出都连接到下一单元格的相应输入。 支持的张量 OperandCode 支持的张量秩:3,可以是时间优先 (time-major) 或批量优先 (batch-major)。 所有输入和输出张量必须具有相同的类型。 输入
输出
自 NNAPI 功能级别 3 起可用。 重要提示:截至 NNAPI 特性级别 3,无法获取输出状态张量,NNAPI 也不维护内部状态。此操作不支持多单元格链式连接并传播状态张量的使用模式。 |
ANEURALNETWORKS_BIDIRECTIONAL_SEQUENCE_RNN |
一个循环神经网络层,对前向和反向输入序列应用基本 RNN 单元格。 此 Op 沿序列维度展开输入,并为序列中的每个元素 s = 1...sequence_length 实现以下操作:fw_outputs[s] = fw_state = activation(inputs[s] * fw_input_weights’ + fw_state * fw_recurrent_weights’ + fw_bias) 并为序列中的每个元素 t = sequence_length : 1 实现以下操作:bw_outputs[t] = bw_state = activation(inputs[t] * bw_input_weights’ + bw_state * bw_recurrent_weights’ + bw_bias) 其中:
该操作支持通过辅助输入进行交叉链接。常规单元将一个输入馈送到两个 RNN 单元,方式如下: INPUT (INPUT_REVERSED) | | | FW_RNN BW_RNN || | FW_OUT BW_OUT 带有交叉链接的操作接受两个输入,并以前馈到 RNN 单元的方式馈送它们: AUX_INPUT (AUX_INPUT_REVERSED) | | INPUT | (INPUT_R'D.)| | | | | | \ / \ / | | FW_RNN BW_RNN || | FW_OUT BW_OUT 仅当存在辅助输入和辅助权重时,才会启用交叉链接模式。将此操作堆叠在其自身之上时,这允许将先前单元的正向和反向输出连接到下一个单元的输入。 由于支持 NNAPI 特性级别 4 的并行链接模式,当辅助输入存在但辅助权重被省略时,该模式启用。在这种情况下,单元格以下列方式将输入馈送到 RNN 中: INPUT (AUX_INPUT_REVERSED) | | | FW_RNN BW_RNN || | FW_OUT BW_OUT 将此操作堆叠在自身之上时,这允许将前一单元格的正向和反向输出都连接到下一单元格的相应输入。 支持的张量 OperandCode 所有输入张量必须具有相同的类型。 输入
自 NNAPI 功能级别 3 起可用。 重要提示:截至 NNAPI 特性级别 3,无法获取输出状态张量,NNAPI 也不维护内部状态。此操作不支持多单元格链式连接并传播状态张量的使用模式。 |
ANEURALNETWORKS_BOX_WITH_NMS_LIMIT |
按得分降序贪婪选择边界框子集。 此操作对每个类别应用 NMS 算法。在每次执行循环中,选择得分最高的框并将其从待处理集合中移除。根据与先前选择的框的交并比 (IOU) 重叠以及指定的 NMS 核方法降低其余框的得分。任何得分低于阈值的框都将从待处理集合中移除。 支持三种 NMS 核:
轴对齐边界框由其左上角坐标 (x1,y1) 和右下角坐标 (x2,y2) 表示。有效的边界框应满足 x1 <= x2 且 y1 <= y2。 支持的张量 OperandCode
输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_CAST |
将张量强制转换为某种类型。 此操作忽略量化张量的比例 (scale) 和零点 (zeroPoint),例如,它将类型为 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 的输入视为 uint8 值的张量。 支持的张量 OperandCode
支持的张量维度:从 1 起 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_CHANNEL_SHUFFLE |
打乱输入张量的通道。 给定输入张量和一个整数值 num_groups,CHANNEL_SHUFFLE 将通道维度分成 num_groups 组,并通过将每组中具有相同索引的通道组合在一起来重新组织通道。 沿通道维度,输出使用以下公式计算: output_channel[k * num_groups + g] = input_channel[g * group_size + k] 其中 group_size = num_channels / num_groups。 通道数必须可被 num_groups 整除。 支持的张量 OperandCode
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_CONCATENATION |
沿给定维度连接输入张量。 输入张量必须具有相同的 OperandCode 和除连接轴外的相同维度。 支持的张量 OperandCode
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_CONV_2D |
执行 2-D 卷积操作。 CONV_2D 操作会扫过一个可以将通道混合在一起的 2-D 滤波器,将其应用于一批图像,对每个图像的适当大小的每个窗口应用滤波器。 输出维度是滤波器维度、步幅和填充的函数。 输出张量中的值计算如下 output[b, i, j, channel] = sum_{di, dj, k} ( input[b, strides[1] * i + di, strides[2] * j + dj, k] * filter[channel, di, dj, k] ) + bias[channel] 支持的张量 OperandCode 配置:
自 NNAPI 特性级别 3 起可用
自 NNAPI 特性级别 4 起可用
支持的张量维度:4,采用“NHWC”或“NCHW”数据布局。默认数据布局 NHWC 的数据存储顺序为:[批次,高度,宽度,通道]。或者,数据布局可以是 NCHW,数据存储顺序为:[批次,通道,高度,宽度]。NCHW 自 NNAPI 功能级别 3 起受支持。 显式填充和隐式填充都受支持。 输入(显式填充)
输入(隐式填充)
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_DEPTHWISE_CONV_2D |
执行逐深度 2-D 卷积操作。 给定一个形状为 [batches, height, width, depth_in] 的输入张量和一个形状为 [1, filter_height, filter_width, depth_out] 包含 depth_out 个深度为 1 的卷积滤波器的滤波器张量,DEPTHWISE_CONV 对每个输入通道应用不同的滤波器(从 1 个通道扩展到每个通道 channel_multiplier 个通道),然后将结果连接在一起。 输出的深度为 depth_out = depth_in * depth_multiplier 通道。输出维度是滤波器维度、步长和填充的函数。 输出张量中的值计算如下 output[b, i, j, k * channel_multiplier + q] = sum_{di, dj} ( input[b, strides[1] * i + di, strides[2] * j + dj, k] * filter[1, di, dj, k * channel_multiplier + q] ) + bias[k * channel_multiplier + q] 支持的张量 OperandCode 配置:
自 NNAPI 特性级别 3 起可用
自 NNAPI 特性级别 4 起可用
支持的张量维度:4,采用“NHWC”或“NCHW”数据布局。默认数据布局 NHWC 的数据存储顺序为:[批次,高度,宽度,通道]。或者,数据布局可以是 NCHW,数据存储顺序为:[批次,通道,高度,宽度]。NCHW 自 NNAPI 功能级别 3 起受支持。 显式填充和隐式填充都受支持。 输入(显式填充)
输入(隐式填充)
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_DEPTH_TO_SPACE |
将数据从深度重新排列到空间数据块中。 更具体地说,此操作输出输入张量的一个副本,其中来自深度维度的值在空间块中移动到高度和宽度维度。值 block_size 表示输入块大小以及数据如何移动。 大小为 block_size * block_size 的数据块从深度维度重新排列到大小为 block_size x block_size 的非重叠块中。 输出张量的宽度是 input_depth * block_size,而高度是 input_height * block_size。输入张量的深度必须可被 block_size * block_size 整除。 支持的张量 OperandCode
支持的张量维度:4,采用“NHWC”或“NCHW”数据布局。默认数据布局 NHWC 的数据存储顺序为:[批次,高度,宽度,通道]。或者,数据布局可以是 NCHW,数据存储顺序为:[批次,通道,高度,宽度]。NCHW 自 NNAPI 功能级别 3 起受支持。 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_DEQUANTIZE |
对输入张量进行反量化。 公式为: output = (input - zeroPoint) * scale. 支持的输入张量 OperandCode:
支持的输出张量 OperandCode:
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_DETECTION_POSTPROCESSING |
对边界框检测应用后处理步骤。 边界框检测是通过对一组预定义的锚点应用变换,并结合边界框回归产生的边界框 delta 来生成的。最后应用硬 NMS 步骤来限制返回的框的数量。 支持的张量 OperandCode 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_DIV |
两个张量的逐元素相除。 接收两个具有相同 OperandCode 和兼容维度的输入张量。输出是将第一个输入张量除以第二个张量的结果,可选择通过激活函数进行修改。 对于 ANEURALNETWORKS_TENSOR_INT32 类型的输入,执行“整除”(Python 中的“//”)。例如,5 // 2 = 2,-5 // 2 = -3。 当两个维度满足以下条件之一时兼容
输出的大小是输入操作数沿每个维度的最大大小。它从尾部维度开始,向前推进。 示例:input1.dimension = {4, 1, 2},input2.dimension = {5, 4, 3, 1},output.dimension = {5, 4, 3, 2} 自 NNAPI 功能级别 3 起,支持泛型零大小输入张量。零维度仅与 0 或 1 兼容。如果任一对应输入维度为零,则输出维度的大小为零。 支持的张量 OperandCode
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 2 起可用。 |
ANEURALNETWORKS_ELU |
逐元素计算输入张量的指数线性激活。 输出使用以下公式计算: ELU(x) = max(0, x) + min(0, alpha * (exp(x) - 1)) 支持的张量 OperandCode 支持的张量维度:从 1 起。 输入
输出
自 NNAPI 功能级别 4 起可用。 |
ANEURALNETWORKS_EMBEDDING_LOOKUP |
在输入张量中查找子张量。 此操作接收一个值张量 (Values) 和一个一维选择索引张量 (Lookups) 作为输入。输出张量是 Values 中由 Lookups 选择的子张量的串联。 可以将 Values 沿其第一个维度切片:Lookups 中的条目选择哪些切片被串联在一起以创建输出张量。 例如,如果 Values 的形状为 [40, 200, 300],Lookups 的形状为 [3],则 Lookups 中的所有三个值都应在 0 到 39 之间。结果张量的形状必须为 [3, 200, 300]。 如果 Lookups 中的某个值超出范围,操作必须失败并报告错误。 支持的值张量 OperandCode:
支持的值张量秩:从 2 开始 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_EQUAL |
对于输入张量 x 和 y,计算 x == y(逐元素)。 支持的张量 OperandCode
支持的张量维度:从 1 起 此操作支持广播。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_EXP |
逐元素计算 x 的指数。 支持的张量 OperandCode 支持的张量维度:从 1 起。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_EXPAND_DIMS |
在张量的形状中插入一个大小为 1 的维度。 给定输入张量 input,此操作在 input 形状的给定维度索引处插入一个大小为 1 的维度。维度索引从零开始;如果指定负维度索引,则从末尾向后计数。 支持的张量 OperandCode
支持的张量维度:从 1 起 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_FILL |
创建一个填充标量值的张量。 支持的输出张量 OperandCode: 支持的张量维度:从 1 起。 输入
输出
自 NNAPI 功能级别 4 起可用。 |
ANEURALNETWORKS_FLOOR |
逐元素计算输入张量的 floor()。 支持的张量 OperandCode
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_FULLY_CONNECTED |
表示一个全连接(密集)层,它将输入张量中的所有元素与输出张量中的每个元素连接起来。 此层实现以下操作: outputs = activation(inputs * weights’ + bias) 支持的张量 OperandCode
支持的张量秩:最高 4。 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_GATHER |
沿轴收集值。 生成一个输出张量,其形状为 input0.dimension[:axis] + indices.dimension + input0.dimension[axis + 1:],其中: 向量索引(输出秩为 rank(input0))。output[a_0, ..., a_n, i, b_0, ..., b_n] = input0[a_0, ..., a_n, indices[i], b_0, ..., b_n]
更高秩索引(输出秩为 rank(input0) + rank(indices) - 1)。output[a_0, ..., a_n, i, ..., j, b_0, ... b_n] = input0[a_0, ..., a_n, indices[i, ..., j], b_0, ..., b_n] 支持的张量 OperandCode
支持的张量维度:从 1 起 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_GENERATE_PROPOSALS |
生成轴对齐的边界框提议。 通过对一组预定义锚点应用变换,并结合边界框回归得到的边界框偏移量,生成边界框提议。最后应用硬非极大值抑制 (NMS) 步骤来限制返回的边界框数量。 轴对齐边界框由其左上角坐标 (x1,y1) 和右下角坐标 (x2,y2) 表示。有效的边界框应满足 x1 <= x2 且 y1 <= y2。 支持的张量 OperandCode
输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_GREATER |
对于输入张量 x 和 y,逐元素计算 x > y。 支持的张量 OperandCode
支持的张量维度:从 1 起 此操作支持广播。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_GREATER_EQUAL |
对于输入张量 x 和 y,逐元素计算 x >= y。 支持的张量 OperandCode
支持的张量维度:从 1 起 此操作支持广播。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_GROUPED_CONV_2D |
执行分组二维卷积操作。 给定一个形状为 [batches, height, width, depth_in] 的输入张量和一个形状为 [depth_out, filter_height, filter_width, depth_group] 的滤波器张量(其中包含 depth_out 个深度为 depth_group 的卷积滤波器),GROUPED_CONV 将一组不同的滤波器应用于每个输入通道组,然后将结果连接在一起。 具体来说,输入通道被分成 num_groups 组,每组深度为 depth_group,即 depth_in = num_groups * depth_group。卷积滤波器也被分成 num_groups 组,即 depth_out 可被 num_groups 整除。GROUPED_CONV 将每组滤波器应用于相应的输入通道组,并将结果连接在一起。 输出维度是滤波器维度、步幅和填充的函数。 输出张量中的值计算如下 output[b, i, j, g * channel_multiplier + q] = sum_{di, dj, dk} ( input[b, strides[1] * i + di, strides[2] * j + dj, g * depth_group + dk] * filter[g * channel_multiplier + q, di, dj, dk] ) + bias[channel] 其中 channel_multiplier = depth_out / num_groups 支持的张量 OperandCode 配置:
支持的张量秩:4,数据布局为 "NHWC" 或 "NCHW"。默认数据布局为 NHWC,数据按以下顺序存储:[batch, height, width, channels]。或者,数据布局可以是 NCHW,数据存储顺序为:[batch, channels, height, width]。 显式填充和隐式填充都受支持。 输入(显式填充)
输入(隐式填充)
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_HARD_SWISH |
对输入张量逐元素计算 hard-swish 激活函数。 Hard swish 激活函数在 https://arxiv.org/pdf/1905.02244.pdf 中引入。 输出使用以下公式计算: h-swish(x) = x * max(0, min(6, (x + 3))) / 6 支持的张量 OperandCode
支持的张量维度:从 1 起。 输入
输出
自 NNAPI 功能级别 4 起可用。 |
ANEURALNETWORKS_HASHTABLE_LOOKUP |
使用键值映射在输入张量中查找子张量。 此操作符的输入是一个值张量 (Values)、一个一维选择值张量 (Lookups) 和一个将这些值映射到 Values 索引的一维张量 (Keys)。输出张量是根据 Lookups 通过 Keys 选择的 Values 子张量的串联。 可以将 Values 视为沿其最外层维度切片。输出是选定切片的串联,Lookups 的每个条目对应一个切片。选定的切片是与 Lookups 中值匹配的 Keys 条目具有相同索引的切片。 对于匹配(命中),相应的 Values 子张量包含在输出张量中。对于不匹配(未命中),输出中相应的子张量必须具有零值。 例如,如果 Values 的形状为 [40, 200, 300],则 Keys 的形状应为 [40]。如果 Lookups 张量的形状为 [3],则将串联三个切片,因此结果张量的形状必须为 [3, 200, 300]。如果 Lookups 中的第一个条目值为 123456,则该值必须位于 Keys 张量中。如果 Keys 的第六个条目包含 123456,则必须选择 Values 的第六个切片。如果 Keys 中没有条目包含 123456,则必须串联一个零值切片。 支持的值张量 OperandCode: 支持的值张量秩:从 2 开始 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_HEATMAP_MAX_KEYPOINT |
从热力图中定位最大关键点。 此操作通过使用高达二次项的泰勒展开式,在双三次插值上采样后近似精确的最大关键点得分和索引。 边界框由其在原始图像中的左上角坐标 (x1,y1) 和右下角坐标 (x2,y2) 表示。有效的边界框应满足 x1 <= x2 和 y1 <= y2。 支持的张量 OperandCode
支持的张量秩:4,数据布局为 "NHWC" 或 "NCHW"。默认数据布局为 NHWC,数据按以下顺序存储:[batch, height, width, channels]。或者,数据布局可以是 NCHW,数据存储顺序为:[batch, channels, height, width]。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_IF |
根据布尔值确定执行两个引用模型中的一个。 两个引用模型的输入和输出必须与此操作的签名一致。也就是说,如果操作有 (3 + n) 个输入和 m 个输出,则两个模型都必须有 n 个输入和 m 个输出,并且具有与相应操作输入和输出相同的类型、秩(如果指定)、维度(如果指定)、scales、zeroPoints 和其他操作数参数。 输入
输出
自 NNAPI 功能级别 4 起可用。 |
ANEURALNETWORKS_INSTANCE_NORMALIZATION |
对输入张量应用实例归一化。 输出张量中的值计算如下 output[b, h, w, c] = (input[b, h, w, c] - mean[b, c]) * gamma / sqrt(var[b, c] + epsilon) + beta 其中均值和方差是在空间维度上计算的 mean[b, c] = sum_{h, w}(input[b, h, w, c]) / sum(1) var[b, c] = sum_{h, w}(pow(input[b, h, w, c] - mean[b, c], 2)) / sum(1) 支持的张量 OperandCode 支持的张量秩:4,数据布局为 "NHWC" 或 "NCHW"。默认数据布局为 NHWC,数据按以下顺序存储:[batch, height, width, channels]。或者,数据布局可以是 NCHW,数据存储顺序为:[batch, channels, height, width]。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_L2_NORMALIZATION |
沿轴维度应用 L2 归一化。 输出张量中的值计算如下 output[batch, row, col, channel] = input[batch, row, col, channel] / sqrt(sum_{c} pow(input[batch, row, col, c], 2)) 默认情况下,轴维度是输入张量的最后一个维度。 支持的张量 OperandCode
支持的张量秩:最高 4。秩小于 4 的张量仅从 NNAPI feature level 3 开始支持。 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_L2_POOL_2D |
执行二维 L2 池化操作。 输出维度是滤波器维度、步幅和填充的函数。 输出张量中的值计算如下 output[b, i, j, c] =
sqrt(sum_{di, dj} pow(input[b, strides[1] * i + di, strides[2] * j + dj, c], 2) /
sum(1)) 支持的张量 OperandCode
支持的张量维度:4,采用“NHWC”或“NCHW”数据布局。默认数据布局 NHWC 的数据存储顺序为:[批次,高度,宽度,通道]。或者,数据布局可以是 NCHW,数据存储顺序为:[批次,通道,高度,宽度]。NCHW 自 NNAPI 功能级别 3 起受支持。 显式填充和隐式填充都受支持。 输入(显式填充)
输入(隐式填充)
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_LESS |
对于输入张量 x 和 y,逐元素计算 x < y。 支持的张量 OperandCode
支持的张量维度:从 1 起 此操作支持广播。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_LESS_EQUAL |
对于输入张量 x 和 y,逐元素计算 x <= y。 支持的张量 OperandCode
支持的张量维度:从 1 起 此操作支持广播。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_LOCAL_RESPONSE_NORMALIZATION |
沿深度维度应用局部响应归一化。 四维输入张量被视为由一维向量(沿最后一个维度)组成的三维数组,每个向量独立进行归一化。在给定的向量中,每个分量除以 depth_radius 范围内的输入加权平方和。 输出使用此公式计算 sqr_sum[a, b, c, d] = sum( pow(input[a, b, c, d - depth_radius : d + depth_radius + 1], 2)) output = input / pow((bias + alpha * sqr_sum), beta) 对于秩小于 4 的输入张量,独立地沿指定维度对每个一维切片进行归一化。 支持的张量 OperandCode
支持的张量秩:最高 4。秩小于 4 的张量仅从 NNAPI feature level 3 开始支持。 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_LOG |
逐元素计算 x 的自然对数。 支持的张量 OperandCode 支持的张量维度:从 1 起。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_LOGICAL_AND |
逐元素返回 x AND y 的真值。 支持的张量 OperandCode 支持的张量维度:从 1 起 此操作支持广播。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_LOGICAL_NOT |
逐元素计算 NOT x 的真值。 支持的张量 OperandCode 支持的张量维度:从 1 起。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_LOGICAL_OR |
逐元素返回 x OR y 的真值。 支持的张量 OperandCode 支持的张量维度:从 1 起 此操作支持广播。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_LOGISTIC |
对输入张量逐元素计算 sigmoid 激活函数。 输出使用此公式计算 output = 1 / (1 + exp(-input)) 支持的张量 OperandCode
支持的张量秩:最高 4。 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_LOG_SOFTMAX |
计算给定 logits 的 log softmax 激活值。 输出使用此公式计算 output = logits * beta - log(reduce_sum(exp(logits * beta), axis)) 支持的张量 OperandCode 支持的张量维度:从 1 起。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_LSH_PROJECTION |
通过局部敏感哈希将输入投影到位向量。 支持的输入张量 OperandCode:
支持的输入张量秩:从 1 开始 输入
输出
从 NNAPI feature level 1 开始可用。稀疏投影的偏移值在 NNAPI feature level 3 中添加。 |
ANEURALNETWORKS_LSTM |
在长短期记忆 (LSTM) 层中执行单个时间步。 LSTM 操作由以下公式描述。 \begin{eqnarray*} i_t =& \sigma(W_{xi}x_t+W_{hi}h_{t-1}+W_{ci}C_{t-1}+b_i) & \\ f_t =& \sigma(W_{xf}x_t+W_{hf}h_{t-1}+W_{cf}C_{t-1}+b_f) & \\ C_t =& clip(f_t \odot C_{t-1} + i_t \odot g(W_{xc}x_t+W_{hc}h_{t-1}+b_c),\ t_{cell}) & \\ o_t =& \sigma(W_{xo}x_t+W_{ho}h_{t-1}+W_{co}C_t+b_o) & \\ & & \\ & clip(W_{proj}(o_t \odot g(C_t))+b_{proj},\ t_{proj}) & if\ there\ is\ a\ projection; \\ h_t =& & \\ & o_t \odot g(C_t) & otherwise. \\ \end{eqnarray*} 其中
自 NNAPI feature level 3 起,LSTM 支持层归一化。如果使用层归一化,则内部激活函数(sigmoid 和 $g$)的输入将按照 https://arxiv.org/pdf/1607.06450.pdf 第 3.1 节的方法进行归一化、重新缩放和重新定中心。 该操作具有以下独立可选输入
参考资料 默认的非 peephole、非 CIFG 实现基于:http://www.bioinf.jku.at/publications/older/2604.pdf S. Hochreiter 和 J. Schmidhuber。"Long Short-Term Memory"。Neural Computation, 9(8):1735-1780, 1997。 peephole 实现和投影层基于:https://research.google.com/pubs/archive/43905.pdf Hasim Sak, Andrew Senior, and Francoise Beaufays。"用于大规模声学建模的长短期记忆循环神经网络架构"。INTERSPEECH, 2014。(然而,peephole 优化的概念在此论文之前的工作中已被引入。) 输入门和遗忘门耦合 (CIFG) 基于:http://arxiv.org/pdf/1503.04069.pdf Greff et al. "LSTM: A Search Space Odyssey" 层归一化基于:https://arxiv.org/pdf/1607.06450.pdf Jimmy Ba et al. "Layer Normalization" 支持的张量 OperandCode
所有输入和输出张量必须具有相同的类型。 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_MAXIMUM |
返回两个张量的逐元素最大值。 支持的张量 OperandCode
支持的张量维度:从 1 起。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_MAX_POOL_2D |
执行二维最大池化操作。 输出维度是滤波器维度、步幅和填充的函数。 输出张量中的值计算如下 output[b, i, j, channel] =
max_{di, dj} (
input[b, strides[1] * i + di, strides[2] * j + dj, channel]
) 支持的张量 OperandCode
支持的张量维度:4,采用“NHWC”或“NCHW”数据布局。默认数据布局 NHWC 的数据存储顺序为:[批次,高度,宽度,通道]。或者,数据布局可以是 NCHW,数据存储顺序为:[批次,通道,高度,宽度]。NCHW 自 NNAPI 功能级别 3 起受支持。 显式填充和隐式填充都受支持。 输入(显式填充)
输入(隐式填充)
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_MEAN |
计算张量元素在维度上的均值。 沿给定的维度对输入张量进行归约。除非 keep_dims 为 true,否则张量的秩将为 axis 中每个条目减少 1。如果 keep_dims 为 true,则归约的维度将保留长度为 1。 支持的张量 OperandCode
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 2 起可用。 |
ANEURALNETWORKS_MINIMUM |
返回两个张量的逐元素最小值。 支持的张量 OperandCode
支持的张量维度:从 1 起。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_MIRROR_PAD |
使用镜像值对张量进行填充。 此操作符指定两种填充模式之一:REFLECT 或 SYMMETRIC。在 REFLECT 模式下,镜像不包括填充侧的边界元素。在 SYMMETRIC 模式下,镜像包括填充侧的边界元素。 例如,如果输入是一维张量
支持的张量 OperandCode
支持的张量维度:从 1 起。 输入
输出
从 NNAPI feature level 7 开始可用。 |
ANEURALNETWORKS_MUL |
逐元素乘以两个张量。 接受两个具有相同 OperandCode 和兼容维度的输入张量。输出是两个输入张量的乘积,可选地由激活函数修改。 当两个维度满足以下条件之一时兼容
结果输出的大小是沿输入操作数每个维度的最大大小。它从末尾维度开始,向前推进。 自 NNAPI 功能级别 3 起,支持泛型零大小输入张量。零维度仅与 0 或 1 兼容。如果任一对应输入维度为零,则输出维度的大小为零。 支持的张量 OperandCode
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_NEG |
按元素计算数值负值。 支持的张量 OperandCode 支持的张量维度:从 1 起。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_NOT_EQUAL |
对于输入张量 x 和 y,按元素计算 x != y。 支持的张量 OperandCode
支持的张量维度:从 1 起 此操作支持广播。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_PACK |
将 N 个秩为 R 的输入张量(N >= 1)打包成一个秩为 R+1 的输出张量。 沿着给定的轴打包张量。 输入张量必须具有相同的 OperandCode 和维度。 例如,假设有 N 个形状为 (A, B, C) 的输入张量。如果轴为 0,则输出张量的形状将为 (N, A, B, C)。如果轴为 1,则输出张量的形状将为 (A, N, B, C)。 通过轴维度计算的所有维度决定了输出块的数量;剩余的维度决定了块的形状。 回到形状为 (A, B, C) 的 N 个输入张量的例子。如果轴为 0,则输出中有 N 个块,每个块的形状为 (A, B, C)。如果轴为 1,则输出中有 A*N 个块,每个块的形状为 (B, C)。 输出张量中一个块的坐标是 (t[0],...,t[axis])。输入张量中一个块的坐标是 (t[0],...,t[axis-1])。(如果轴为 0,输入张量由单个块组成。)如果我们从 0 开始索引输入张量(而不是按操作数编号),则 output_tile[t[0],...,t[axis]] = input_tile[t[axis]][t[0],...,t[axis-1]]。也就是说,除了轴坐标之外的所有输出块坐标都选择某个输入张量内的相应位置;而轴坐标选择输入张量。 支持的张量 OperandCode
支持的输入张量秩:从 1 开始 输入
输出
自 NNAPI 功能级别 6 起可用。 |
ANEURALNETWORKS_PAD |
填充张量。 此操作根据指定的填充来填充张量。 支持的张量 OperandCode
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 2 起可用。 |
ANEURALNETWORKS_PAD_V2 |
根据指定的填充,使用给定的常数值填充张量。 支持的张量 OperandCode
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_POW |
计算一个值的幂。 给定一个张量 base 和一个张量 exponent,此操作按元素计算 base^exponent。 此操作支持广播。输出的尺寸是输入操作数每个维度的最大尺寸。它从尾部维度开始,向前推进。 For example: base.dimension = {4, 1, 2} exponent.dimension = {5, 4, 3, 1} output.dimension = {5, 4, 3, 2} 支持的张量 OperandCode 支持的张量维度:从 1 起 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_PRELU |
参数化修正线性单元。 其遵循:f(x) = alpha * x 当 x < 0 时,f(x) = x 当 x >= 0 时,其中 alpha 是一个与输入 x 具有相同 OperandCode 和兼容维度的学习数组。 当两个维度满足以下条件之一时兼容
输出的大小是输入操作数沿每个维度的最大大小。它从尾部维度开始,向前推进。 Example: input.dimension = {4, 1, 2} alpha.dimension = {5, 4, 3, 1} output.dimension = {5, 4, 3, 2} 支持的张量 OperandCode
支持的张量维度:从 1 起 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_QUANTIZE |
对输入张量进行量化。 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 输出张量的公式为 output = max(0, min(255, round(input / scale) + zeroPoint) ANEURALNETWORKS_TENSOR_QUANT8_ASYMM_SIGNED 输出张量的公式为 output = max(-128, min(127, round(input / scale) + zeroPoint) 支持的输入张量 OperandCode: 支持的输出张量 OperandCode: 支持的张量维度:从 1 起 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_QUANTIZED_16BIT_LSTM |
一种量化 LSTM 的版本,使用 16 位量化处理内部状态。 没有投影层,因此单元状态大小等于输出大小。 输入
输出
|
ANEURALNETWORKS_QUANTIZED_LSTM |
ANEURALNETWORKS_LSTM 的量化版本。 输入和输出使用非对称量化类型,而其余部分使用对称量化类型。 输入
输出
自 NNAPI 功能级别 4 起可用。 |
ANEURALNETWORKS_RANDOM_MULTINOMIAL |
从多项分布中抽取样本。 支持的张量 OperandCode 输入
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_RANK |
返回张量的秩。 张量的秩是其维度的数量。也称为“阶”(order)、“度”(degree)、“维数”(ndims)。 支持的张量 OperandCode
支持的张量维度:从 1 起。 输入
输出
自 NNAPI 功能级别 4 起可用。 |
ANEURALNETWORKS_REDUCE_ALL |
通过计算给定维度上元素的“逻辑与”来缩减张量。 如果 keep_dims 为 true,则保留被缩减的维度,其长度为 1。否则,张量的秩会因 dimensions 中的每个条目而减小 1。 支持的张量 OperandCode 支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_REDUCE_ANY |
通过计算给定维度上元素的“逻辑或”来缩减张量。 如果 keep_dims 为 true,则保留被缩减的维度,其长度为 1。否则,张量的秩会因 dimensions 中的每个条目而减小 1。 支持的张量 OperandCode 支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_REDUCE_MAX |
通过计算给定维度上元素的最大值来缩减张量。 如果 keep_dims 为 true,则保留被缩减的维度,其长度为 1。否则,张量的秩会因 dimensions 中的每个条目而减小 1。 支持的张量 OperandCode
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_REDUCE_MIN |
通过计算给定维度上元素的最小值来缩减张量。 如果 keep_dims 为 true,则保留被缩减的维度,其长度为 1。否则,张量的秩会因 dimensions 中的每个条目而减小 1。 支持的张量 OperandCode
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_REDUCE_PROD |
通过将给定维度上元素相乘来缩减张量。 如果 keep_dims 为 true,则保留被缩减的维度,其长度为 1。否则,张量的秩会因 dimensions 中的每个条目而减小 1。 支持的张量 OperandCode 支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_REDUCE_SUM |
通过对给定维度上元素求和来缩减张量。 如果 keep_dims 为 true,则保留被缩减的维度,其长度为 1。否则,张量的秩会因 dimensions 中的每个条目而减小 1。 支持的张量 OperandCode 支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_RELU |
对输入张量按元素计算修正线性激活。 输出使用此公式计算 output = max(0, input) 支持的张量 OperandCode
支持的张量秩:最高 4。 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_RELU1 |
对输入张量按元素计算修正线性 1 激活。 输出使用此公式计算 output = min(1.f, max(-1.f, input)) 支持的张量 OperandCode
支持的张量秩:最高 4。 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_RELU6 |
对输入张量按元素计算修正线性 6 激活。 输出使用此公式计算 output = min(6, max(0, input)) 支持的张量 OperandCode
支持的张量秩:最高 4。 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_RESHAPE |
重塑张量。 给定一个张量,此操作返回一个与该张量具有相同值但形状新指定的张量。 支持的张量 OperandCode
支持的张量秩:最高 4。 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_RESIZE_BILINEAR |
使用双线性插值将图像大小调整为给定尺寸。 如果调整大小后的图像输出宽高比与输入宽高比不同,则图像可能会失真。输出的角像素可能与输入的角像素不同。 支持的张量 OperandCode
支持的张量维度:4,采用“NHWC”或“NCHW”数据布局。默认数据布局 NHWC 的数据存储顺序为:[批次,高度,宽度,通道]。或者,数据布局可以是 NCHW,数据存储顺序为:[批次,通道,高度,宽度]。NCHW 自 NNAPI 功能级别 3 起受支持。 支持按形状调整大小和按比例调整大小两种方式。 输入 (按形状调整大小)
输入 (按比例调整大小,自 NNAPI 功能级别 3 起)
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_RESIZE_NEAREST_NEIGHBOR |
使用最近邻插值将图像大小调整为给定尺寸。 如果调整大小后的图像输出宽高比与输入宽高比不同,则图像可能会失真。输出的角像素可能与输入的角像素不同。 支持的张量 OperandCode
支持的张量秩:4,数据布局为 "NHWC" 或 "NCHW"。默认数据布局为 NHWC,数据按以下顺序存储:[batch, height, width, channels]。或者,数据布局可以是 NCHW,数据存储顺序为:[batch, channels, height, width]。 支持按形状调整大小和按比例调整大小两种方式。 输入 (按形状调整大小)
输入 (按比例调整大小)
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_REVERSE |
反转张量的指定维度。 支持的张量 OperandCode
支持的张量秩:最高 8。 输入
输出
从 NNAPI feature level 7 开始可用。 |
ANEURALNETWORKS_RNN |
一个基本循环神经网络层。 此层实现操作:outputs = state = activation(inputs * input_weights + state * recurrent_weights + bias) 其中:
支持的张量 OperandCode
所有输入张量必须具有相同的类型。 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_ROI_ALIGN |
通过对双线性插值获得的采样点进行平均池化,选择并缩放每个感兴趣区域的特征图到统一的输出尺寸。 感兴趣区域由其在原始图像中的左上角坐标 (x1,y1) 和右下角坐标 (x2,y2) 表示。应用空间缩放因子以映射到特征图坐标。有效的感兴趣区域应满足 x1 <= x2 和 y1 <= y2。 此操作不应用舍入。采样点在池化 bin 中均匀分布,其值通过双线性插值计算。 支持的张量 OperandCode
支持的张量秩:4,数据布局为 "NHWC" 或 "NCHW"。默认数据布局为 NHWC,数据按以下顺序存储:[batch, height, width, channels]。或者,数据布局可以是 NCHW,数据存储顺序为:[batch, channels, height, width]。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_ROI_POOLING |
通过最大池化,选择并缩放每个感兴趣区域的特征图到统一的输出尺寸。 感兴趣区域由其在原始图像中的左上角坐标 (x1,y1) 和右下角坐标 (x2,y2) 表示。应用空间缩放因子以映射到特征图坐标。有效的感兴趣区域应满足 x1 <= x2 和 y1 <= y2。 此操作应用舍入以确保感兴趣区域和池化 bin 的整数边界。 支持的张量 OperandCode
支持的张量秩:4,数据布局为 "NHWC" 或 "NCHW"。默认数据布局为 NHWC,数据按以下顺序存储:[batch, height, width, channels]。或者,数据布局可以是 NCHW,数据存储顺序为:[batch, channels, height, width]。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_RSQRT |
按元素计算 x 的平方根的倒数。 支持的张量 OperandCode
支持的张量维度:从 1 起。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_SELECT |
使用布尔张量 c 和输入张量 x 和 y 按元素从两个输入张量中选择值 O[i] = C[i] ? x[i] : y[i]. 支持的张量 OperandCode
支持的张量维度:从 1 起 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_SIN |
按元素计算 x 的 sin。 支持的张量 OperandCode 支持的张量维度:从 1 起。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_SLICE |
从指定位置开始,从输入张量中提取指定尺寸的切片。 起始位置指定为一个一维张量,包含每个维度的偏移量。尺寸指定为一个一维张量,包含相应维度上切片的尺寸或 -1。在后一种情况下,该维度的所有剩余元素都包含在切片中。 开始偏移量和切片尺寸之和不能超过相应维度的尺寸。 支持的张量 OperandCode
支持的张量维度:从 1 起 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_SOFTMAX |
通过对输入向量进行归一化,使最大系数为零,从而按元素、按批次计算输入张量的 Softmax 激活。 输出使用此公式计算 output[batch, i] = exp((input[batch, i] - max(input[batch, :])) * beta) / sum_{k}{exp((input[batch, k] - max(input[batch, :])) * beta)} 对于秩非 2 的输入张量,激活将沿指定维度独立应用于每个一维切片。 支持的张量 OperandCode
支持的张量秩:最高 4。自 NNAPI 功能级别 3 起,仅支持秩非 2 或 4 的张量。 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_SPACE_TO_BATCH_ND |
N 维张量的 SpaceToBatch 操作。 此操作将输入的空间维度 [1, ..., M] 分割为形状为 block_shape 的块网格,并将这些块与批次维度 (0) 交错,以便在输出中,空间维度 [1, ..., M] 对应于网格内的位置,而批次维度则结合了空间块内的位置和原始批次位置。在分割成块之前,输入的空间维度可以选择根据 paddings 进行零填充。 支持的张量 OperandCode
支持的张量维度:4,采用“NHWC”或“NCHW”数据布局。默认数据布局 NHWC 的数据存储顺序为:[批次,高度,宽度,通道]。或者,数据布局可以是 NCHW,数据存储顺序为:[批次,通道,高度,宽度]。NCHW 自 NNAPI 功能级别 3 起受支持。 输入
输出
自 NNAPI 功能级别 2 起可用。 |
ANEURALNETWORKS_SPACE_TO_DEPTH |
将空间数据的块重新排列到深度。 更具体地说,此操作输出输入张量的副本,其中来自高度和宽度维度中的值被移到深度维度。block_size 值指示输入块大小以及数据移动的方式。 大小为 block_size * block_size 的数据块从深度维度重新排列到大小为 block_size x block_size 的非重叠块中。 输出张量的深度是 input_depth * block_size * block_size。输入张量的高度和宽度必须能被 block_size 整除。 支持的张量 OperandCode
支持的张量维度:4,采用“NHWC”或“NCHW”数据布局。默认数据布局 NHWC 的数据存储顺序为:[批次,高度,宽度,通道]。或者,数据布局可以是 NCHW,数据存储顺序为:[批次,通道,高度,宽度]。NCHW 自 NNAPI 功能级别 3 起受支持。 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_SPLIT |
沿给定轴将张量分成 num_splits 个子张量。 支持的张量 OperandCode
支持的张量维度:从 1 起 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_SQRT |
计算 x 的逐元素平方根。 支持的张量 OperandCode 支持的张量维度:从 1 起。 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_SQUEEZE |
从张量形状中移除大小为 1 的维度。 给定一个输入张量,此操作返回一个具有相同 OperandCode 的张量,并移除所有大小为 1 的维度。如果您不想移除所有大小为 1 的维度,可以通过指定轴 (input1) 来移除特定的尺寸为 1 的维度。 支持的张量 OperandCode
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 2 起可用。 |
ANEURALNETWORKS_STRIDED_SLICE |
提取张量的带步长切片。 大致来说,此操作从给定输入张量中提取大小为 (end - begin) / stride 的切片。从由 begin 指定的位置开始,通过向索引添加 stride 继续切片,直到所有维度都不小于 end。请注意,步长可以是负数,这会导致反向切片。 支持的张量 OperandCode
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 2 起可用。 |
ANEURALNETWORKS_SUB |
两个张量的逐元素相减。 接受两个具有相同 OperandCode 和兼容维度的输入张量。输出是将第二个输入张量从第一个张量中减去的结果,可选择通过激活函数进行修改。 当两个维度满足以下条件之一时兼容
输出的大小是输入操作数沿每个维度的最大大小。它从尾部维度开始,向前推进。 示例:input1.dimension = {4, 1, 2},input2.dimension = {5, 4, 3, 1},output.dimension = {5, 4, 3, 2} 自 NNAPI 功能级别 3 起,支持泛型零大小输入张量。零维度仅与 0 或 1 兼容。如果任一对应输入维度为零,则输出维度的大小为零。 支持的张量 OperandCode
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 2 起可用。 |
ANEURALNETWORKS_SVDF |
SVDF 操作是一种有状态层,其概念源自:一个处理输入帧序列的密集连接层可以通过对其每个节点的奇异值分解来近似。 实现基于 https://research.google.com/pubs/archive/43813.pdf P. Nakkiran, R. Alvarez, R. Prabhavalkar, C. Parada. “Compressing Deep Neural Networks using a Rank-Constrained Topology”. INTERSPEECH, 2015. 它使用两阶段过滤机制处理传入的输入
具体来说,对于 rank 1,此层实现以下操作 memory = push(conv1d(inputs, weights_feature, feature_dim, "ANEURALNETWORKS_PADDING_VALID")); outputs = activation(memory * weights_time + bias); 其中:
每个 rank 通过堆叠滤波器向权重矩阵添加一个维度。 支持的张量 OperandCode
所有输入张量必须是相同的类型。 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_TANH |
计算输入张量的逐元素双曲正切。 输出使用此公式计算 output = tanh(input) 支持的张量 OperandCode
支持的张量秩:最高 4。 输入
输出
自 NNAPI 功能级别 1 起可用。 |
ANEURALNETWORKS_TILE |
通过平铺给定张量来构造张量。 此操作通过将 支持的张量 OperandCode
支持的张量维度:从 1 起 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_TOPK_V2 |
查找最后一个维度的 k 个最大条目的值和索引。 每个维度的结果值按降序排序。如果两个值相等,则索引较大的那个先出现。 支持的张量 OperandCode
支持的张量维度:从 1 起 输入
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_TRANSPOSE |
根据 perm 张量对输入张量进行转置,重新排列维度。 返回张量的维度 i 对应于输入维度的 perm[i]。如果未给出 perm,则默认为 (n-1...0),其中 n 是输入张量的秩。因此,默认情况下,此操作对 2-D 输入张量执行常规矩阵转置。 支持的张量 OperandCode
支持的张量维度:最多 4 输入
输出
自 NNAPI 功能级别 2 起可用。 |
ANEURALNETWORKS_TRANSPOSE_CONV_2D |
执行 2-D 卷积操作的转置。 此操作有时在反卷积网络之后被称为“反卷积”,但实际上是 ANEURALNETWORKS_CONV_2D 的转置(梯度),而不是实际的反卷积。 输出维度是滤波器维度、步幅和填充的函数。 支持的张量 OperandCode 配置:
自 NNAPI 特性级别 4 起可用
支持的张量秩:4,数据布局为 "NHWC" 或 "NCHW"。默认数据布局为 NHWC,数据按以下顺序存储:[batch, height, width, channels]。或者,数据布局可以是 NCHW,数据存储顺序为:[batch, channels, height, width]。 显式填充和隐式填充都受支持。 输入(显式填充)
输入(隐式填充)
输出
自 NNAPI 功能级别 3 起可用。 |
ANEURALNETWORKS_UNIDIRECTIONAL_SEQUENCE_LSTM |
由 LSTM 单元指定的循环神经网络。 执行输入的(完全)动态展开。 此操作沿时间维度展开输入,并对序列中的每个元素 s = 1...sequence_length 实现以下操作:outputs[s] = projection(state = activation(LSTMOp(inputs[s]))) 其中 LSTMOp 是 ANEURALNETWORKS_LSTM 中的 LSTM 操作,“projection”是从状态和输出进行的可选投影层,“activation”是作为“fused_activation_function”参数传递的函数(如果不是“NONE”)。 支持的张量 OperandCode 支持的张量秩:3,可以是时间优先 (time-major) 或批量优先 (batch-major)。 所有输入和输出张量必须具有相同的类型。 输入
输出
自 NNAPI 功能级别 3 起可用。 重要提示:截至 NNAPI 特性级别 3,无法获取输出状态张量,NNAPI 也不维护内部状态。此操作不支持多单元格链式连接并传播状态张量的使用模式。 |
ANEURALNETWORKS_UNIDIRECTIONAL_SEQUENCE_RNN |
一个循环神经网络层,将基本 RNN 单元应用于输入序列。 此层沿序列维度展开输入,并对序列中的每个元素 s = 1...sequence_length 实现以下操作:outputs[s] = state = activation(inputs[s] * input_weights’ + state * recurrent_weights’ + bias) 其中:
支持的张量 OperandCode 所有输入张量必须具有相同的类型。 输入
自 NNAPI 功能级别 3 起可用。 重要提示:截至 NNAPI 特性级别 3,无法获取输出状态张量,NNAPI 也不维护内部状态。此操作不支持多单元格链式连接并传播状态张量的使用模式。 |
ANEURALNETWORKS_WHILE |
执行 body 模型直到 condition 模型输出 false。 此操作的输入是 condition 模型、body 模型以及循环第一次迭代的操作数的值。这些值被隐式地分为三组:输入-输出值、仅状态值和仅输入值,如下所述。 此操作的输出是输入-输出操作数的最终值。 condition 模型和 body 模型都接收 (m + k + n) 个输入。
body 模型产生 (m + k) 个输出。
运行时推断 m, k, n 的数量如下:m = (WHILE 操作输出计数) k = (body 模型输出计数) - m n = (body 模型输入计数) - m - k 下面的伪代码说明了输入为 condition, body, initial_input_output, initial_state, input_only 的 WHILE 操作流程 (m = 1, k = 1, n = 1)。 input_output = initial_input_output state = initial_state while condition(input_output, state, input_only): input_output, state = body(input_output, state, input_only) return input_output 为防止无限循环,每个循环都有一个隐式执行超时(“循环超时时长”)。请参阅 ANeuralNetworksExecution_setLoopTimeout。 输入
输出
自 NNAPI 功能级别 4 起可用。 |
PaddingCode
在android/NeuralNetworksTypes.h
中声明
PaddingCode
隐式填充算法。
自 NNAPI 功能级别 1 起可用。
属性 | |
---|---|
ANEURALNETWORKS_PADDING_SAME |
SAME 填充。 两端的填充是“相同的”:padding_to_beginning = total_padding / 2,padding_to_end = (total_padding + 1)/2。也就是说,对于偶数填充,两端的填充完全相同;对于奇数填充,末端的填充比起始端多 1。 total_padding 是输入、步长、膨胀和滤波器大小的函数。它可以计算如下:out_size = (input + stride - 1) / stride effective_filter_size = (filter_size - 1) * dilation + 1 needed_input = (out_size - 1) * stride + effective_filter_size total_padding = max(0, needed_input - input_size) 水平和垂直方向的计算相同。 |
ANEURALNETWORKS_PADDING_VALID |
VALID 填充。 无填充。当输入大小不能被滤波器大小整除时,末端无法填充整个滤波器图块的输入将被直接忽略。 |
PreferenceCode
在android/NeuralNetworksTypes.h
中声明
PreferenceCode
执行偏好。
自 NNAPI 功能级别 1 起可用。
属性 | |
---|---|
ANEURALNETWORKS_PREFER_FAST_SINGLE_ANSWER |
优先尽快返回单个答案,即使这会增加功耗。 |
ANEURALNETWORKS_PREFER_LOW_POWER |
优先以最小化电池消耗的方式执行。 对于经常执行的编译,这是期望的。 |
ANEURALNETWORKS_PREFER_SUSTAINED_SPEED |
优先最大化连续帧的吞吐量,例如处理来自相机的连续帧时。 |
PriorityCode
在android/NeuralNetworksTypes.h
中声明
PriorityCode
相对执行优先级。
自 NNAPI 功能级别 4 起可用。
属性 | |
---|---|
ANEURALNETWORKS_PRIORITY_DEFAULT |
|
ANEURALNETWORKS_PRIORITY_HIGH |
|
ANEURALNETWORKS_PRIORITY_LOW |
|
ANEURALNETWORKS_PRIORITY_MEDIUM |
ResultCode
在android/NeuralNetworksTypes.h
中声明
ResultCode
结果代码。
任何 NNAPI 函数都可以返回任何结果代码,包括当前未记录的结果代码。除了 ANEURALNETWORKS_NO_ERROR 以外的任何值都表示某种类型的失败。
在通过将 debug.nn.vlog 属性设置为 1 来启用 NNAPI 调试后,可以从设备日志中获取有关失败性质的更多信息,例如,通过调用 "adb shell setprop debug.nn.vlog 1"。.
自 NNAPI 功能级别 1 起可用。
属性 | |
---|---|
ANEURALNETWORKS_BAD_DATA |
由无效函数参数、无效模型定义、无效执行定义或执行时数据无效引起的失败。 |
ANEURALNETWORKS_BAD_STATE |
由对象处于错误状态引起的失败。 |
ANEURALNETWORKS_DEAD_OBJECT |
指示对象处于死亡状态的失败。 自 NNAPI 功能级别 4 起可用。 |
ANEURALNETWORKS_INCOMPLETE |
|
ANEURALNETWORKS_MISSED_DEADLINE_PERSISTENT |
因为任务未能达到截止时间而导致的失败,并且即使经过短暂延迟,将来同一任务也可能无法达到截止时间。 自 NNAPI 功能级别 4 起可用。 |
ANEURALNETWORKS_MISSED_DEADLINE_TRANSIENT |
因为任务未能达到截止时间而导致的失败,但在短暂延迟后,将来同一任务可能仍能达到截止时间。 自 NNAPI 功能级别 4 起可用。 |
ANEURALNETWORKS_NO_ERROR |
操作成功。 |
ANEURALNETWORKS_OP_FAILED |
由模型执行失败引起的失败。 |
ANEURALNETWORKS_OUTPUT_INSUFFICIENT_SIZE |
由提供给模型输出的缓冲区大小不足引起的失败。 |
ANEURALNETWORKS_OUT_OF_MEMORY |
由可用内存不足引起的失败。 |
ANEURALNETWORKS_RESOURCE_EXHAUSTED_PERSISTENT |
由于驱动程序内的资源限制而导致的失败,并且即使经过短暂延迟,将来对同一任务的调用也可能失败。 自 NNAPI 功能级别 4 起可用。 |
ANEURALNETWORKS_RESOURCE_EXHAUSTED_TRANSIENT |
由于驱动程序内的资源限制而导致的失败,但在短暂延迟后,将来对同一任务的调用可能仍会成功。 自 NNAPI 功能级别 4 起可用。 |
ANEURALNETWORKS_UNAVAILABLE_DEVICE |
由设备不可用引起的失败。 |
ANEURALNETWORKS_UNEXPECTED_NULL |
由意外的 null 参数引起的失败。 |
ANEURALNETWORKS_UNMAPPABLE |
由于无法将文件映射到内存而导致的失败。 这可能是由于文件描述符无法映射,或者设备不支持 AHardwareBuffer 引起的。可以通过将其内容读入内存来缓解。 |
类型定义
ANeuralNetworksBurst
在android/NeuralNetworksTypes.h
中声明
struct ANeuralNetworksBurst ANeuralNetworksBurst
ANeuralNetworksBurst 是一种不透明类型,可用于降低快速连续执行的延迟。
如果仅用于单个执行,可能会导致开销。
ANeuralNetworksBurst 作为使用任意数量的 ANeuralNetworksExecution 对象的推理的上下文对象。ANeuralNetworksBurst 对象及其使用的 ANeuralNetworksExecution 对象必须都由同一个 ANeuralNetworksCompilation 对象创建。
此对象也用作驱动程序的提示,提供对快速执行序列生命周期的洞察。例如,驱动程序可能会选择在爆发对象生命周期内增加其加速器的时钟频率。
使用方法
- 通过调用 ANeuralNetworksBurst_create 函数创建一个新的爆发对象。
- 对于每次执行
- 创建 ANeuralNetworksExecution 并配置其属性(详见 ANeuralNetworksExecution)。
- 使用 ANeuralNetworksExecution_burstCompute 同步应用模型,将新的 ANeuralNetworksExecution 与相同的 ANeuralNetworksBurst 重复使用。
- 使用并释放 ANeuralNetworksExecution。
- 使用 ANeuralNetworksBurst_free 销毁爆发对象。
自 NNAPI 功能级别 3 起可用。
ANeuralNetworksCompilation
在android/NeuralNetworksTypes.h
中声明
struct ANeuralNetworksCompilation ANeuralNetworksCompilation
ANeuralNetworksCompilation 是一种不透明类型,可用于编译机器学习模型。
使用方法
- 通过调用 ANeuralNetworksCompilation_create 函数或 ANeuralNetworksCompilation_createForDevices 创建新的编译实例。
- 设置编译上任何期望的属性(例如,ANeuralNetworksCompilation_setPreference)。
- 可选择地,通过调用 ANeuralNetworksCompilation_setCaching 在编译上设置缓存签名和缓存目录。
- 使用 ANeuralNetworksCompilation_finish 完成编译。
- 使用 ANeuralNetworksExecution_create 和 ANeuralNetworksBurst_create 按需多次使用编译。
- 一旦所有使用该编译的执行完成,使用 ANeuralNetworksCompilation_free 销毁编译。
通过调用 ANeuralNetworksCompilation_finish 完成编译。通过调用 ANeuralNetworksCompilation_free 销毁编译。
一旦对编译调用了 ANeuralNetworksCompilation_finish,就不能再修改该编译。
应用程序有责任确保在给定时间只有一个线程修改编译。但是,一旦 ANeuralNetworksCompilation_finish 返回,多个线程可以安全地使用该编译。
应用程序还有责任确保在调用 ANeuralNetworksCompilation_free 后没有其他使用该编译的地方。这包括使用该编译创建的任何执行对象或爆发对象,或者通过 ANeuralNetworksMemoryDesc_addInputRole 或 ANeuralNetworksMemoryDesc_addOutputRole 指定的某个角色中包含该编译的任何内存描述符。
自 NNAPI 功能级别 1 起可用。
ANeuralNetworksDevice
在android/NeuralNetworksTypes.h
中声明
struct ANeuralNetworksDevice ANeuralNetworksDevice
ANeuralNetworksDevice 是一种表示设备的不透明类型。
此类型用于查询相应设备的基本属性和支持的操作,并控制模型将在哪些设备上运行。
自 NNAPI 功能级别 3 起可用。
ANeuralNetworksEvent
在android/NeuralNetworksTypes.h
中声明
struct ANeuralNetworksEvent ANeuralNetworksEvent
ANeuralNetworksEvent 是一种不透明类型,表示执行完成后将发出的事件。
自 NNAPI 功能级别 1 起可用。
ANeuralNetworksExecution
在android/NeuralNetworksTypes.h
中声明
struct ANeuralNetworksExecution ANeuralNetworksExecution
ANeuralNetworksExecution 是一种不透明类型,可用于将机器学习模型应用于一组输入。
使用方法
- 通过调用 ANeuralNetworksExecution_create 函数创建新的执行实例。
- 使用 ANeuralNetworksExecution_setInput 或 ANeuralNetworksExecution_setInputFromMemory 将输入缓冲区或内存区域与模型输入关联。
- 使用 ANeuralNetworksExecution_setOutput 或 ANeuralNetworksExecution_setOutputFromMemory 将输出缓冲区或内存区域与模型输出关联。
- 可选择地,使用 ANeuralNetworksExecution_setLoopTimeout、ANeuralNetworksExecution_setMeasureTiming、ANeuralNetworksExecution_setReusable 或 ANeuralNetworksExecution_setTimeout 配置执行。
- 使用以下方法之一应用模型
- 使用 ANeuralNetworksExecution_startCompute 或 ANeuralNetworksExecution_startComputeWithDependencies 进行异步计算,并使用 ANeuralNetworksEvent_wait 等待执行完成。
- 使用 ANeuralNetworksExecution_compute 进行同步计算。
- 作为执行爆发的一部分,使用 ANeuralNetworksExecution_burstCompute 进行同步计算。
- 使用 ANeuralNetworksExecution_free 销毁执行。
输出缓冲区或内存区域不得与任何其他输出缓冲区或内存区域重叠,不得与输入缓冲区或内存区域重叠,也不得与内存对象中的操作数值重叠(ANeuralNetworksModel_setOperandValueFromMemory)。
通过 ANeuralNetworksExecution_create 创建后,执行处于准备状态。执行只能在准备状态下修改。通过调用 ANeuralNetworksExecution_burstCompute、ANeuralNetworksExecution_compute、ANeuralNetworksExecution_startCompute 或 ANeuralNetworksExecution_startComputeWithDependencies 调度计算将把执行对象的状态更改为计算状态。计算完成后,执行对象的状态将从计算状态更改为完成状态。当 ANeuralNetworksExecution_compute、ANeuralNetworksExecution_burstCompute 或 ANeuralNetworksEvent_wait 返回时,计算完成。
执行只能使用 ANeuralNetworksExecution_burstCompute、ANeuralNetworksExecution_compute、ANeuralNetworksExecution_startCompute 或 ANeuralNetworksExecution_startComputeWithDependencies 应用于模型一次。创建新的执行来进行模型的新评估。
从 NNAPI 功能级别 5 起,应用程序可以调用 ANeuralNetworksExecution_setReusable 将执行设置为可重复用于多次计算。应用程序可以从可重复使用执行的完成状态再次调度和评估计算。在计算之间不能修改执行。
应用程序有责任确保在给定时间只有一个线程修改执行。但是,多个线程可以同时安全地使用 ANeuralNetworksEvent_wait。
应用程序还有责任确保在调用 ANeuralNetworksExecution_free 之前,执行要么从未被调度过,要么已完成(即 ANeuralNetworksExecution_burstCompute、ANeuralNetworksExecution_compute 或 ANeuralNetworksEvent_wait 已返回)。
.
应用程序还有责任确保在调用 ANeuralNetworksExecution_free 后没有其他使用该执行的地方。
应用程序有责任确保没有在同一执行上同时调度和评估并发计算,无论是在不同线程中使用 ANeuralNetworksExecution_compute 或 ANeuralNetworksExecution_burstCompute(它们是同步的),还是使用 ANeuralNetworksExecution_startCompute 或 ANeuralNetworksExecution_startComputeWithDependencies(它们是异步的)。但是,同时在不同的执行上调度和评估多个计算是安全的。(ANeuralNetworksExecution_burstCompute 的并发使用必须在不同的爆发对象上。)运行时不保证执行完成的顺序。如果对应用程序很重要,应用程序应通过确保一个执行在下一个调度之前完成(例如,通过在单个线程中同步调度所有执行,或异步调度所有执行并在调用 ANeuralNetworksExecution_startCompute 之间使用 ANeuralNetworksEvent_wait);或通过使用 ANeuralNetworksExecution_startComputeWithDependencies 使执行等待事件列表被通知后再开始实际评估,来强制执行顺序。
自 NNAPI 功能级别 1 起可用。
ANeuralNetworksMemory
在android/NeuralNetworksTypes.h
中声明
struct ANeuralNetworksMemory ANeuralNetworksMemory
ANeuralNetworksMemory 是一种表示内存的不透明类型。
此类型用于表示共享内存、内存映射文件和类似的内存。
通过使用共享内存,程序可以有效地向运行时和驱动程序传递定义模型的张量。请参阅 ANeuralNetworksModel_setOperandValueFromMemory。应用程序通常应创建一个包含定义模型所需的所有常量张量的共享内存对象。ANeuralNetworksMemory_createFromFd 可用于从文件句柄创建共享内存。ANeuralNetworksMemory_createFromAHardwareBuffer 可用于从 AHardwareBuffer 句柄创建共享内存。
内存对象也可以用于指定执行的输入和输出参数。请参阅 ANeuralNetworksExecution_setInputFromMemory 和 ANeuralNetworksExecution_setOutputFromMemory。
调用 ANeuralNetworksModel_setOperandValueFromMemory、ANeuralNetworksExecution_setInputFromMemory 和 ANeuralNetworksExecution_setOutputFromMemory 时,共享内存对象中的每个操作数必须按照元素类型字节大小的倍数字节边界对齐,例如,ANEURALNETWORKS_TENSOR_FLOAT32 类型的张量必须按照 4 字节边界对齐。
应用程序有责任确保在调用 ANeuralNetworksMemory_free 后没有使用该内存的地方。这包括任何因调用 ANeuralNetworksModel_setOperandValueFromMemory 而引用此内存的模型,使用此类模型创建的任何编译,使用此类编译创建的任何执行对象或爆发对象,或任何因调用 ANeuralNetworksExecution_setInputFromMemory 或 ANeuralNetworksExecution_setOutputFromMemory 而引用此内存的执行。
自 NNAPI 功能级别 1 起可用。
从 NNAPI 功能级别 4 起,应用程序可以请求从 ANeuralNetworksMemoryDesc 创建设备原生内存,以避免执行之间潜在的内存复制和转换开销。另请参阅 ANeuralNetworksMemoryDesc 和 ANeuralNetworksMemory_createFromDesc。
ANeuralNetworksMemoryDesc
在android/NeuralNetworksTypes.h
中声明
struct ANeuralNetworksMemoryDesc ANeuralNetworksMemoryDesc
ANeuralNetworksMemoryDesc 是一种表示内存描述符的不透明类型。
内存描述符描述内存对象的属性,并由 ANeuralNetworksMemory_createFromDesc 使用。
使用方法
- 通过调用 ANeuralNetworksMemoryDesc_create 创建新的内存描述符。
- 通过调用 ANeuralNetworksMemoryDesc_addInputRole 和 ANeuralNetworksMemoryDesc_addOutputRole 指定所有预期的输入和输出角色。
- 可选择地,通过调用 ANeuralNetworksMemoryDesc_setDimensions 指定内存维度。
- 使用 ANeuralNetworksMemoryDesc_finish 完成内存描述符。
- 使用 ANeuralNetworksMemory_createFromDesc 按需多次使用内存描述符。
- 使用 ANeuralNetworksMemoryDesc_free 销毁内存描述符。
通过调用 ANeuralNetworksMemoryDesc_finish 完成内存描述符。通过调用 ANeuralNetworksMemoryDesc_free 销毁内存描述符。
一旦对内存描述符调用了 ANeuralNetworksMemoryDesc_finish,就不能再修改该内存描述符。
应用程序有责任确保在给定时间只有一个线程修改内存描述符。但是,一旦 ANeuralNetworksMemoryDesc_finish 返回,多个线程可以安全地使用该内存描述符。
应用程序还有责任确保在调用 ANeuralNetworksMemoryDesc_free 后没有其他使用该内存描述符的地方。但是,可以安全地继续使用从该内存描述符创建的 ANeuralNetworksMemory 对象。
自 NNAPI 功能级别 4 起可用。
ANeuralNetworksModel
在android/NeuralNetworksTypes.h
中声明
struct ANeuralNetworksModel ANeuralNetworksModel
ANeuralNetworksModel 是一种不透明类型,包含构成模型的数学运算的描述。
通过调用构建模型
这形成了一个图,其中每个操作和操作数都是一个节点,从操作数到操作的定向边表示操作数是操作的输入,从操作到操作数的定向边表示操作数是操作的输出。此图必须是无环的。
通过调用 ANeuralNetworksModel_finish 完成模型。通过调用 ANeuralNetworksModel_free 销毁模型。
一旦对模型调用了 ANeuralNetworksModel_finish,就不能再修改该模型。
应用程序有责任确保在给定时间只有一个线程修改模型。但是,一旦 ANeuralNetworksModel_finish 返回,多个线程可以安全地使用该模型。
应用程序还有责任确保在调用 ANeuralNetworksModel_free 后没有其他使用该模型的地方。这包括使用该模型创建的任何编译、执行对象或爆发对象。
自 NNAPI 功能级别 1 起可用。
ANeuralNetworksOperandType
在android/NeuralNetworksTypes.h
中声明
struct ANeuralNetworksOperandType ANeuralNetworksOperandType
ANeuralNetworksOperandType 描述了操作数的类型。
此结构用于描述标量和张量。
指定了所有维度的张量操作数类型是“完全指定的”。在可能的情况下(即,在模型构建时已知维度时),张量操作数类型应该(但不强制要求)是完全指定的,以便实现最佳性能。
如果张量操作数的类型未完全指定,则该操作数的维度将从该操作数作为输出的操作的操作数类型和值中推导出来,或者在引用模型输入操作数的情况下,从相应的 ANEURALNETWORKS_IF 或 ANEURALNETWORKS_WHILE 操作输入操作数类型中推导出来。
在以下情况下,张量操作数类型必须完全指定
- 操作数具有常量值,由 ANeuralNetworksModel_setOperandValue(带有非 nullptr 缓冲区)或 ANeuralNetworksModel_setOperandValueFromMemory 设置。
- 操作数是编译中主模型的模型输入(参见 ANeuralNetworksModel_identifyInputsAndOutputs)。必须将完全指定的张量操作数类型提供给 ANeuralNetworksModel_addOperand;或者必须提供给相应的 ANeuralNetworksExecution_setInput 或 ANeuralNetworksExecution_setInputFromMemory。例外:如果输入是可选的且被省略(通过向 ANeuralNetworksExecution_setInput 传递 nullptr 作为缓冲区),则无需具有完全指定的张量操作数类型。
- 操作数是编译中主模型的模型输出(参见 ANeuralNetworksModel_identifyInputsAndOutputs),并且将与 ANeuralNetworksExecution_startComputeWithDependencies 一起使用。必须将完全指定的张量操作数类型提供给 ANeuralNetworksModel_addOperand;或者必须提供给相应的 ANeuralNetworksExecution_setOutput 或 ANeuralNetworksExecution_setOutputFromMemory。
指定了秩但有部分维度未指定的张量操作数类型,通过将 dimensionCount 设置为秩并将每个未指定维度设置为 0 来表示。
自 NNAPI 功能级别 1 起可用。
从 NNAPI 功能级别 3 起,未指定秩的张量操作数类型通过将 dimensionCount 设置为 0 并将 dimensions 设置为 NULL 来表示(就像它是标量操作数类型一样)。
ANeuralNetworksOperationType
在android/NeuralNetworksTypes.h
中声明
int32_t ANeuralNetworksOperationType
别名 OperationCode,在函数 ANeuralNetworksModel_addOperation 中使用。
ANeuralNetworksSymmPerChannelQuantParams
在android/NeuralNetworksTypes.h
中声明
struct ANeuralNetworksSymmPerChannelQuantParams ANeuralNetworksSymmPerChannelQuantParams
ANEURALNETWORKS_TENSOR_QUANT8_SYMM_PER_CHANNEL 操作数的参数。
函数
ANeuralNetworksBurst_create
在android/NeuralNetworks.h
中声明
int ANeuralNetworksBurst_create( ANeuralNetworksCompilation *compilation, ANeuralNetworksBurst **burst )
创建一个 ANeuralNetworksBurst 来应用给定的编译。
这只创建爆发对象。只有在调用 ANeuralNetworksExecution_burstCompute 并传入有效的 ANeuralNetworksExecution 和 ANeuralNetworksBurst 后才会执行计算。
提供的编译必须比爆发对象存在的时间更长。
自 NNAPI 功能级别 3 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR ,如果编译无效则为 ANEURALNETWORKS_BAD_DATA 。 |
ANeuralNetworksBurst_free
在android/NeuralNetworks.h
中声明
void ANeuralNetworksBurst_free( ANeuralNetworksBurst *burst )
ANeuralNetworksCompilation_create
在android/NeuralNetworks.h
中声明
int ANeuralNetworksCompilation_create( ANeuralNetworksModel *model, ANeuralNetworksCompilation **compilation )
创建一个 ANeuralNetworksCompilation 来编译给定模型。
传递给此函数的模型称为编译的“主模型”,以区别于此编译中由 ANEURALNETWORKS_MODEL 类型操作数引用的其他模型。
此函数只创建对象。只有在调用 ANeuralNetworksCompilation_finish 后才会执行编译。
在编译上设置了所有期望的属性后,应调用 ANeuralNetworksCompilation_finish。
不再需要编译后,应调用 ANeuralNetworksModel_free。
提供的模型必须比编译存在的时间更长。
模型必须已经通过调用 ANeuralNetworksModel_finish 完成。
有关多线程使用信息,请参阅 ANeuralNetworksCompilation。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR ,如果模型无效则为 ANEURALNETWORKS_BAD_DATA 。 |
ANeuralNetworksCompilation_createForDevices
在android/NeuralNetworks.h
中声明
int ANeuralNetworksCompilation_createForDevices( ANeuralNetworksModel *model, const ANeuralNetworksDevice *const *devices, uint32_t numDevices, ANeuralNetworksCompilation **compilation )
创建一个 ANeuralNetworksCompilation 来为指定设备集编译给定模型。
如果指定了多个设备,编译会自动在设备之间分配工作负载。模型必须由指定的设备集完全支持。这意味着对于该模型/设备对的每个操作,ANeuralNetworksModel_getSupportedOperationsForDevices() 必须返回 true。
用户必须处理来自指定设备集的所有编译和执行失败。这与使用 ANeuralNetworksCompilation_create 不同,后者运行时会尝试从此类失败中恢复。
传递给此函数的模型称为编译的“主模型”,以区别于此编译中由 ANEURALNETWORKS_MODEL 类型操作数引用的其他模型。
自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR ,如果模型无效则为 ANEURALNETWORKS_BAD_DATA 。 |
ANeuralNetworksCompilation_finish
在android/NeuralNetworks.h
中声明
int ANeuralNetworksCompilation_finish( ANeuralNetworksCompilation *compilation )
表示我们已完成对编译的修改。
在调用 ANeuralNetworksBurst_create 或 ANeuralNetworksExecution_create 之前必须调用。
应用程序必须确保在同一时间没有其他线程使用该编译。
对于给定的编译,此函数只能调用一次。
如果在此编译上调用了 ANeuralNetworksCompilation_setTimeout,并且编译未能在超时时长内完成,则编译可能会被中止,在这种情况下将返回 ANEURALNETWORKS_MISSED_DEADLINE_* ResultCode。
有关多线程使用信息,请参阅 ANeuralNetworksCompilation。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksCompilation_free
在android/NeuralNetworks.h
中声明
void ANeuralNetworksCompilation_free( ANeuralNetworksCompilation *compilation )
销毁编译。
编译不必通过调用 ANeuralNetworksCompilation_finish 完成。
有关多线程使用信息,请参阅 ANeuralNetworksCompilation。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
ANeuralNetworksCompilation_getPreferredMemoryAlignmentForInput
在android/NeuralNetworks.h
中声明
int ANeuralNetworksCompilation_getPreferredMemoryAlignmentForInput( const ANeuralNetworksCompilation *compilation, uint32_t index, uint32_t *alignment )
获取从特定编译创建的执行的输入的首选缓冲区和内存对齐方式。
用户可以使用返回的对齐值来指导输入缓冲区或内存池的布局。为了获得最佳性能,请确保在 ANeuralNetworksExecution_setInput 中传递的缓冲区地址,或在 ANeuralNetworksExecution_setInputFromMemory 中传递的偏移值,是相同输入的首选对齐值的倍数。如果提供的缓冲区或内存不满足首选对齐要求,驱动程序可能会选择分配单独的缓冲区并进行内存复制。
有关多线程使用信息,请参阅 ANeuralNetworksCompilation。
自 NNAPI 功能级别 5 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。如果 compilation 或 alignment 为 NULL 则为 ANEURALNETWORKS_UNEXPECTED_NULL 。如果编译未完成则为 ANEURALNETWORKS_BAD_STATE 。如果索引超出范围则为 ANEURALNETWORKS_BAD_DATA 。 |
ANeuralNetworksCompilation_getPreferredMemoryAlignmentForOutput
在android/NeuralNetworks.h
中声明
int ANeuralNetworksCompilation_getPreferredMemoryAlignmentForOutput( const ANeuralNetworksCompilation *compilation, uint32_t index, uint32_t *alignment )
获取从特定编译创建的执行的输出的首选缓冲区和内存对齐方式。
用户可以使用返回的对齐值来指导输出缓冲区或内存池的布局。为了获得最佳性能,请确保在 ANeuralNetworksExecution_setOutput 中传递的缓冲区地址,或在 ANeuralNetworksExecution_setOutputFromMemory 中传递的偏移值,是相同输出的首选对齐值的倍数。如果提供的缓冲区或内存不满足首选对齐要求,驱动程序可能会选择分配单独的缓冲区并进行内存复制。
有关多线程使用信息,请参阅 ANeuralNetworksCompilation。
自 NNAPI 功能级别 5 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。如果 compilation 或 alignment 为 NULL 则为 ANEURALNETWORKS_UNEXPECTED_NULL 。如果编译未完成则为 ANEURALNETWORKS_BAD_STATE 。如果索引超出范围则为 ANEURALNETWORKS_BAD_DATA 。 |
ANeuralNetworksCompilation_getPreferredMemoryPaddingForInput
在android/NeuralNetworks.h
中声明
int ANeuralNetworksCompilation_getPreferredMemoryPaddingForInput( const ANeuralNetworksCompilation *compilation, uint32_t index, uint32_t *padding )
获取从特定编译创建的执行的输入的首选缓冲区和内存末尾填充。
用户可以使用返回的填充值来指导输入缓冲区或内存池的布局。为了获得最佳性能,请确保在 ANeuralNetworksExecution_setInput 或 ANeuralNetworksExecution_setInputFromMemory 中传递的长度值大于或等于输入的原始大小(即元素大小乘以元素数量),并向上舍入到相同输入的首选填充值的倍数。如果提供的缓冲区或内存值不满足首选填充要求,驱动程序可能会选择分配单独的缓冲区并进行内存复制。
有关多线程使用信息,请参阅 ANeuralNetworksCompilation。有关如何将输入缓冲区或内存填充传递给驱动程序的信息,请参阅 ANeuralNetworksExecution_enableInputAndOutputPadding、ANeuralNetworksExecution_setInput 和 ANeuralNetworksExecution_setInputFromMemory。
自 NNAPI 功能级别 5 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。如果 compilation 或 padding 为 NULL 则为 ANEURALNETWORKS_UNEXPECTED_NULL 。如果编译未完成则为 ANEURALNETWORKS_BAD_STATE 。如果索引超出范围则为 ANEURALNETWORKS_BAD_DATA 。 |
ANeuralNetworksCompilation_getPreferredMemoryPaddingForOutput
在android/NeuralNetworks.h
中声明
int ANeuralNetworksCompilation_getPreferredMemoryPaddingForOutput( const ANeuralNetworksCompilation *compilation, uint32_t index, uint32_t *padding )
获取从特定编译创建的执行的输出的首选内存末尾填充。
用户可以使用返回的填充值来指导输出缓冲区或内存池的布局。为了获得最佳性能,请确保在 ANeuralNetworksExecution_setOutput 或 ANeuralNetworksExecution_setOutputFromMemory 中传递的长度值大于或等于输出的原始大小(即元素大小乘以元素数量),并向上舍入到相同输出的首选填充值的倍数。如果提供的缓冲区或内存值不满足首选填充要求,驱动程序可能会选择分配单独的缓冲区并进行内存复制。
有关多线程使用信息,请参阅 ANeuralNetworksCompilation。有关如何将输出缓冲区或内存填充传递给驱动程序的信息,请参阅 ANeuralNetworksExecution_enableInputAndOutputPadding、ANeuralNetworksExecution_setOutput 和 ANeuralNetworksExecution_setOutputFromMemory。
自 NNAPI 功能级别 5 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。如果 compilation 或 padding 为 NULL 则为 ANEURALNETWORKS_UNEXPECTED_NULL 。如果编译未完成则为 ANEURALNETWORKS_BAD_STATE 。如果索引超出范围则为 ANEURALNETWORKS_BAD_DATA 。 |
ANeuralNetworksCompilation_setCaching
在android/NeuralNetworks.h
中声明
int ANeuralNetworksCompilation_setCaching( ANeuralNetworksCompilation *compilation, const char *cacheDir, const uint8_t *token )
设置编译缓存签名和缓存目录。
向运行时提供可选的缓存信息,以加快重复编译。
有关多线程使用信息,请参阅 ANeuralNetworksCompilation。
自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksCompilation_setPreference
在android/NeuralNetworks.h
中声明
int ANeuralNetworksCompilation_setPreference( ANeuralNetworksCompilation *compilation, int32_t preference )
设置执行偏好。
在可能存在权衡时,向运行时提供指导。默认情况下,运行时使用 PREFER_SINGLE_FAST_ANSWER
有关多线程使用信息,请参阅 ANeuralNetworksCompilation。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksCompilation_setPriority
在android/NeuralNetworks.h
中声明
int ANeuralNetworksCompilation_setPriority( ANeuralNetworksCompilation *compilation, int priority )
设置执行优先级。
执行优先级是相对于同一应用程序(特别是同一 uid)为同一设备创建的其他执行而言的。具体来说,来自一个应用程序的执行优先级不会影响来自另一个应用程序的执行。同样,在一个设备上的执行优先级不会影响在另一个设备上的执行。
较高优先级的执行可能会比较低优先级的执行使用更多计算资源,并且可能会抢占或饿死较低优先级的执行。
有关多线程使用信息,请参阅 ANeuralNetworksCompilation。
自 NNAPI 功能级别 4 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksCompilation_setTimeout
在android/NeuralNetworks.h
中声明
int ANeuralNetworksCompilation_setTimeout( ANeuralNetworksCompilation *compilation, uint64_t duration )
设置编译模型的最大预期持续时间。
如果设备无法在指定持续时间内完成编译,编译可能会中止。超时持续时间从调用 ANeuralNetworksCompilation_finish 开始计算。
此超时持续时间是给驱动程序的提示,可用于释放驱动程序内的计算资源并比没有提示更快地将控制权返回给应用程序。如果驱动程序认为编译无法在超时持续时间内完成,它允许驱动程序在编译开始之前中止编译。同样,如果正在进行的编译耗时过长,它允许驱动程序中止编译。但是,此调用不能保证编译会在超时持续时间内完成或中止。
默认情况下(即,除非调用 ANeuralNetworksCompilation_setTimeout),模型编译的超时持续时间被视为无限。
ANeuralNetworksCompilation 必须通过 numDevices = 1 的 ANeuralNetworksCompilation_createForDevices 创建,否则此函数将以 ANEURALNETWORKS_BAD_DATA 失败。如果设备的特征级别(由 ANeuralNetworksDevice_getFeatureLevel 报告)低于 ANEURALNETWORKS_FEATURE_LEVEL_4,则超时持续时间提示将被忽略。
有关多线程使用信息,请参阅 ANeuralNetworksCompilation。
自 NNAPI feature level 4 起可用。 已弃用。 NNAPI 已弃用。有关详细信息,请参阅此网页。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksDevice_getFeatureLevel
在android/NeuralNetworks.h
中声明
int ANeuralNetworksDevice_getFeatureLevel( const ANeuralNetworksDevice *device, int64_t *featureLevel )
获取指定 NNAPI 设备的功能级别。
每个设备都有支持的特征级别,这是此驱动程序实现的最先进的 NNAPI 规范和特征。例如,如果驱动程序实现了 ANEURALNETWORKS_FEATURE_LEVEL_2 中引入的特征,但未实现 ANEURALNETWORKS_FEATURE_LEVEL_2 之后引入的特征,则该值将是 ANEURALNETWORKS_FEATURE_LEVEL_2。开发者可以根据模型是否有特定的特征要求来决定是否应使用指定的设备。
NNAPI 设备特征级别与 NNAPI 运行时特征级别(ANeuralNetworks_getRuntimeFeatureLevel)密切相关,后者表示 NNAPI 运行时特征级别(运行时实现的最先进的 NNAPI 规范和特征)。NNAPI 设备特征级别始终小于或等于运行时特征级别。
此函数生成 FeatureLevelCode 枚举值,而不是 Android API 级别。
自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksDevice_getName
在android/NeuralNetworks.h
中声明
int ANeuralNetworksDevice_getName( const ANeuralNetworksDevice *device, const char **name )
获取指定设备的名称。
自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksDevice_getType
在android/NeuralNetworks.h
中声明
int ANeuralNetworksDevice_getType( const ANeuralNetworksDevice *device, int32_t *type )
获取给定设备的类型。
设备类型可用于帮助应用程序开发者分配机器学习工作负载和其他工作负载,例如图形渲染。例如,对于一个基于实时对象检测结果渲染 AR 场景的应用程序,开发者可以选择 ACCELERATOR 类型的设备用于 ML 工作负载,并将 GPU 保留用于图形渲染。
自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksDevice_getVersion
在android/NeuralNetworks.h
中声明
int ANeuralNetworksDevice_getVersion( const ANeuralNetworksDevice *device, const char **version )
获取指定设备的驱动实现版本。
驱动程序实现者有责任确保此版本字符串与所有先前实现版本唯一区分开来。
此版本字符串不得与仅由 ANeuralNetworksDevice_getFeatureLevel 定义的特征级别混淆。版本之间没有隐式顺序。例如,无法过滤掉早于某个特定版本的所有驱动程序。
应用程序开发者可以使用此版本字符串来避免或优先选择特定的驱动程序实现。例如,应用程序可能希望这样做是因为
- 特定版本的驱动程序未提供所需的性能,可能是由于性能下降。
- 特定版本的驱动程序存在 bug 或返回的结果不符合应用程序的最低精度要求。
自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksDevice_wait
在android/NeuralNetworks.h
中声明
int ANeuralNetworksDevice_wait( const ANeuralNetworksDevice *device )
等待设备处于活动状态。
设备可能会遇到内部错误并暂时进入死状态。使用处于此状态的设备的调用将返回错误 ANEURALNETWORKS_DEAD_OBJECT。ANeuralNetworksDevice_wait 将阻塞直到设备处于活动状态。
自 NNAPI feature level 4 起可用。 已弃用。 NNAPI 已弃用。有关详细信息,请参阅此网页。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksEvent_createFromSyncFenceFd
在android/NeuralNetworks.h
中声明
int ANeuralNetworksEvent_createFromSyncFenceFd( int sync_fence_fd, ANeuralNetworksEvent **event )
从 sync_fence 文件描述符创建一个 ANeuralNetworksEvent。
新创建的 ANeuralNetworksEvent 不会获取提供的 sync_fence_fd 的所有权,而是会复制提供的 sync_fence_fd 并拥有副本。
自 NNAPI feature level 4 起可用。 已弃用。 NNAPI 已弃用。有关详细信息,请参阅此网页。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksEvent_free
在android/NeuralNetworks.h
中声明
void ANeuralNetworksEvent_free( ANeuralNetworksEvent *event )
销毁事件。
有关多线程使用的信息,请参阅 ANeuralNetworksExecution。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
ANeuralNetworksEvent_getSyncFenceFd
在android/NeuralNetworks.h
中声明
int ANeuralNetworksEvent_getSyncFenceFd( const ANeuralNetworksEvent *event, int *sync_fence_fd )
从事件中获取 sync_fence 文件描述符。
如果 ANeuralNetworksEvent 不是由 sync fence 支持的,则 sync_fence_fd 将设置为 -1,并且返回 ANEURALNETWORKS_BAD_DATA。
请参阅 ANeuralNetworksEvent_createFromSyncFenceFd 和 ANeuralNetworksExecution_startComputeWithDependencies,了解如何创建由 sync fence 支持的事件。
用户获得返回的 fd 的所有权,并且在不再需要时必须关闭返回的文件描述符。
自 NNAPI feature level 4 起可用。 已弃用。 NNAPI 已弃用。有关详细信息,请参阅此网页。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksEvent_wait
在android/NeuralNetworks.h
中声明
int ANeuralNetworksEvent_wait( ANeuralNetworksEvent *event )
等待执行完成。
多个线程可以等待同一事件。执行完成后,所有线程都将被释放。
如果对与此事件对应的执行调用了 ANeuralNetworksExecution_setTimeout,并且执行未能在持续时间超出之前完成,则执行可能会中止,在这种情况下,将在此处返回 ANEURALNETWORKS_MISSED_DEADLINE_* ResultCode。
如果执行包含 ANEURALNETWORKS_WHILE 操作,并且条件模型未能在循环超时持续时间内输出 false,则执行将中止,并且在此处返回 ANEURALNETWORKS_MISSED_DEADLINE_* ResultCode。
有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
如果执行正常完成,则为 ANEURALNETWORKS_NO_ERROR。如果执行输入或输出内存无法正确映射,则为 ANEURALNETWORKS_UNMAPPABLE。
|
ANeuralNetworksExecution_burstCompute
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_burstCompute( ANeuralNetworksExecution *execution, ANeuralNetworksBurst *burst )
安排在 burst 对象上同步评估执行。
调度执行的同步评估。在执行完成且输出准备好被使用后立即返回。
如果对该执行调用了 ANeuralNetworksExecution_setTimeout,并且执行未能在超时持续时间超出之前完成,则执行可能会中止,在这种情况下,将返回 ANEURALNETWORKS_MISSED_DEADLINE_* ResultCode。
如果执行包含 ANEURALNETWORKS_WHILE 操作,并且条件模型未能在循环超时持续时间内输出 false,则执行将中止,并返回 ANEURALNETWORKS_MISSED_DEADLINE_* ResultCode。如果设备的特征级别(由 ANeuralNetworksDevice_getFeatureLevel 报告)低于 ANEURALNETWORKS_FEATURE_LEVEL_4,则超时持续时间提示将被忽略。
对于任何给定的 burst 对象,在任何给定时间最多只能有一个 ANeuralNetworksExecution 正在处理。在前一个 ANeuralNetworksExecution 完成之前启动任何 ANeuralNetworksExecution 将导致 ANEURALNETWORKS_BAD_STATE。
在 NNAPI feature level 5 之前,此函数只能在执行处于准备状态时调用。从 NNAPI feature level 5 开始,如果用户通过 ANeuralNetworksExecution_setReusable 将执行设置为可重用,则当执行处于完成状态时也可以调用此函数。
有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution。
有关同步执行,请参阅 ANeuralNetworksExecution_compute。有关常规异步执行,请参阅 ANeuralNetworksExecution_startCompute。有关带有依赖项的异步执行,请参阅 ANeuralNetworksExecution_startComputeWithDependencies。
自 NNAPI 功能级别 3 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果执行正常完成,则为 ANEURALNETWORKS_NO_ERROR。
|
ANeuralNetworksExecution_compute
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_compute( ANeuralNetworksExecution *execution )
安排同步评估执行。
调度执行的同步评估。在执行完成且输出准备好被使用后立即返回。
如果对该执行调用了 ANeuralNetworksExecution_setTimeout,并且执行未能在超时持续时间超出之前完成,则执行可能会中止,在这种情况下,将返回 ANEURALNETWORKS_MISSED_DEADLINE_* ResultCode。如果设备的特征级别(由 ANeuralNetworksDevice_getFeatureLevel 报告)低于 30,则超时持续时间提示将被忽略。
如果此执行包含 ANEURALNETWORKS_WHILE 操作,并且条件模型未能在循环超时持续时间内输出 false,则执行将中止,并返回 ANEURALNETWORKS_MISSED_DEADLINE_* ResultCode。
在 NNAPI feature level 5 之前,此函数只能在执行处于准备状态时调用。从 NNAPI feature level 5 开始,如果用户通过 ANeuralNetworksExecution_setReusable 将执行设置为可重用,则当执行处于完成状态时也可以调用此函数。
有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution。
有关 burst 同步执行,请参阅 ANeuralNetworksExecution_burstCompute。有关常规异步执行,请参阅 ANeuralNetworksExecution_startCompute。有关带有依赖项的异步执行,请参阅 ANeuralNetworksExecution_startComputeWithDependencies。
自 NNAPI 功能级别 3 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
如果执行正常完成,则为 ANEURALNETWORKS_NO_ERROR。如果执行输入或输出内存无法正确映射,则为 ANEURALNETWORKS_UNMAPPABLE。
|
ANeuralNetworksExecution_create
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_create( ANeuralNetworksCompilation *compilation, ANeuralNetworksExecution **execution )
创建一个 ANeuralNetworksExecution 来应用给定的编译。
这只会创建对象。计算仅在调用 ANeuralNetworksExecution_burstCompute、ANeuralNetworksExecution_compute、ANeuralNetworksExecution_startCompute 或 ANeuralNetworksExecution_startComputeWithDependencies 后执行。
提供的编译对象的生命周期必须长于执行对象。
有关多线程使用的信息,请参阅 ANeuralNetworksExecution。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR ,如果编译无效则为 ANEURALNETWORKS_BAD_DATA 。 |
ANeuralNetworksExecution_enableInputAndOutputPadding
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_enableInputAndOutputPadding( ANeuralNetworksExecution *execution, bool enable )
指定 ANeuralNetworksExecution 是否能够接受带填充的输入和输出缓冲区及内存对象。
默认情况下,ANeuralNetworksExecution 的输入和输出缓冲区以及内存对象不允许填充。
将执行设置为接受带填充的输入和输出缓冲区以及内存对象,允许 ANeuralNetworksExecution_setInput、ANeuralNetworksExecution_setInputFromMemory、ANeuralNetworksExecution_setOutput 和 ANeuralNetworksExecution_setOutputFromMemory 的 length 参数大于操作数的原始大小(即,元素大小乘以元素数量)。缓冲区或内存区域末尾的额外字节可由驱动程序用于以块为单位访问数据,以提高效率。
在调用 ANeuralNetworksExecution_setInput、ANeuralNetworksExecution_setInputFromMemory、ANeuralNetworksExecution_setOutput 或 ANeuralNetworksExecution_setOutputFromMemory 之后,不得调用此方法。
有关多线程使用的信息,请参阅 ANeuralNetworksExecution。
自 NNAPI 功能级别 5 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
成功时为 ANEURALNETWORKS_NO_ERROR。如果 execution 为 NULL,则为 ANEURALNETWORKS_UNEXPECTED_NULL。如果在执行上已经调用了 ANeuralNetworksExecution_setInput、ANeuralNetworksExecution_setInputFromMemory、ANeuralNetworksExecution_setOutput 或 ANeuralNetworksExecution_setOutputFromMemory,则为 ANEURALNETWORKS_BAD_STATE。
|
ANeuralNetworksExecution_free
在android/NeuralNetworks.h
中声明
void ANeuralNetworksExecution_free( ANeuralNetworksExecution *execution )
销毁执行。
执行无需已通过调用 ANeuralNetworksExecution_burstCompute、ANeuralNetworksExecution_compute、ANeuralNetworksExecution_startCompute 或 ANeuralNetworksExecution_startComputeWithDependencies 调度;但如果已调度,则应用程序必须在执行完成(即 ANeuralNetworksExecution_burstCompute、ANeuralNetworksExecution_compute 或 ANeuralNetworksEvent_wait 已返回)之前不调用 ANeuralNetworksExecution_free。
有关多线程使用的信息,请参阅 ANeuralNetworksExecution。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
ANeuralNetworksExecution_getDuration
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_getDuration( const ANeuralNetworksExecution *execution, int32_t durationCode, uint64_t *duration )
获取在指定的 ANeuralNetworksExecution 上评估的最新计算所花费的时间(以纳秒为单位)。
此函数只能在执行处于完成状态时调用。
有关执行状态的信息,请参阅 ANeuralNetworksExecution。
自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksExecution_getOutputOperandDimensions
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_getOutputOperandDimensions( ANeuralNetworksExecution *execution, int32_t index, uint32_t *dimensions )
获取在 ANeuralNetworksExecution 上评估的最新计算中,模型的指定输出操作数的维度信息。
目标输出操作数不能是标量。
此函数只能在执行处于完成状态时调用。
有关执行状态的信息,请参阅 ANeuralNetworksExecution。
自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
成功时为 ANEURALNETWORKS_NO_ERROR,如果在执行时向目标输出提供了不足的缓冲区,则为 ANEURALNETWORKS_OUTPUT_INSUFFICIENT_SIZE,如果索引无效或目标是标量,则为 ANEURALNETWORKS_BAD_DATA。
|
ANeuralNetworksExecution_getOutputOperandRank
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_getOutputOperandRank( ANeuralNetworksExecution *execution, int32_t index, uint32_t *rank )
获取在 ANeuralNetworksExecution 上评估的最新计算中,模型的指定输出操作数的维度信息。
此函数只能在执行处于完成状态时调用。
有关执行状态的信息,请参阅 ANeuralNetworksExecution。
自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
成功时为 ANEURALNETWORKS_NO_ERROR,如果在执行时向目标输出提供了不足的缓冲区,则为 ANEURALNETWORKS_OUTPUT_INSUFFICIENT_SIZE,如果索引无效,则为 ANEURALNETWORKS_BAD_DATA。
|
ANeuralNetworksExecution_setInput
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_setInput( ANeuralNetworksExecution *execution, int32_t index, const ANeuralNetworksOperandType *type, const void *buffer, size_t length )
将用户缓冲区与 ANeuralNetworksExecution 的模型输入相关联。
执行的评估不得已调度。一旦执行的评估已调度,应用程序在执行完成之前不得更改缓冲区的内容。执行的评估不会更改缓冲区的内容。
提供的缓冲区生命周期必须长于执行。
如果输入是可选的,可以通过传递 nullptr 作为 buffer 和 0 作为 length 来指示省略它。
否则,如果用户未通过调用 ANeuralNetworksExecution_enableInputAndOutputPadding 将执行设置为接受带填充的输入缓冲区,则 length 参数必须等于输入的原始大小(即,元素大小乘以元素数量)。传递一个值不等于输入原始大小的 length 参数将导致 ANEURALNETWORKS_BAD_DATA。
否则,如果用户已通过调用 ANeuralNetworksExecution_enableInputAndOutputPadding 将执行设置为接受带填充的输入缓冲区,则 length 参数可以大于输入的原始大小,并且缓冲区末尾的额外字节可由驱动程序用于以块为单位访问数据,以提高效率。传递一个值小于输入原始大小的 length 参数将导致 ANEURALNETWORKS_BAD_DATA。
此函数只能在执行处于准备状态时调用。
有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution。有关获取首选缓冲区对齐和填充以提高性能的信息,请参阅 ANeuralNetworksCompilation_getPreferredMemoryAlignmentForInput 和 ANeuralNetworksCompilation_getPreferredMemoryPaddingForInput。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||
返回值 |
成功时为 ANEURALNETWORKS_NO_ERROR,如果名称无法识别或缓冲区对于输入来说太小,则为 ANEURALNETWORKS_BAD_DATA。
|
ANeuralNetworksExecution_setInputFromMemory
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_setInputFromMemory( ANeuralNetworksExecution *execution, int32_t index, const ANeuralNetworksOperandType *type, const ANeuralNetworksMemory *memory, size_t offset, size_t length )
将内存对象的区域与 ANeuralNetworksExecution 的模型输入相关联。
执行的评估不得已调度。一旦执行的评估已调度,应用程序在执行完成之前不得更改区域的内容。执行的评估不会更改区域的内容。
提供的内存生命周期必须长于执行。
如果输入是可选的,可以通过使用 ANeuralNetworksExecution_setInput 代替,传递 nullptr 作为 buffer 和 0 作为 length 来指示省略它。
如果内存是来自 ANeuralNetworksMemory_createFromAHardwareBuffer 创建的 AHARDWAREBUFFER_FORMAT_BLOB 格式以外的 AHardwareBuffer,或来自 ANeuralNetworksMemory_createFromDesc 创建的不透明内存对象,则 offset 和 length 都必须为 0,表示使用整个内存区域。
否则,如果用户未通过调用 ANeuralNetworksExecution_enableInputAndOutputPadding 将执行设置为接受带填充的输入内存对象,则 length 参数必须等于输入的原始大小(即,元素大小乘以元素数量)。传递一个值不等于输入原始大小的 length 参数将导致 ANEURALNETWORKS_BAD_DATA。
否则,如果用户已通过调用 ANeuralNetworksExecution_enableInputAndOutputPadding 将执行设置为接受带填充的输入内存对象,则 length 参数可以大于输入的原始大小,并且内存区域末尾的额外字节可由驱动程序用于以块为单位访问数据,以提高效率。传递一个值小于输入原始大小的 length 参数将导致 ANEURALNETWORKS_BAD_DATA。
此函数只能在执行处于准备状态时调用。
有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution。有关 AHardwareBuffer 使用信息,请参阅 ANeuralNetworksMemory_createFromAHardwareBuffer。有关从内存描述符创建的内存对象使用信息,请参阅 ANeuralNetworksMemory_createFromDesc。有关获取首选内存对齐和填充以提高性能的信息,请参阅 ANeuralNetworksCompilation_getPreferredMemoryAlignmentForInput 和 ANeuralNetworksCompilation_getPreferredMemoryPaddingForInput。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||||
返回值 |
成功时为 ANEURALNETWORKS_NO_ERROR,如果名称无法识别或缓冲区对于输入来说太小,则为 ANEURALNETWORKS_BAD_DATA。
|
ANeuralNetworksExecution_setLoopTimeout
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_setLoopTimeout( ANeuralNetworksExecution *execution, uint64_t duration )
设置指定执行中 WHILE 循环的最大持续时间。
这是一个模糊的每循环超时,旨在防止无限循环。
如果 WHILE 循环条件模型未能在指定持续时间内输出 false,则执行将中止。
有关默认和最大超时值,请参阅 ANeuralNetworks_getDefaultLoopTimeout 和 ANeuralNetworks_getMaximumLoopTimeout。
此函数只能在执行处于准备状态时调用。
有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution。
自 NNAPI feature level 4 起可用。 已弃用。 NNAPI 已弃用。有关详细信息,请参阅此网页。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
成功时为 ANEURALNETWORKS_NO_ERROR。如果执行已开始,则为 ANEURALNETWORKS_BAD_STATE。如果 execution 为 NULL,则为 ANEURALNETWORKS_UNEXPECTED_NULL。
|
ANeuralNetworksExecution_setMeasureTiming
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_setMeasureTiming( ANeuralNetworksExecution *execution, bool measure )
指定是否测量 ANeuralNetworksExecution 的持续时间。
执行的评估不得已调度。
默认情况下,不测量持续时间。
ANeuralNetworksExecution 必须从一个 ANeuralNetworksCompilation 创建,该 ANeuralNetworksCompilation 又是由 numDevices = 1 的 ANeuralNetworksCompilation_createForDevices 创建的。如果设备的特征级别(由 ANeuralNetworksDevice_getFeatureLevel 报告)低于 ANEURALNETWORKS_FEATURE_LEVEL_3,则不会测量持续时间。
此函数只能在执行处于准备状态时调用。
有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution。
自 NNAPI 功能级别 3 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksExecution_setOutput
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_setOutput( ANeuralNetworksExecution *execution, int32_t index, const ANeuralNetworksOperandType *type, void *buffer, size_t length )
将用户缓冲区与 ANeuralNetworksExecution 的模型输出相关联。
执行的评估不得已调度。一旦执行的评估已调度,应用程序在执行完成之前不得更改缓冲区的内容。
提供的缓冲区生命周期必须长于执行。
如果输出是可选的,可以通过传递 nullptr 作为 buffer 和 0 作为 length 来指示省略它。
否则,如果用户未通过调用 ANeuralNetworksExecution_enableInputAndOutputPadding 将执行设置为接受带填充的输出缓冲区,则 length 参数必须等于输出的原始大小(即,元素大小乘以元素数量)。传递一个值不等于输出原始大小的 length 参数将导致 ANEURALNETWORKS_BAD_DATA。
否则,如果用户已通过调用 ANeuralNetworksExecution_enableInputAndOutputPadding 将执行设置为接受带填充的输出缓冲区,则 length 参数可以大于输出的原始大小,并且缓冲区末尾的额外字节可由驱动程序用于以块为单位访问数据,以提高效率。传递一个值小于输出原始大小的 length 参数将导致 ANEURALNETWORKS_BAD_DATA。
此函数只能在执行处于准备状态时调用。
有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution。有关获取首选缓冲区对齐和填充以提高性能的信息,请参阅 ANeuralNetworksCompilation_getPreferredMemoryAlignmentForOutput 和 ANeuralNetworksCompilation_getPreferredMemoryPaddingForOutput。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||
返回值 |
成功时为 ANEURALNETWORKS_NO_ERROR,如果名称无法识别或缓冲区对于输出来说太小,则为 ANEURALNETWORKS_BAD_DATA。
|
ANeuralNetworksExecution_setOutputFromMemory
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_setOutputFromMemory( ANeuralNetworksExecution *execution, int32_t index, const ANeuralNetworksOperandType *type, const ANeuralNetworksMemory *memory, size_t offset, size_t length )
将内存对象的区域与 ANeuralNetworksExecution 的模型输出相关联。
执行的评估不得已调度。一旦执行的评估已调度,应用程序在执行完成之前不得更改区域的内容。
提供的内存生命周期必须长于执行。
如果输出是可选的,可以通过使用 ANeuralNetworksExecution_setOutput 代替,传递 nullptr 作为 buffer 和 0 作为 length 来指示省略它。
如果内存是来自 ANeuralNetworksMemory_createFromAHardwareBuffer 创建的 AHARDWAREBUFFER_FORMAT_BLOB 格式以外的 AHardwareBuffer,或来自 ANeuralNetworksMemory_createFromDesc 创建的不透明内存对象,则 offset 和 length 都必须为 0,表示使用整个内存区域。
否则,如果用户未通过调用 ANeuralNetworksExecution_enableInputAndOutputPadding 将执行设置为接受带填充的输出内存对象,则 length 参数必须等于输出的原始大小(即,元素大小乘以元素数量)。传递一个值不等于输出原始大小的 length 参数将导致 ANEURALNETWORKS_BAD_DATA。
否则,如果用户已通过调用 ANeuralNetworksExecution_enableInputAndOutputPadding 将执行设置为接受带填充的输出内存对象,则 length 参数可以大于输出的原始大小,并且内存区域末尾的额外字节可由驱动程序用于以块为单位访问数据,以提高效率。传递一个值小于输出原始大小的 length 参数将导致 ANEURALNETWORKS_BAD_DATA。
此函数只能在执行处于准备状态时调用。
有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution。有关 AHardwareBuffer 使用信息,请参阅 ANeuralNetworksMemory_createFromAHardwareBuffer。有关从内存描述符创建的内存对象使用信息,请参阅 ANeuralNetworksMemory_createFromDesc。有关获取首选内存对齐和填充以提高性能的信息,请参阅 ANeuralNetworksCompilation_getPreferredMemoryAlignmentForOutput 和 ANeuralNetworksCompilation_getPreferredMemoryPaddingForOutput。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||||
返回值 |
成功时为 ANEURALNETWORKS_NO_ERROR,如果名称无法识别或缓冲区对于输出来说太小,则为 ANEURALNETWORKS_BAD_DATA。
|
ANeuralNetworksExecution_setReusable
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_setReusable( ANeuralNetworksExecution *execution, bool reusable )
指定 ANeuralNetworksExecution 是否可重复用于多次计算。
默认情况下,ANeuralNetworksExecution 不可重用。
将执行设置为可重用,可以通过 ANeuralNetworksExecution_burstCompute、ANeuralNetworksExecution_compute、ANeuralNetworksExecution_startCompute 或 ANeuralNetworksExecution_startComputeWithDependencies 顺序调度和评估同一执行的多个计算:应用程序可以在可重用执行的完成状态下再次调度和评估计算。
此函数只能在执行处于准备状态时调用。
有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution。
自 NNAPI 功能级别 5 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
成功时为 ANEURALNETWORKS_NO_ERROR。如果 execution 为 NULL,则为 ANEURALNETWORKS_UNEXPECTED_NULL。如果执行未处于准备状态,则为 ANEURALNETWORKS_BAD_STATE。
|
ANeuralNetworksExecution_setTimeout
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_setTimeout( ANeuralNetworksExecution *execution, uint64_t duration )
设置指定执行的最大预期持续时间。
如果设备无法在指定持续时间内完成执行,执行可能会中止。超时持续时间从调用以下函数之一开始计算:
- ANeuralNetworksExecution_burstCompute
- ANeuralNetworksExecution_compute
- ANeuralNetworksExecution_startCompute
- ANeuralNetworksExecution_startComputeWithDependencies
此超时持续时间是给驱动程序的提示,可用于释放驱动程序内的计算资源并比没有提示更快地将控制权返回给应用程序。如果驱动程序认为执行无法在超时持续时间内完成,它允许驱动程序在执行开始之前中止执行。同样,如果正在进行的执行耗时过长,它允许驱动程序中止执行。但是,此调用不能保证执行会在超时持续时间内完成或中止。
默认情况下(即,除非调用 ANeuralNetworksExecution_setTimeout),执行的超时持续时间被视为无限。
ANeuralNetworksExecution 必须从一个 ANeuralNetworksCompilation 创建,该 ANeuralNetworksCompilation 又是由 numDevices = 1 的 ANeuralNetworksCompilation_createForDevices 创建的,否则此函数将以 ANEURALNETWORKS_BAD_DATA 失败。如果设备的特征级别(由 ANeuralNetworksDevice_getFeatureLevel 报告)低于 ANEURALNETWORKS_FEATURE_LEVEL_4,则超时持续时间提示将被忽略。
此函数只能在执行处于准备状态时调用。
有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution。
自 NNAPI feature level 4 起可用。 已弃用。 NNAPI 已弃用。有关详细信息,请参阅此网页。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksExecution_startCompute
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_startCompute( ANeuralNetworksExecution *execution, ANeuralNetworksEvent **event )
安排执行的异步评估。
调度执行的异步评估。一旦执行完成且输出准备好被使用,返回的事件将收到信号。使用 ANeuralNetworksEvent_wait 等待该事件。
必须调用 ANeuralNetworksEvent_wait 来回收执行使用的资源。
如果对该执行调用了 ANeuralNetworksExecution_setTimeout,并且执行未能在超时持续时间超出之前完成,则执行可能会中止,在这种情况下,将通过 ANeuralNetworksExecution_startCompute 或事件对象上的 ANeuralNetworksEvent_wait 返回 ANEURALNETWORKS_MISSED_DEADLINE_* ResultCode。如果设备的特征级别(由 ANeuralNetworksDevice_getFeatureLevel 报告)低于 ANEURALNETWORKS_FEATURE_LEVEL_4,则超时持续时间提示将被忽略。
如果此执行包含 ANEURALNETWORKS_WHILE 操作,并且条件模型未能在循环超时持续时间内输出 false,则执行将中止,并通过事件对象上的 ANeuralNetworksEvent_wait 返回 ANEURALNETWORKS_MISSED_DEADLINE_* ResultCode。
如果设备能够在执行开始之前检测到执行无法在超时持续时间内完成,设备可以选择跳过执行并改为返回 ANEURALNETWORKS_MISSED_DEADLINE_* ResultCode。
在 NNAPI feature level 5 之前,此函数只能在执行处于准备状态时调用。从 NNAPI feature level 5 开始,如果用户通过 ANeuralNetworksExecution_setReusable 将执行设置为可重用,则当执行处于完成状态时也可以调用此函数。
有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution。
有关同步执行,请参阅 ANeuralNetworksExecution_compute。有关 burst 同步执行,请参阅 ANeuralNetworksExecution_burstCompute。有关常规异步执行,请参阅 ANeuralNetworksExecution_startCompute。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果评估成功调度,则为 ANEURALNETWORKS_NO_ERROR。
|
ANeuralNetworksExecution_startComputeWithDependencies
在android/NeuralNetworks.h
中声明
int ANeuralNetworksExecution_startComputeWithDependencies( ANeuralNetworksExecution *execution, const ANeuralNetworksEvent *const *dependencies, uint32_t num_dependencies, uint64_t duration, ANeuralNetworksEvent **event )
安排执行的异步评估,并带有依赖项。
执行将等待所有依赖事件收到信号后才会开始评估。一旦执行完成且输出准备好被使用,返回的事件将收到信号。根据处理执行的设备,事件可能由 sync fence 支持。使用 ANeuralNetworksEvent_wait 等待该事件。
必须调用 ANeuralNetworksEvent_wait 来回收执行使用的资源。
如果执行的部分调度在不支持 fenced execution 的设备上,则函数调用可能会等待这些部分完成后再返回。
如果 dependencies 中的任何事件已处于不良状态,函数将返回错误。执行调度后,如果 dependencies 中的任何事件未正常完成,执行将失败,并且返回的事件上的 ANeuralNetworksEvent_wait 将返回错误。
如果任何执行输出具有未完全指定的 tensor 操作数类型,函数将返回错误。
该函数可以传递一个以纳秒为单位的超时持续时间。此超时持续时间对驱动程序起提示作用的方式与 ANeuralNetworksCompilation_setTimeout 和 ANeuralNetworksExecution_setTimeout 中的超时持续时间对驱动程序起提示作用的方式相同。持续时间从所有 waitFor sync fences 都收到信号后开始计算,并且可以与 ANeuralNetworksExecution_setTimeout 一起使用,后者指定了从调用 ANeuralNetworksExecution_startComputeWithDependencies 开始的最大超时持续时间。如果持续时间非零,ANeuralNetworksExecution 必须从一个 ANeuralNetworksCompilation 创建,该 ANeuralNetworksCompilation 又是由 numDevices = 1 的 ANeuralNetworksCompilation_createForDevices 创建的,否则此函数将以 ANEURALNETWORKS_BAD_DATA 失败。如果超出 ANeuralNetworksExecution_setTimeout 中的超时持续时间或传递给此调用的超时持续时间,执行可能会中止,在这种情况下,将通过 ANeuralNetworksExecution_startComputeWithDependencies 或事件对象上的 ANeuralNetworksEvent_wait 返回 ANEURALNETWORKS_MISSED_DEADLINE_* ResultCode。如果设备的特征级别(由 ANeuralNetworksDevice_getFeatureLevel 报告)低于 ANEURALNETWORKS_FEATURE_LEVEL_4,则超时持续时间提示将被忽略。
如果此执行包含 ANEURALNETWORKS_WHILE 操作,并且条件模型未能在循环超时持续时间内输出 false,则执行将中止,并通过事件对象上的 ANeuralNetworksEvent_wait 返回 ANEURALNETWORKS_MISSED_DEADLINE_* ResultCode。
在 NNAPI feature level 5 之前,此函数只能在执行处于准备状态时调用。从 NNAPI feature level 5 开始,如果用户通过 ANeuralNetworksExecution_setReusable 将执行设置为可重用,则当执行处于完成状态时也可以调用此函数。
有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution。
有关同步执行,请参阅 ANeuralNetworksExecution_compute。有关 burst 同步执行,请参阅 ANeuralNetworksExecution_burstCompute。有关常规异步执行,请参阅 ANeuralNetworksExecution_startCompute。
自 NNAPI feature level 4 起可用。 已弃用。 NNAPI 已弃用。有关详细信息,请参阅此网页。
详细信息 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||
返回值 |
如果评估成功调度,则为 ANEURALNETWORKS_NO_ERROR。
|
ANeuralNetworksMemoryDesc_addInputRole
在android/NeuralNetworks.h
中声明
int ANeuralNetworksMemoryDesc_addInputRole( ANeuralNetworksMemoryDesc *desc, const ANeuralNetworksCompilation *compilation, uint32_t index, float frequency )
指定内存对象将在从特定编译创建的执行中扮演输入角色。
编译和输入索引完整指定一个输入操作数。可以对同一个内存描述符多次调用此函数,指定不同的输入操作数,并且可以在多个内存描述符上指定同一个输入操作数。但是,在同一个内存描述符上多次指定同一个输入操作数将返回错误。
由 ANeuralNetworksMemoryDesc_addInputRole 和 ANeuralNetworksMemoryDesc_addOutputRole 指定的所有角色的相应模型操作数的维度必须相互兼容。如果两个秩都被完全指定但值不同,或者至少有一个轴在两者中都被完全指定但值不同,则两个维度不兼容。
在调用 ANeuralNetworksMemoryDesc_finish 之前,必须至少调用一次 ANeuralNetworksMemoryDesc_addInputRole 和 ANeuralNetworksMemoryDesc_addOutputRole 中的一个或多个函数来处理内存描述符。
在调用 ANeuralNetworksMemoryDesc_finish 后尝试修改内存描述符将返回错误。
有关多线程使用的信息,请参阅 ANeuralNetworksMemoryDesc。
自 NNAPI 功能级别 4 起可用。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksMemoryDesc_addOutputRole
在android/NeuralNetworks.h
中声明
int ANeuralNetworksMemoryDesc_addOutputRole( ANeuralNetworksMemoryDesc *desc, const ANeuralNetworksCompilation *compilation, uint32_t index, float frequency )
指定内存对象将在从特定编译创建的执行中扮演输出角色。
编译和输出索引完整指定一个输出操作数。可以对同一个内存描述符多次调用此函数,指定不同的输出操作数,并且可以在多个内存描述符对象上指定同一个输出操作数。但是,在同一个内存描述符对象上多次指定同一个输出操作数将返回错误。
由 ANeuralNetworksMemoryDesc_addInputRole 和 ANeuralNetworksMemoryDesc_addOutputRole 指定的所有角色的相应模型操作数的维度必须相互兼容。如果两个秩都被完全指定但值不同,或者至少有一个轴在两者中都被完全指定但值不同,则两个维度不兼容。
在调用 ANeuralNetworksMemoryDesc_finish 之前,必须至少调用一次 ANeuralNetworksMemoryDesc_addInputRole 和 ANeuralNetworksMemoryDesc_addOutputRole 中的一个或多个函数来处理内存描述符。
在调用 ANeuralNetworksMemoryDesc_finish 后尝试修改内存描述符将返回错误。
有关多线程使用的信息,请参阅 ANeuralNetworksMemoryDesc。
自 NNAPI 功能级别 4 起可用。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksMemoryDesc_create
在android/NeuralNetworks.h
中声明
int ANeuralNetworksMemoryDesc_create( ANeuralNetworksMemoryDesc **desc )
创建一个不带任何属性的 ANeuralNetworksMemoryDesc。
这只会创建内存描述符。应通过调用 ANeuralNetworksMemoryDesc_addInputRole、ANeuralNetworksMemoryDesc_addOutputRole 和 ANeuralNetworksMemoryDesc_setDimensions 设置其属性。
设置所有属性后,必须调用一次 ANeuralNetworksMemoryDesc_finish。
不再需要内存描述符时,必须调用 ANeuralNetworksMemoryDesc_free。
自 NNAPI 功能级别 4 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksMemoryDesc_finish
在android/NeuralNetworks.h
中声明
int ANeuralNetworksMemoryDesc_finish( ANeuralNetworksMemoryDesc *desc )
表示我们已完成对内存描述符的修改。
在调用 ANeuralNetworksMemory_createFromDesc 之前是必需的。
对于给定的内存描述符,此函数只能调用一次。
有关多线程使用的信息,请参阅 ANeuralNetworksMemoryDesc。
自 NNAPI 功能级别 4 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksMemoryDesc_free
在android/NeuralNetworks.h
中声明
void ANeuralNetworksMemoryDesc_free( ANeuralNetworksMemoryDesc *desc )
销毁内存描述符。
内存描述符无需已通过调用 ANeuralNetworksMemoryDesc_finish 完成。
有关多线程使用的信息,请参阅 ANeuralNetworksMemoryDesc。
自 NNAPI 功能级别 4 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
ANeuralNetworksMemoryDesc_setDimensions
在android/NeuralNetworks.h
中声明
int ANeuralNetworksMemoryDesc_setDimensions( ANeuralNetworksMemoryDesc *desc, uint32_t rank, const uint32_t *dimensions )
设置内存描述符的维度信息。
指定的维度必须与由 ANeuralNetworksMemoryDesc_addInputRole 和 ANeuralNetworksMemoryDesc_addOutputRole 指定的所有角色的相应模型操作数的维度兼容。如果两个秩都被完全指定但值不同,或者至少有一个轴在两者中都被完全指定但值不同,则两个维度不兼容。
在调用 ANeuralNetworksMemoryDesc_finish 后尝试修改内存描述符将返回错误。
有关多线程使用的信息,请参阅 ANeuralNetworksMemoryDesc。
自 NNAPI 功能级别 4 起可用。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksMemory_copy
在android/NeuralNetworks.h
中声明
int ANeuralNetworksMemory_copy( const ANeuralNetworksMemory *src, const ANeuralNetworksMemory *dst )
将数据从一个内存对象复制到另一个内存对象。
如果 src 和 dst 中至多有一个是由 ANeuralNetworksMemory_createFromDesc 创建的,则 src 和 dst 必须具有相同的逻辑大小。
- 如果内存是由 ANeuralNetworksMemory_createFromFd 创建的,或者是由 ANeuralNetworksMemory_createFromAHardwareBuffer 创建的且格式为 AHARDWAREBUFFER_FORMAT_BLOB,则逻辑大小等于内存大小。
- 如果内存是由 ANeuralNetworksMemory_createFromAHardwareBuffer 创建的且格式不是 AHARDWAREBUFFER_FORMAT_BLOB,则逻辑大小等于没有填充且数据紧密打包时的大小。如果无法访问 AHardwareBuffer,此函数可能会失败。
- 如果内存是由 ANeuralNetworksMemory_createFromDesc 创建的,则逻辑大小等于由 OperandCode 指示的大小乘以元素数量。如果元素数量未知,此函数将失败。
如果 src 和 dst 都是由 ANeuralNetworksMemory_createFromDesc 创建的,则它们必须具有兼容的维度。如果两个秩都被完全指定但值不同,或者至少有一个轴在两者中都被完全指定但值不同,则两个维度不兼容。dst 可以具有未指定的维度或秩。在这种情况下,dst 的维度将根据 src 的维度更新。
在这两种情况下,如果 src 是由 ANeuralNetworksMemory_createFromDesc 创建的,则它必须已在成功的执行中用作输出,或在成功的 ANeuralNetworksMemory_copy 中用作目标内存。
src 和 dst 可以具有不同的数据布局,在这种情况下,数据复制将进行逻辑操作并进行数据布局转换。
自 NNAPI 功能级别 4 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksMemory_createFromAHardwareBuffer
在android/NeuralNetworks.h
中声明
int ANeuralNetworksMemory_createFromAHardwareBuffer( const AHardwareBuffer *ahwb, ANeuralNetworksMemory **memory )
从 AHardwareBuffer 句柄创建共享内存对象。
如果共享内存由 AHARDWAREBUFFER_FORMAT_BLOB 格式的 AHardwareBuffer 支持,则可以像从文件句柄创建的共享内存一样使用。有关如何使用此共享内存的说明,请参阅 ANeuralNetworksMemory。
如果共享内存由 AHARDWAREBUFFER_FORMAT_BLOB 格式以外的 AHardwareBuffer 支持,则它只能用于模型输入和输出。使用该共享内存调用 ANeuralNetworksExecution_setInputFromMemory 或 ANeuralNetworksExecution_setOutputFromMemory 时,offset 和 length 都必须设置为零,并且整个内存区域将与指定的输入或输出操作数关联。不能保证任意 AHardwareBuffer_Format 和 AHardwareBuffer_UsageFlags 组合可以被任意设备使用。如果选择的设备集无法使用该缓冲区,执行将失败。
禁止使用 AHARDWAREBUFFER_FORMAT_BLOB 格式以外的 AHardwareBuffer 支持的共享内存调用 ANeuralNetworksModel_setOperandValueFromMemory。
提供的 AHardwareBuffer 的生命周期必须长于 ANeuralNetworksMemory 对象。
自 NNAPI 功能级别 3 起可用。
另请参阅:AHardwareBuffer 已弃用。 NNAPI 已弃用。有关详细信息,请参阅此网页。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果请求正常完成,则为 ANEURALNETWORKS_NO_ERROR。
|
ANeuralNetworksMemory_createFromDesc
在android/NeuralNetworks.h
中声明
int ANeuralNetworksMemory_createFromDesc( const ANeuralNetworksMemoryDesc *desc, ANeuralNetworksMemory **memory )
从内存描述符创建内存对象。
创建的内存对象具有未初始化的缓冲区。具有未初始化缓冲区的内存对象只能按照 ANeuralNetworksMemoryDesc_addOutputRole 指定的角色使用,或者在 ANeuralNetworksMemory_copy 中用作目标内存。内存对象的缓冲区在内存对象在成功的执行中用作输出,或在成功的 ANeuralNetworksMemory_copy 中用作目标内存后被初始化。具有初始化缓冲区的内存对象可以按照 ANeuralNetworksMemoryDesc 中指定的所有角色使用,或在 ANeuralNetworksMemory_copy 中用作源内存或目标内存。如果内存对象在失败的执行中用作输出,或在失败的 ANeuralNetworksMemory_copy 中用作目标内存,则内存对象的缓冲区将返回到未初始化状态。
内存描述符的维度是根据 ANeuralNetworksMemoryDesc_addInputRole 和 ANeuralNetworksMemoryDesc_addOutputRole 指定的所有角色的相应模型操作数的维度以及通过调用 ANeuralNetworksMemoryDesc_setDimensions 设置的维度(如果有)推导出来的。内存描述符可以具有未指定的维度或秩。在这种情况下,同一个内存对象可以在不同的执行中使用不同的输出形状。当内存用作输入时,输入形状必须与上一次使用此内存对象作为输出的执行或上一次使用此内存对象作为目标内存的 ANeuralNetworksMemory_copy 的输出形状相同。为具有未指定维度或秩的内存对象创建可能会因某些角色集而失败。
在与上述规则不兼容的角色或形状中使用内存将返回错误。
使用该内存对象调用 ANeuralNetworksExecution_setInputFromMemory 或 ANeuralNetworksExecution_setOutputFromMemory 时,offset 和 length 都必须设置为零,并且整个内存区域将与指定的输入或输出操作数关联。
使用此函数创建的内存调用 ANeuralNetworksModel_setOperandValueFromMemory 将返回错误。
不再需要内存时,必须调用 ANeuralNetworksMemory_free。
尝试从未完成的内存描述符创建内存将返回错误。
提供的 ANeuralNetworksMemoryDesc 不需要比 ANeuralNetworksMemory 对象生命周期长。
自 NNAPI 功能级别 4 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
成功时为 ANEURALNETWORKS_NO_ERROR;如果创建的内存具有未指定的维度或秩且此角色集不支持,则为 ANEURALNETWORKS_OP_FAILED。
|
ANeuralNetworksMemory_createFromFd
在android/NeuralNetworks.h
中声明
int ANeuralNetworksMemory_createFromFd( size_t size, int protect, int fd, size_t offset, ANeuralNetworksMemory **memory )
从文件描述符创建共享内存对象。
共享内存通过 mmap 由文件描述符支持。有关如何使用此共享内存的说明,请参阅 ANeuralNetworksMemory。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||
返回值 |
如果请求正常完成,则为 ANEURALNETWORKS_NO_ERROR。
|
ANeuralNetworksMemory_free
在android/NeuralNetworks.h
中声明
void ANeuralNetworksMemory_free( ANeuralNetworksMemory *memory )
ANeuralNetworksModel_addOperand
在android/NeuralNetworks.h
中声明
int ANeuralNetworksModel_addOperand( ANeuralNetworksModel *model, const ANeuralNetworksOperandType *type )
向模型添加操作数。
操作数添加的顺序非常重要。第一个添加到模型的操作数将具有索引值 0,第二个为 1,依此类推。这些索引在 ANeuralNetworksModel_addOperation、ANeuralNetworksModel_identifyInputsAndOutputs、ANeuralNetworksModel_setOperandValue、ANeuralNetworksModel_setOperandValueFromMemory、ANeuralNetworksExecution_setInput、ANeuralNetworksExecution_setInputFromMemory、ANeuralNetworksExecution_setOutput 和 ANeuralNetworksExecution_setOutputFromMemory 中用作操作符标识符。
每个操作数必须恰好通过以下方式之一引用:
- 它被 ANeuralNetworksModel_identifyInputsAndOutputs 标识为模型输入。
- 它被 ANeuralNetworksModel_setOperandValue 或 ANeuralNetworksModel_setOperandValueFromMemory 标识为常量。
- 它被 ANeuralNetworksModel_addOperation 标识为恰好一个操作的输出。
被标识为模型输入或常量的操作数不得同时被 ANeuralNetworksModel_identifyInputsAndOutputs 标识为模型输出。
要构建一个能够适应不同大小输入的模型(例如 CNN),请将运行时会变化的维度留空。如果这样做,请在调用 ANeuralNetworksExecution_setInput 或 ANeuralNetworksExecution_setInputFromMemory 时完整指定维度。
在调用 ANeuralNetworksModel_finish 后尝试修改模型将返回错误。
有关多线程使用的信息,请参阅 ANeuralNetworksModel。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksModel_addOperation
在android/NeuralNetworks.h
中声明
int ANeuralNetworksModel_addOperation( ANeuralNetworksModel *model, ANeuralNetworksOperationType type, uint32_t inputCount, const uint32_t *inputs, uint32_t outputCount, const uint32_t *outputs )
向模型添加操作。
inputs 和 outputs 指定的操作数必须已通过调用 ANeuralNetworksModel_addOperand 事先添加。
详细信息 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
在调用 ANeuralNetworksModel_finish 后尝试修改模型将返回错误。
有关多线程使用的信息,请参阅 ANeuralNetworksModel。
自 NNAPI 功能级别 1 起可用。
详细信息 | |
---|---|
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksModel_create
在android/NeuralNetworks.h
中声明
int ANeuralNetworksModel_create( ANeuralNetworksModel **model )
创建一个空的 ANeuralNetworksModel。
这只会创建对象。计算仅在调用 ANeuralNetworksExecution_burstCompute、ANeuralNetworksExecution_compute、ANeuralNetworksExecution_startCompute 或 ANeuralNetworksExecution_startComputeWithDependencies 后执行。
应通过调用 ANeuralNetworksModel_addOperation 和 ANeuralNetworksModel_addOperand 构建模型。
模型完全构建后,应调用 ANeuralNetworksModel_finish。
不再需要模型时,应调用 ANeuralNetworksModel_free。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksModel_finish
在android/NeuralNetworks.h
中声明
int ANeuralNetworksModel_finish( ANeuralNetworksModel *model )
表示我们已完成对模型的修改。
在调用 ANeuralNetworksCompilation_create 和 ANeuralNetworksCompilation_createForDevices 之前是必需的。
应用程序必须确保在同一时间没有其他线程使用该模型。
对于给定的模型,此函数只能调用一次。
有关多线程使用的信息,请参阅 ANeuralNetworksModel。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksModel_free
在android/NeuralNetworks.h
中声明
void ANeuralNetworksModel_free( ANeuralNetworksModel *model )
销毁模型。
模型无需已通过调用 ANeuralNetworksModel_finish 完成。
有关多线程使用的信息,请参阅 ANeuralNetworksModel。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
ANeuralNetworksModel_getSupportedOperationsForDevices
在android/NeuralNetworks.h
中声明
int ANeuralNetworksModel_getSupportedOperationsForDevices( const ANeuralNetworksModel *model, const ANeuralNetworksDevice *const *devices, uint32_t numDevices, bool *supportedOps )
ANeuralNetworksModel_identifyInputsAndOutputs
在android/NeuralNetworks.h
中声明
int ANeuralNetworksModel_identifyInputsAndOutputs( ANeuralNetworksModel *model, uint32_t inputCount, const uint32_t *inputs, uint32_t outputCount, const uint32_t *outputs )
指定哪些操作数将是模型的输入和输出。
每个模型必须至少有一个输入和一个输出。
操作数不能同时用于输入和输出。这样做将返回错误。
inputs 和 outputs 指定的操作数必须已通过调用 ANeuralNetworksModel_addOperand 事先添加。
详细信息 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
在调用 ANeuralNetworksModel_finish 后尝试修改模型将返回错误。
有关多线程使用的信息,请参阅 ANeuralNetworksModel。
自 NNAPI 功能级别 1 起可用。
ANeuralNetworksModel_relaxComputationFloat32toFloat16
在android/NeuralNetworks.h
中声明
int ANeuralNetworksModel_relaxComputationFloat32toFloat16( ANeuralNetworksModel *model, bool allow )
指定是否允许使用低至 IEEE 754 16 位浮点格式的范围和/或精度计算 ANEURALNETWORKS_TENSOR_FLOAT32。
默认情况下,ANEURALNETWORKS_TENSOR_FLOAT32 的计算必须至少使用 IEEE 754 32 位浮点格式的范围和精度。
编译的主模型的 relaxComputationFloat32toFloat16 设置将覆盖引用的模型的值。
在调用 ANeuralNetworksModel_finish 后尝试修改模型将返回错误。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
自 NNAPI 功能级别 2 起可用。
有关多线程使用的信息,请参阅 ANeuralNetworksModel。 已弃用。 NNAPI 已弃用。有关详细信息,请参阅此网页。
ANeuralNetworksModel_setOperandSymmPerChannelQuantParams
在android/NeuralNetworks.h
中声明
int ANeuralNetworksModel_setOperandSymmPerChannelQuantParams( ANeuralNetworksModel *model, int32_t index, const ANeuralNetworksSymmPerChannelQuantParams *channelQuant )
设置操作数的每通道量化参数。
设置类型为 ANEURALNETWORKS_TENSOR_QUANT8_SYMM_PER_CHANNEL 的张量所需的参数。对于每个类型为 ANEURALNETWORKS_TENSOR_QUANT8_SYMM_PER_CHANNEL 的张量,必须在调用 ANeuralNetworksModel_finish 之前调用此函数。
自 NNAPI 功能级别 3 起可用。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksModel_setOperandValue
在android/NeuralNetworks.h
中声明
int ANeuralNetworksModel_setOperandValue( ANeuralNetworksModel *model, int32_t index, const void *buffer, size_t length )
将操作数设置为常量值。
长度小于或等于 ANEURALNETWORKS_MAX_SIZE_OF_IMMEDIATELY_COPIED_VALUES 的值会立即复制到模型中。
对于长度大于 ANEURALNETWORKS_MAX_SIZE_OF_IMMEDIATELY_COPIED_VALUES 的值,缓冲区的指针存储在模型中。应用程序在使用此模型的所有执行完成之前不得更改此区域的内容。由于数据在处理过程中可能会被复制,因此在此调用后修改数据会产生未定义的结果。提供的缓冲区生命周期必须长于此模型。
对于大型张量,使用 ANeuralNetworksModel_setOperandValueFromMemory 可能更高效。
要指示可选操作数应被视为缺失,请传递 nullptr 作为 buffer 和 0 作为 length。
在调用 ANeuralNetworksModel_finish 后尝试修改模型将返回错误。
有关多线程使用的信息,请参阅 ANeuralNetworksModel。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksModel_setOperandValueFromMemory
在android/NeuralNetworks.h
中声明
int ANeuralNetworksModel_setOperandValueFromMemory( ANeuralNetworksModel *model, int32_t index, const ANeuralNetworksMemory *memory, size_t offset, size_t length )
将内存对象中存储的值设置为操作数。
内存的内容不会被复制。对该内存的引用存储在模型内部。在使用此模型的所有执行完成之前,应用程序不得更改内存区域的内容。由于数据在处理过程中可能会被复制,因此在此调用后修改数据会产生未定义的结果。
提供的内存生命周期必须长于此模型。
若要指示可选操作数应被视为缺失,请改用 ANeuralNetworksModel_setOperandValue,为缓冲区传递 nullptr。
不允许使用非 AHARDWAREBUFFER_FORMAT_BLOB 格式的 AHardwareBuffer 支持的共享内存来设置操作数值。
不允许使用通过 ANeuralNetworksMemory_createFromDesc 创建的内存来设置操作数值。
在调用 ANeuralNetworksModel_finish 后尝试修改模型将返回错误。
请参阅 ANeuralNetworksModel 以了解多线程使用信息。请参阅 ANeuralNetworksMemory_createFromAHardwareBuffer 以了解 AHardwareBuffer 使用信息。
自 NNAPI 功能级别 1 起可用。
详细信息 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworksModel_setOperandValueFromModel
在android/NeuralNetworks.h
中声明
int ANeuralNetworksModel_setOperandValueFromModel( ANeuralNetworksModel *model, int32_t index, const ANeuralNetworksModel *value )
将操作数设置为引用另一个 NNAPI 模型的值。
引用模型必须已通过调用 ANeuralNetworksModel_finish 完成。
引用模型的 ANeuralNetworksModel_relaxComputationFloat32toFloat16 设置会被编译主模型的相应设置覆盖。
被引用的模型必须比引用它的模型存在时间更长。
在调用 ANeuralNetworksModel_finish 后尝试修改模型将返回错误。
有关多线程使用的信息,请参阅 ANeuralNetworksModel。
自 NNAPI 功能级别 4 起可用。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
如果成功则为
ANEURALNETWORKS_NO_ERROR 。 |
ANeuralNetworks_getDefaultLoopTimeout
在android/NeuralNetworks.h
中声明
uint64_t ANeuralNetworks_getDefaultLoopTimeout()
ANeuralNetworks_getDevice
在android/NeuralNetworks.h
中声明
int ANeuralNetworks_getDevice( uint32_t devIndex, ANeuralNetworksDevice **device )
ANeuralNetworks_getDeviceCount
在android/NeuralNetworks.h
中声明
int ANeuralNetworks_getDeviceCount( uint32_t *numDevices )
ANeuralNetworks_getMaximumLoopTimeout
在android/NeuralNetworks.h
中声明
uint64_t ANeuralNetworks_getMaximumLoopTimeout()
ANeuralNetworks_getRuntimeFeatureLevel
在android/NeuralNetworks.h
中声明
int64_t ANeuralNetworks_getRuntimeFeatureLevel()
获取 NNAPI 运行时功能级别。
自 API 级别 31(NNAPI 功能级别 5)起,NNAPI 运行时 (libneuralnetworks.so) 及其 API 规范可以在 Android API 版本之间更新。
在 API 级别 31 及更新版本的 Android 设备上,对于 NNAPI 运行时功能发现,必须使用 NNAPI 运行时功能级别,而不是 Android 设备 API 级别。
在 API 级别 30 及更旧版本的 Android 设备上,必须使用 Android 设备的 Android API 级别进行 NNAPI 运行时功能发现。FeatureLevelCode 中从功能级别 1 到 5 的枚举值在其文档中列出了相应的 Android API 级别,并且每个这样的枚举值都等于相应的 API 级别。这允许将 Android API 级别用作功能级别。对于 NNAPI 功能级别 5 之后的功能级别以及 S (31) 之后的 API 级别,这种枚举值与 Android API 级别之间的映射不存在。
示例用法:int device_api_level = android_get_device_api_level(); int64_t runtime_feature_level = (device_api_level < ANDROID_API_S) ? device_api_level : ANeuralNetworks_getRuntimeFeatureLevel();
运行时功能级别与 NNAPI 设备功能级别 (ANeuralNetworksDevice_getFeatureLevel) 密切相关,后者表示 NNAPI 设备的功能级别(驱动程序实现的最先进的 NNAPI 规范和功能)。此函数表示 NNAPI 运行时功能级别,它表示运行时实现的最先进的 NNAPI 规范和功能。NNAPI 设备功能级别总是小于或等于运行时功能级别。
此函数返回一个 FeatureLevelCode 枚举值,这是此 NNAPI 运行时实现的 NNAPI 规范版本。它不是 Android API 级别。