NeuralNetworks

摘要

枚举

匿名枚举 53{
  ANEURALNETWORKS_MAX_SIZE_OF_IMMEDIATELY_COPIED_VALUES = 128
}
enum
对于 ANeuralNetworksModel_setOperandValue,长度小于或等于此值的值将立即复制到模型中。
匿名枚举 54{
  ANEURALNETWORKS_BYTE_SIZE_OF_CACHE_TOKEN = 32
}
enum
对于 ANeuralNetworksCompilation_setCaching,指定应用所需的缓存令牌大小。
DeviceTypeCode{
  ANEURALNETWORKS_DEVICE_UNKNOWN = 0,
  ANEURALNETWORKS_DEVICE_OTHER = 1,
  ANEURALNETWORKS_DEVICE_CPU = 2,
  ANEURALNETWORKS_DEVICE_GPU = 3,
  ANEURALNETWORKS_DEVICE_ACCELERATOR = 4
}
enum
设备类型。
DurationCode{
  ANEURALNETWORKS_DURATION_ON_HARDWARE = 0,
  ANEURALNETWORKS_DURATION_IN_DRIVER = 1,
  ANEURALNETWORKS_FENCED_DURATION_ON_HARDWARE = 2,
  ANEURALNETWORKS_FENCED_DURATION_IN_DRIVER = 3
}
enum
不同的持续时间测量。
FeatureLevelCode{
  ANEURALNETWORKS_FEATURE_LEVEL_1 = 27,
  ANEURALNETWORKS_FEATURE_LEVEL_2 = 28,
  ANEURALNETWORKS_FEATURE_LEVEL_3 = 29,
  ANEURALNETWORKS_FEATURE_LEVEL_4 = 30,
  ANEURALNETWORKS_FEATURE_LEVEL_5 = 31,
  ANEURALNETWORKS_FEATURE_LEVEL_6 = 1000006,
  ANEURALNETWORKS_FEATURE_LEVEL_7 = 1000007,
  ANEURALNETWORKS_FEATURE_LEVEL_8 = 1000008
}
enum
NNAPI 功能级别。
FuseCode{
  ANEURALNETWORKS_FUSED_NONE = 0,
  ANEURALNETWORKS_FUSED_RELU = 1,
  ANEURALNETWORKS_FUSED_RELU1 = 2,
  ANEURALNETWORKS_FUSED_RELU6 = 3
}
enum
融合激活函数类型。
OperandCode{
  ANEURALNETWORKS_FLOAT32 = 0,
  ANEURALNETWORKS_INT32 = 1,
  ANEURALNETWORKS_UINT32 = 2,
  ANEURALNETWORKS_TENSOR_FLOAT32 = 3,
  ANEURALNETWORKS_TENSOR_INT32 = 4,
  ANEURALNETWORKS_TENSOR_QUANT8_ASYMM = 5,
  ANEURALNETWORKS_BOOL = 6,
  ANEURALNETWORKS_TENSOR_QUANT16_SYMM = 7,
  ANEURALNETWORKS_TENSOR_FLOAT16 = 8,
  ANEURALNETWORKS_TENSOR_BOOL8 = 9,
  ANEURALNETWORKS_FLOAT16 = 10,
  ANEURALNETWORKS_TENSOR_QUANT8_SYMM_PER_CHANNEL = 11,
  ANEURALNETWORKS_TENSOR_QUANT16_ASYMM = 12,
  ANEURALNETWORKS_TENSOR_QUANT8_SYMM = 13,
  ANEURALNETWORKS_TENSOR_QUANT8_ASYMM_SIGNED = 14,
  ANEURALNETWORKS_MODEL = 15
}
enum
操作数类型。
OperationCode{
  ANEURALNETWORKS_ADD = 0,
  ANEURALNETWORKS_AVERAGE_POOL_2D = 1,
  ANEURALNETWORKS_CONCATENATION = 2,
  ANEURALNETWORKS_CONV_2D = 3,
  ANEURALNETWORKS_DEPTHWISE_CONV_2D = 4,
  ANEURALNETWORKS_DEPTH_TO_SPACE = 5,
  ANEURALNETWORKS_DEQUANTIZE = 6,
  ANEURALNETWORKS_EMBEDDING_LOOKUP = 7,
  ANEURALNETWORKS_FLOOR = 8,
  ANEURALNETWORKS_FULLY_CONNECTED = 9,
  ANEURALNETWORKS_HASHTABLE_LOOKUP = 10,
  ANEURALNETWORKS_L2_NORMALIZATION = 11,
  ANEURALNETWORKS_L2_POOL_2D = 12,
  ANEURALNETWORKS_LOCAL_RESPONSE_NORMALIZATION = 13,
  ANEURALNETWORKS_LOGISTIC = 14,
  ANEURALNETWORKS_LSH_PROJECTION = 15,
  ANEURALNETWORKS_LSTM = 16,
  ANEURALNETWORKS_MAX_POOL_2D = 17,
  ANEURALNETWORKS_MUL = 18,
  ANEURALNETWORKS_RELU = 19,
  ANEURALNETWORKS_RELU1 = 20,
  ANEURALNETWORKS_RELU6 = 21,
  ANEURALNETWORKS_RESHAPE = 22,
  ANEURALNETWORKS_RESIZE_BILINEAR = 23,
  ANEURALNETWORKS_RNN = 24,
  ANEURALNETWORKS_SOFTMAX = 25,
  ANEURALNETWORKS_SPACE_TO_DEPTH = 26,
  ANEURALNETWORKS_SVDF = 27,
  ANEURALNETWORKS_TANH = 28,
  ANEURALNETWORKS_BATCH_TO_SPACE_ND = 29,
  ANEURALNETWORKS_DIV = 30,
  ANEURALNETWORKS_MEAN = 31,
  ANEURALNETWORKS_PAD = 32,
  ANEURALNETWORKS_SPACE_TO_BATCH_ND = 33,
  ANEURALNETWORKS_SQUEEZE = 34,
  ANEURALNETWORKS_STRIDED_SLICE = 35,
  ANEURALNETWORKS_SUB = 36,
  ANEURALNETWORKS_TRANSPOSE = 37,
  ANEURALNETWORKS_ABS = 38,
  ANEURALNETWORKS_ARGMAX = 39,
  ANEURALNETWORKS_ARGMIN = 40,
  ANEURALNETWORKS_AXIS_ALIGNED_BBOX_TRANSFORM = 41,
  ANEURALNETWORKS_BIDIRECTIONAL_SEQUENCE_LSTM = 42,
  ANEURALNETWORKS_BIDIRECTIONAL_SEQUENCE_RNN = 43,
  ANEURALNETWORKS_BOX_WITH_NMS_LIMIT = 44,
  ANEURALNETWORKS_CAST = 45,
  ANEURALNETWORKS_CHANNEL_SHUFFLE = 46,
  ANEURALNETWORKS_DETECTION_POSTPROCESSING = 47,
  ANEURALNETWORKS_EQUAL = 48,
  ANEURALNETWORKS_EXP = 49,
  ANEURALNETWORKS_EXPAND_DIMS = 50,
  ANEURALNETWORKS_GATHER = 51,
  ANEURALNETWORKS_GENERATE_PROPOSALS = 52,
  ANEURALNETWORKS_GREATER = 53,
  ANEURALNETWORKS_GREATER_EQUAL = 54,
  ANEURALNETWORKS_GROUPED_CONV_2D = 55,
  ANEURALNETWORKS_HEATMAP_MAX_KEYPOINT = 56,
  ANEURALNETWORKS_INSTANCE_NORMALIZATION = 57,
  ANEURALNETWORKS_LESS = 58,
  ANEURALNETWORKS_LESS_EQUAL = 59,
  ANEURALNETWORKS_LOG = 60,
  ANEURALNETWORKS_LOGICAL_AND = 61,
  ANEURALNETWORKS_LOGICAL_NOT = 62,
  ANEURALNETWORKS_LOGICAL_OR = 63,
  ANEURALNETWORKS_LOG_SOFTMAX = 64,
  ANEURALNETWORKS_MAXIMUM = 65,
  ANEURALNETWORKS_MINIMUM = 66,
  ANEURALNETWORKS_NEG = 67,
  ANEURALNETWORKS_NOT_EQUAL = 68,
  ANEURALNETWORKS_PAD_V2 = 69,
  ANEURALNETWORKS_POW = 70,
  ANEURALNETWORKS_PRELU = 71,
  ANEURALNETWORKS_QUANTIZE = 72,
  ANEURALNETWORKS_QUANTIZED_16BIT_LSTM = 73,
  ANEURALNETWORKS_RANDOM_MULTINOMIAL = 74,
  ANEURALNETWORKS_REDUCE_ALL = 75,
  ANEURALNETWORKS_REDUCE_ANY = 76,
  ANEURALNETWORKS_REDUCE_MAX = 77,
  ANEURALNETWORKS_REDUCE_MIN = 78,
  ANEURALNETWORKS_REDUCE_PROD = 79,
  ANEURALNETWORKS_REDUCE_SUM = 80,
  ANEURALNETWORKS_ROI_ALIGN = 81,
  ANEURALNETWORKS_ROI_POOLING = 82,
  ANEURALNETWORKS_RSQRT = 83,
  ANEURALNETWORKS_SELECT = 84,
  ANEURALNETWORKS_SIN = 85,
  ANEURALNETWORKS_SLICE = 86,
  ANEURALNETWORKS_SPLIT = 87,
  ANEURALNETWORKS_SQRT = 88,
  ANEURALNETWORKS_TILE = 89,
  ANEURALNETWORKS_TOPK_V2 = 90,
  ANEURALNETWORKS_TRANSPOSE_CONV_2D = 91,
  ANEURALNETWORKS_UNIDIRECTIONAL_SEQUENCE_LSTM = 92,
  ANEURALNETWORKS_UNIDIRECTIONAL_SEQUENCE_RNN = 93,
  ANEURALNETWORKS_RESIZE_NEAREST_NEIGHBOR = 94,
  ANEURALNETWORKS_QUANTIZED_LSTM = 95,
  ANEURALNETWORKS_IF = 96,
  ANEURALNETWORKS_WHILE = 97,
  ANEURALNETWORKS_ELU = 98,
  ANEURALNETWORKS_HARD_SWISH = 99,
  ANEURALNETWORKS_FILL = 100,
  ANEURALNETWORKS_RANK = 101,
  ANEURALNETWORKS_BATCH_MATMUL = 102,
  ANEURALNETWORKS_PACK = 103,
  ANEURALNETWORKS_MIRROR_PAD = 104,
  ANEURALNETWORKS_REVERSE = 105
}
enum
操作类型。
PaddingCode{
  ANEURALNETWORKS_PADDING_SAME = 1,
  ANEURALNETWORKS_PADDING_VALID = 2
}
enum
隐式填充算法。
PreferenceCode{
  ANEURALNETWORKS_PREFER_LOW_POWER = 0,
  ANEURALNETWORKS_PREFER_FAST_SINGLE_ANSWER = 1,
  ANEURALNETWORKS_PREFER_SUSTAINED_SPEED = 2
}
enum
执行偏好。
PriorityCode{
  ANEURALNETWORKS_PRIORITY_LOW = 90,
  ANEURALNETWORKS_PRIORITY_MEDIUM = 100,
  ANEURALNETWORKS_PRIORITY_HIGH = 110,
  ANEURALNETWORKS_PRIORITY_DEFAULT = ANEURALNETWORKS_PRIORITY_MEDIUM
}
enum
相对执行优先级。
ResultCode{
  ANEURALNETWORKS_NO_ERROR = 0,
  ANEURALNETWORKS_OUT_OF_MEMORY = 1,
  ANEURALNETWORKS_INCOMPLETE = 2,
  ANEURALNETWORKS_UNEXPECTED_NULL = 3,
  ANEURALNETWORKS_BAD_DATA = 4,
  ANEURALNETWORKS_OP_FAILED = 5,
  ANEURALNETWORKS_BAD_STATE = 6,
  ANEURALNETWORKS_UNMAPPABLE = 7,
  ANEURALNETWORKS_OUTPUT_INSUFFICIENT_SIZE = 8,
  ANEURALNETWORKS_UNAVAILABLE_DEVICE = 9,
  ANEURALNETWORKS_MISSED_DEADLINE_TRANSIENT = 10,
  ANEURALNETWORKS_MISSED_DEADLINE_PERSISTENT = 11,
  ANEURALNETWORKS_RESOURCE_EXHAUSTED_TRANSIENT = 12,
  ANEURALNETWORKS_RESOURCE_EXHAUSTED_PERSISTENT = 13,
  ANEURALNETWORKS_DEAD_OBJECT = 14
}
enum
结果代码。

类型定义

ANeuralNetworksBurst typedef
ANeuralNetworksBurst 是一种不透明类型,可用于降低快速连续执行的延迟。
ANeuralNetworksCompilation typedef
ANeuralNetworksCompilation 是一种不透明类型,可用于编译机器学习模型。
ANeuralNetworksDevice typedef
ANeuralNetworksDevice 是一种表示设备的不透明类型。
ANeuralNetworksEvent typedef
ANeuralNetworksEvent 是一种不透明类型,表示执行完成后将发出的事件。
ANeuralNetworksExecution typedef
ANeuralNetworksExecution 是一种不透明类型,可用于将机器学习模型应用于一组输入。
ANeuralNetworksMemory typedef
ANeuralNetworksMemory 是一种表示内存的不透明类型。
ANeuralNetworksMemoryDesc typedef
ANeuralNetworksMemoryDesc 是一种表示内存描述符的不透明类型。
ANeuralNetworksModel typedef
ANeuralNetworksModel 是一种不透明类型,包含构成模型的数学运算的描述。
ANeuralNetworksOperandType typedef
ANeuralNetworksOperandType 描述了操作数的类型。
ANeuralNetworksOperationType typedef
int32_t
别名 OperationCode,在函数 ANeuralNetworksModel_addOperation 中使用。
ANeuralNetworksSymmPerChannelQuantParams typedef
ANEURALNETWORKS_TENSOR_QUANT8_SYMM_PER_CHANNEL 操作数的参数。

函数

ANeuralNetworksBurst_create(ANeuralNetworksCompilation *compilation, ANeuralNetworksBurst **burst)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
创建一个 ANeuralNetworksBurst 来应用给定的编译。
ANeuralNetworksBurst_free(ANeuralNetworksBurst *burst)
void
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
销毁 burst 对象。
ANeuralNetworksCompilation_create(ANeuralNetworksModel *model, ANeuralNetworksCompilation **compilation)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
创建一个 ANeuralNetworksCompilation 来编译给定模型。
ANeuralNetworksCompilation_createForDevices(ANeuralNetworksModel *model, const ANeuralNetworksDevice *const *devices, uint32_t numDevices, ANeuralNetworksCompilation **compilation)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
创建一个 ANeuralNetworksCompilation 来为指定设备集编译给定模型。
ANeuralNetworksCompilation_finish(ANeuralNetworksCompilation *compilation)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
表示我们已完成对编译的修改。
ANeuralNetworksCompilation_free(ANeuralNetworksCompilation *compilation)
void
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
销毁编译。
ANeuralNetworksCompilation_getPreferredMemoryAlignmentForInput(const ANeuralNetworksCompilation *compilation, uint32_t index, uint32_t *alignment)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取从特定编译创建的执行的输入的首选缓冲区和内存对齐方式。
ANeuralNetworksCompilation_getPreferredMemoryAlignmentForOutput(const ANeuralNetworksCompilation *compilation, uint32_t index, uint32_t *alignment)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取从特定编译创建的执行的输出的首选缓冲区和内存对齐方式。
ANeuralNetworksCompilation_getPreferredMemoryPaddingForInput(const ANeuralNetworksCompilation *compilation, uint32_t index, uint32_t *padding)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取从特定编译创建的执行的输入的首选缓冲区和内存末尾填充。
ANeuralNetworksCompilation_getPreferredMemoryPaddingForOutput(const ANeuralNetworksCompilation *compilation, uint32_t index, uint32_t *padding)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取从特定编译创建的执行的输出的首选内存末尾填充。
ANeuralNetworksCompilation_setCaching(ANeuralNetworksCompilation *compilation, const char *cacheDir, const uint8_t *token)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
设置编译缓存签名和缓存目录。
ANeuralNetworksCompilation_setPreference(ANeuralNetworksCompilation *compilation, int32_t preference)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
设置执行偏好。
ANeuralNetworksCompilation_setPriority(ANeuralNetworksCompilation *compilation, int priority)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
设置执行优先级。
ANeuralNetworksCompilation_setTimeout(ANeuralNetworksCompilation *compilation, uint64_t duration)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
设置编译模型的最大预期持续时间。
ANeuralNetworksDevice_getFeatureLevel(const ANeuralNetworksDevice *device, int64_t *featureLevel)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取指定 NNAPI 设备的功能级别。
ANeuralNetworksDevice_getName(const ANeuralNetworksDevice *device, const char **name)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取指定设备的名称。
ANeuralNetworksDevice_getType(const ANeuralNetworksDevice *device, int32_t *type)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取给定设备的类型。
ANeuralNetworksDevice_getVersion(const ANeuralNetworksDevice *device, const char **version)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取指定设备的驱动实现版本。
ANeuralNetworksDevice_wait(const ANeuralNetworksDevice *device)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
等待设备处于活动状态。
ANeuralNetworksEvent_createFromSyncFenceFd(int sync_fence_fd, ANeuralNetworksEvent **event)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
从 sync_fence 文件描述符创建一个 ANeuralNetworksEvent
ANeuralNetworksEvent_free(ANeuralNetworksEvent *event)
void
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
销毁事件。
ANeuralNetworksEvent_getSyncFenceFd(const ANeuralNetworksEvent *event, int *sync_fence_fd)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
从事件中获取 sync_fence 文件描述符。
ANeuralNetworksEvent_wait(ANeuralNetworksEvent *event)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
等待执行完成。
ANeuralNetworksExecution_burstCompute(ANeuralNetworksExecution *execution, ANeuralNetworksBurst *burst)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
安排在 burst 对象上同步评估执行。
ANeuralNetworksExecution_compute(ANeuralNetworksExecution *execution)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
安排同步评估执行。
ANeuralNetworksExecution_create(ANeuralNetworksCompilation *compilation, ANeuralNetworksExecution **execution)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
创建一个 ANeuralNetworksExecution 来应用给定的编译。
ANeuralNetworksExecution_enableInputAndOutputPadding(ANeuralNetworksExecution *execution, bool enable)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
指定 ANeuralNetworksExecution 是否能够接受带填充的输入和输出缓冲区及内存对象。
ANeuralNetworksExecution_free(ANeuralNetworksExecution *execution)
void
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
销毁执行。
ANeuralNetworksExecution_getDuration(const ANeuralNetworksExecution *execution, int32_t durationCode, uint64_t *duration)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取在指定的 ANeuralNetworksExecution 上评估的最新计算所花费的时间(以纳秒为单位)。
ANeuralNetworksExecution_getOutputOperandDimensions(ANeuralNetworksExecution *execution, int32_t index, uint32_t *dimensions)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取在 ANeuralNetworksExecution 上评估的最新计算中,模型的指定输出操作数的维度信息。
ANeuralNetworksExecution_getOutputOperandRank(ANeuralNetworksExecution *execution, int32_t index, uint32_t *rank)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取在 ANeuralNetworksExecution 上评估的最新计算中,模型的指定输出操作数的维度信息。
ANeuralNetworksExecution_setInput(ANeuralNetworksExecution *execution, int32_t index, const ANeuralNetworksOperandType *type, const void *buffer, size_t length)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
将用户缓冲区与 ANeuralNetworksExecution 的模型输入相关联。
ANeuralNetworksExecution_setInputFromMemory(ANeuralNetworksExecution *execution, int32_t index, const ANeuralNetworksOperandType *type, const ANeuralNetworksMemory *memory, size_t offset, size_t length)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
将内存对象的区域与 ANeuralNetworksExecution 的模型输入相关联。
ANeuralNetworksExecution_setLoopTimeout(ANeuralNetworksExecution *execution, uint64_t duration)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
设置指定执行中 WHILE 循环的最大持续时间。
ANeuralNetworksExecution_setMeasureTiming(ANeuralNetworksExecution *execution, bool measure)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
指定是否测量 ANeuralNetworksExecution 的持续时间。
ANeuralNetworksExecution_setOutput(ANeuralNetworksExecution *execution, int32_t index, const ANeuralNetworksOperandType *type, void *buffer, size_t length)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
将用户缓冲区与 ANeuralNetworksExecution 的模型输出相关联。
ANeuralNetworksExecution_setOutputFromMemory(ANeuralNetworksExecution *execution, int32_t index, const ANeuralNetworksOperandType *type, const ANeuralNetworksMemory *memory, size_t offset, size_t length)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
将内存对象的区域与 ANeuralNetworksExecution 的模型输出相关联。
ANeuralNetworksExecution_setReusable(ANeuralNetworksExecution *execution, bool reusable)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
指定 ANeuralNetworksExecution 是否可重复用于多次计算。
ANeuralNetworksExecution_setTimeout(ANeuralNetworksExecution *execution, uint64_t duration)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
设置指定执行的最大预期持续时间。
ANeuralNetworksExecution_startCompute(ANeuralNetworksExecution *execution, ANeuralNetworksEvent **event)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
安排执行的异步评估。
ANeuralNetworksExecution_startComputeWithDependencies(ANeuralNetworksExecution *execution, const ANeuralNetworksEvent *const *dependencies, uint32_t num_dependencies, uint64_t duration, ANeuralNetworksEvent **event)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
安排执行的异步评估,并带有依赖项。
ANeuralNetworksMemoryDesc_addInputRole(ANeuralNetworksMemoryDesc *desc, const ANeuralNetworksCompilation *compilation, uint32_t index, float frequency)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
指定内存对象将在从特定编译创建的执行中扮演输入角色。
ANeuralNetworksMemoryDesc_addOutputRole(ANeuralNetworksMemoryDesc *desc, const ANeuralNetworksCompilation *compilation, uint32_t index, float frequency)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
指定内存对象将在从特定编译创建的执行中扮演输出角色。
ANeuralNetworksMemoryDesc_create(ANeuralNetworksMemoryDesc **desc)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
创建一个不带任何属性的 ANeuralNetworksMemoryDesc
ANeuralNetworksMemoryDesc_finish(ANeuralNetworksMemoryDesc *desc)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
表示我们已完成对内存描述符的修改。
ANeuralNetworksMemoryDesc_free(ANeuralNetworksMemoryDesc *desc)
void
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
销毁内存描述符。
ANeuralNetworksMemoryDesc_setDimensions(ANeuralNetworksMemoryDesc *desc, uint32_t rank, const uint32_t *dimensions)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
设置内存描述符的维度信息。
ANeuralNetworksMemory_copy(const ANeuralNetworksMemory *src, const ANeuralNetworksMemory *dst)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
将数据从一个内存对象复制到另一个内存对象。
ANeuralNetworksMemory_createFromAHardwareBuffer(const AHardwareBuffer *ahwb, ANeuralNetworksMemory **memory)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
从 AHardwareBuffer 句柄创建共享内存对象。
ANeuralNetworksMemory_createFromDesc(const ANeuralNetworksMemoryDesc *desc, ANeuralNetworksMemory **memory)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
从内存描述符创建内存对象。
ANeuralNetworksMemory_createFromFd(size_t size, int protect, int fd, size_t offset, ANeuralNetworksMemory **memory)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
从文件描述符创建共享内存对象。
ANeuralNetworksMemory_free(ANeuralNetworksMemory *memory)
void
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
删除内存对象。
ANeuralNetworksModel_addOperand(ANeuralNetworksModel *model, const ANeuralNetworksOperandType *type)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
向模型添加操作数。
ANeuralNetworksModel_addOperation(ANeuralNetworksModel *model, ANeuralNetworksOperationType type, uint32_t inputCount, const uint32_t *inputs, uint32_t outputCount, const uint32_t *outputs)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
向模型添加操作。
ANeuralNetworksModel_create(ANeuralNetworksModel **model)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
创建一个空的 ANeuralNetworksModel
ANeuralNetworksModel_finish(ANeuralNetworksModel *model)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
表示我们已完成对模型的修改。
ANeuralNetworksModel_free(ANeuralNetworksModel *model)
void
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
销毁模型。
ANeuralNetworksModel_getSupportedOperationsForDevices(const ANeuralNetworksModel *model, const ANeuralNetworksDevice *const *devices, uint32_t numDevices, bool *supportedOps)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取指定设备集支持的操作。
ANeuralNetworksModel_identifyInputsAndOutputs(ANeuralNetworksModel *model, uint32_t inputCount, const uint32_t *inputs, uint32_t outputCount, const uint32_t *outputs)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
指定哪些操作数将是模型的输入和输出。
ANeuralNetworksModel_relaxComputationFloat32toFloat16(ANeuralNetworksModel *model, bool allow)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
指定是否允许使用低至 IEEE 754 16 位浮点格式的范围和/或精度计算 ANEURALNETWORKS_TENSOR_FLOAT32
ANeuralNetworksModel_setOperandSymmPerChannelQuantParams(ANeuralNetworksModel *model, int32_t index, const ANeuralNetworksSymmPerChannelQuantParams *channelQuant)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
设置操作数的每通道量化参数。
ANeuralNetworksModel_setOperandValue(ANeuralNetworksModel *model, int32_t index, const void *buffer, size_t length)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
将操作数设置为常量值。
ANeuralNetworksModel_setOperandValueFromMemory(ANeuralNetworksModel *model, int32_t index, const ANeuralNetworksMemory *memory, size_t offset, size_t length)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
将内存对象中存储的值设置为操作数。
ANeuralNetworksModel_setOperandValueFromModel(ANeuralNetworksModel *model, int32_t index, const ANeuralNetworksModel *value)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
将操作数设置为引用另一个 NNAPI 模型的值。
ANeuralNetworks_getDefaultLoopTimeout()
uint64_t
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取 WHILE 循环的默认超时值。
ANeuralNetworks_getDevice(uint32_t devIndex, ANeuralNetworksDevice **device)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取指定设备的表示形式。
ANeuralNetworks_getDeviceCount(uint32_t *numDevices)
int
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取可用设备的数量。
ANeuralNetworks_getMaximumLoopTimeout()
uint64_t
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取 WHILE 循环的最大超时值。
ANeuralNetworks_getRuntimeFeatureLevel()
int64_t
已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。
获取 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_getFeatureLevelANeuralNetworks_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_FLOAT32ANEURALNETWORKS_TENSOR_QUANT8_ASYMMANEURALNETWORKS_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 位整数转换为实值,反之亦然。这两个数字是

  • scale:一个大于零的 32 位浮点值。
  • zeroPoint:一个 32 位整数,范围为 [0, 65535]。

公式为: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 位整数转换为实值,反之亦然。这两个数字是

  • scale:一个大于零的 32 位浮点值。
  • zeroPoint:一个 32 位整数,范围为 [0, 255]。

公式为:real_value = (integer_value - zeroPoint) * scale。

ANEURALNETWORKS_TENSOR_QUANT8_ASYMM_SIGNED

一个表示实数的 8 位有符号整数张量。

此张量附加了两个数字,可用于将 8 位整数转换为实值,反之亦然。这两个数字是

  • scale:一个大于零的 32 位浮点值。
  • zeroPoint:一个 32 位整数,范围为 [-128, 127]。

公式为: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 位有符号整数转换为实值,反之亦然。这些字段是

  • channelDim:一个指示通道维度的 32 位无符号整数。
  • scales:正 32 位浮点值数组。scales 数组的大小必须等于 dimensions[channelDim]。

设置此类型操作数的参数时必须使用 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 起。

输入

  • 0:一个张量。

输出

  • 0:与 input0 形状相同的输出张量。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_ADD

逐元素添加两个张量。

接受两个具有相同 OperandCode 和兼容维度的输入张量。输出是两个输入张量之和,可选择通过激活函数进行修改。

当两个维度满足以下条件之一时兼容

  1. 它们相等,或者
  2. 其中一个为 1

输出的大小是输入操作数沿每个维度的最大大小。它从尾部维度开始,向前推进。

示例

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 起

输入

  • 0:一个 n 维张量,指定输入。不能为空。
  • 1:一个 ANEURALNETWORKS_INT32 标量,指定要缩减的轴。负索引用于指定从末尾开始的轴(例如,-1 表示最后一个轴)。必须在 [-n, n) 范围内。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_ARGMIN

返回沿轴的最大元素的索引。

支持的张量 OperandCode

支持的张量维度:从 1 起

输入

  • 0:一个 n 维张量,指定输入。不能为空。
  • 1:一个 ANEURALNETWORKS_INT32 标量,指定要缩减的轴。负索引用于指定从末尾开始的轴(例如,-1 表示最后一个轴)。必须在 [-n, n) 范围内。

输出

自 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 起受支持。

显式填充和隐式填充都受支持。

输入(显式填充)

  • 0:一个 4 维张量,形状为 [批次,高度,宽度,深度],指定输入。自 NNAPI 功能级别 3 起,此张量支持零批次。
  • 1:一个 ANEURALNETWORKS_INT32 标量,指定在“宽度”维度上的左侧填充。
  • 2:一个 ANEURALNETWORKS_INT32 标量,指定在“宽度”维度上的右侧填充。
  • 3:一个 ANEURALNETWORKS_INT32 标量,指定在“高度”维度上的顶部填充。
  • 4:一个 ANEURALNETWORKS_INT32 标量,指定在“高度”维度上的底部填充。
  • 5:一个 ANEURALNETWORKS_INT32 标量,指定在“宽度”维度中遍历输入的步幅。
  • 6:一个 ANEURALNETWORKS_INT32 标量,指定在“高度”维度中遍历输入的步幅。
  • 7:一个 ANEURALNETWORKS_INT32 标量,指定滤波器宽度。
  • 8:一个 ANEURALNETWORKS_INT32 标量,指定滤波器高度。
  • 9:一个 ANEURALNETWORKS_INT32 标量,必须是 FuseCode 值之一。指定对结果调用的激活函数。
  • 10:一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。设置为 true 以指定 input0 和 output0 的 NCHW 数据布局。自 NNAPI 功能级别 3 起可用。

输入(隐式填充)

  • 0:一个 4 维张量,形状为 [批次,高度,宽度,深度],指定输入。自 NNAPI 功能级别 3 起,此张量支持零批次。
  • 1:一个 ANEURALNETWORKS_INT32 标量,指定隐式填充方案,必须是 PaddingCode 值之一。
  • 2:一个 ANEURALNETWORKS_INT32 标量,指定在“宽度”维度中遍历输入的步幅。
  • 3:一个 ANEURALNETWORKS_INT32 标量,指定在“高度”维度中遍历输入的步幅。
  • 4:一个 ANEURALNETWORKS_INT32 标量,指定滤波器宽度。
  • 5:一个 ANEURALNETWORKS_INT32 标量,指定滤波器高度。
  • 6:一个 ANEURALNETWORKS_INT32 标量,必须是 FuseCode 值之一。指定对结果调用的激活函数。
  • 7:一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。设置为 true 以指定 input0 和 output0 的 NCHW 数据布局。自 NNAPI 功能级别 3 起可用。

输出

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_AXIS_ALIGNED_BBOX_TRANSFORM

使用边界框增量转换轴对齐的边界框提案。

给定边界框提案的位置和每个类别的相应边界框增量,返回细化的边界框区域。结果边界框会裁剪到图像的边缘。

支持的张量 OperandCode

输入

  • 0:一个 2 维张量,形状为 [num_rois, 4],指定边界框提案的位置,每行格式为 [x1, y1, x2, y2]。对于 ANEURALNETWORKS_TENSOR_QUANT16_ASYMM 类型的张量,zeroPoint 必须为 0,scale 必须为 0.125。此张量支持零 num_rois。
  • 1:一个 2 维张量,形状为 [num_rois, num_classes * 4],指定每个感兴趣区域和每个类别的边界框增量。边界框增量的组织顺序为 [dx, dy, dw, dh],其中 dx 和 dy 是边界框中心位置相对于宽度和高度的相对校正因子,dw 和 dh 是宽度和高度的对数比例相对校正因子。对于类型为 ANEURALNETWORKS_TENSOR_QUANT16_ASYMM 的 input0,此张量应为 ANEURALNETWORKS_TENSOR_QUANT8_ASYMMANEURALNETWORKS_TENSOR_QUANT8_ASYMM_SIGNED。此张量支持零 num_rois。
  • 2:一个 1 维 ANEURALNETWORKS_TENSOR_INT32 张量,形状为 [num_rois],指定每个框的批次索引。具有相同批次索引的框将分组在一起。此张量支持零 num_rois。
  • 3:一个 2 维张量,形状为 [batches, 2],指定批次中每张图像的信息,每行格式为 [image_height, image_width]。

输出

  • 0:一个与 input0 具有相同 OperandCode 的张量,形状为 [num_rois, num_classes * 4],指定每个类别每个输出边界框的坐标,格式为 [x1, y1, x2, y2]。对于 ANEURALNETWORKS_TENSOR_QUANT16_ASYMM 类型,scale 必须为 0.125,zero point 必须为 0。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_BATCH_MATMUL

成批执行两个张量的乘法。

将两个输入张量的所有切片相乘,并将各个结果排列在同一批次大小的单个输出张量中。同一批次中的每对切片具有相同的 OperandCode。每个切片在乘法之前都可以选择进行伴随 (转置和共轭)。

两个输入张量和输出张量必须是二维或更高维度,并具有相同的批次大小。

支持的张量 OperandCode

支持的张量维度:至少 2 且最多 4

输入

  • 0:一个具有二维或更高维度形状 [..., r_x, c_x] 的张量。
  • 1:一个具有二维或更高维度形状 [..., r_y, c_y] 的张量。它与 input0 具有相同的 OperandCode 和批次大小。
  • 2:一个可选的 ANEURALNETWORKS_BOOL 标量 adj_x,默认为 false。设置为 true 以伴随 input0 的切片。
  • 3:一个可选的 ANEURALNETWORKS_BOOL 标量 adj_y,默认为 false。设置为 true 以伴随 input1 的切片。

输出

  • 0:一个具有二维或更高维度形状 [..., r_o, c_o] 的张量,其中 r_o = c_x 如果 adj_x 为 true 否则为 r_x,c_o = r_y 如果 adj_y 为 true 否则为 c_y。

自 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 起受支持。

输入

  • 0:一个 n 维张量,指定要重塑的张量。
  • 1:一个 ANEURALNETWORKS_TENSOR_INT32 的 1 维张量,输入张量每个空间维度的块大小。所有值必须 >= 1。
  • 2:一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。设置为 true 以指定 input0 和 output0 的 NCHW 数据布局。自 API 级别 29 起可用。

输出

自 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)。

所有输入和输出张量必须具有相同的类型。

输入

  • 0:输入。一个 3-D 张量,形状为:如果时间优先:[max_time, batch_size, input_size];如果批量优先:[batch_size, max_time, input_size]。其中“max_time”是时间步数(序列长度),“batch_size”对应于批量维度,“input_size”是输入的大小。
  • 1:正向输入到输入权重。可选。一个 2-D 张量,形状为 [fw_num_units, input_size],其中“fw_num_units”对应于正向单元格的数量。
  • 2:正向输入到遗忘门权重。一个 2-D 张量,形状为 [fw_num_units, input_size]。
  • 3:正向输入到单元格权重。一个 2-D 张量,形状为 [fw_num_units, input_size]。
  • 4:正向输入到输出权重。一个 2-D 张量,形状为 [fw_num_units, input_size]。
  • 5:正向循环到输入权重。可选。一个 2-D 张量,形状为 [fw_num_units, fw_output_size],其中“fw_output_size”对应于单元格数量(即 fw_num_units),或者如果定义了“fw_projection_weights”,则对应于“fw_projection_weights”的第二个维度。
  • 6:正向循环到遗忘门权重。一个 2-D 张量,形状为 [fw_num_units, fw_output_size]。
  • 7:正向循环到单元格权重。一个 2-D 张量,形状为 [fw_num_units, fw_output_size]。
  • 8:正向循环到输出权重。一个 2-D 张量,形状为 [fw_num_units, fw_output_size]。
  • 9:正向单元格到输入权重。可选。一个 1-D 张量,形状为 [fw_num_units]。
  • 10:正向单元格到遗忘门权重。可选。一个 1-D 张量,形状为 [fw_num_units]。
  • 11:正向单元格到输出权重。可选。一个 1-D 张量,形状为 [fw_num_units]。
  • 12:正向输入门偏置。可选。一个 1-D 张量,形状为 [fw_num_units]。
  • 13:正向遗忘门偏置。一个 1-D 张量,形状为 [fw_num_units]。
  • 14:正向单元格门偏置。一个 1-D 张量,形状为 [fw_num_units]。
  • 15:正向输出门偏置。一个 1-D 张量,形状为 [fw_num_units]。
  • 16:正向投影权重。可选。一个 2-D 张量,形状为 [fw_output_size, fw_num_units]。
  • 17:正向投影偏置。可选。一个 1-D 张量,形状为 [fw_output_size]。
  • 18:反向输入到输入权重。可选。一个 2-D 张量,形状为 [bw_num_units, input_size],其中“bw_num_units”对应于反向单元格的数量。
  • 19:反向输入到遗忘门权重。一个 2-D 张量,形状为 [bw_num_units, input_size]。
  • 20:反向输入到单元格权重。一个 2-D 张量,形状为 [bw_num_units, input_size]。
  • 21:反向输入到输出权重。一个 2-D 张量,形状为 [bw_num_units, input_size]。
  • 22:反向循环到输入权重。可选。一个 2-D 张量,形状为 [bw_num_units, bw_output_size],其中“bw_output_size”对应于单元格数量(即“bw_num_units”),或者如果定义了“bw_projection_weights”,则对应于“bw_projection_weights”的第二个维度。
  • 23:反向循环到遗忘门权重。一个 2-D 张量,形状为 [bw_num_units, bw_output_size]。
  • 24:反向循环到单元格权重。一个 2-D 张量,形状为 [bw_num_units, bw_output_size]。
  • 25:反向循环到输出权重。一个 2-D 张量,形状为 [bw_num_units, bw_output_size]。
  • 26:反向单元格到输入权重。可选。一个 1-D 张量,形状为 [bw_num_units]。
  • 27:反向单元格到遗忘门权重。可选。一个 1-D 张量,形状为 [bw_num_units]。
  • 28:反向单元格到输出权重。可选。一个 1-D 张量,形状为 [bw_num_units]。
  • 29:反向输入门偏置。可选。一个 1-D 张量,形状为 [bw_num_units]。
  • 30:反向遗忘门偏置。一个 1-D 张量,形状为 [bw_num_units]。
  • 31:反向单元格门偏置。一个 1-D 张量,形状为 [bw_num_units]。
  • 32:反向输出门偏置。一个 1-D 张量,形状为 [bw_num_units]。
  • 33:反向投影权重。可选。一个 2-D 张量,形状为 [bw_output_size, bw_num_units]。
  • 34:反向投影偏置。可选。一个 1-D 张量,形状为 [bw_output_size]。
  • 35:正向输入激活状态。一个 2-D 张量,形状为 [batch_size, bw_output_size]。
  • 36:正向输入单元格状态。一个 2-D 张量,形状为 [batch_size, bw_num_units]。
  • 37:反向输入激活状态。一个 2-D 张量,形状为 [batch_size, bw_output_size]。
  • 38:反向输入单元格状态。一个 2-D 张量,形状为 [batch_size, bw_num_units]。
  • 39:辅助输入。可选。一个 3-D 张量,形状为 [max_time, batch_size, aux_input_size],其中“batch_size”对应于批量维度,“aux_input_size”是辅助输入的大小。可选。使用模式说明请参阅上面的文档。
  • 40:正向辅助输入到输入权重。可选。使用模式说明请参阅上面的文档。一个 2-D 张量,形状为 [fw_num_units, aux_input_size]。
  • 41:正向辅助输入到遗忘门权重。可选。使用模式说明请参阅上面的文档。一个 2-D 张量,形状为 [fw_num_units, aux_input_size]。
  • 42:正向辅助输入到单元格权重。可选。使用模式说明请参阅上面的文档。一个 2-D 张量,形状为 [fw_num_units, aux_input_size]。
  • 43:正向辅助输入到输出权重。可选。使用模式说明请参阅上面的文档。一个 2-D 张量,形状为 [fw_num_units, aux_input_size]。
  • 44:反向辅助输入到输入权重。可选。使用模式说明请参阅上面的文档。一个 2-D 张量,形状为 [bw_num_units, aux_input_size]。
  • 45:反向辅助输入到遗忘门权重。可选。使用模式说明请参阅上面的文档。一个 2-D 张量,形状为 [bw_num_units, aux_input_size]。
  • 46:反向辅助输入到单元格权重。可选。使用模式说明请参阅上面的文档。一个 2-D 张量,形状为 [bw_num_units, aux_input_size]。
  • 47:反向辅助输入到输出权重。可选。使用模式说明请参阅上面的文档。一个 2-D 张量,形状为 [bw_num_units, aux_input_size]。
  • 48:激活函数。一个表示激活函数的值
    • 0:无;
    • 1:Relu;
    • 3:Relu6;
    • 4:Tanh;
    • 6:Sigmoid。
  • 49:单元格状态的裁剪阈值,使值限制在 [-cell_clip, cell_clip] 范围内。如果设置为 0.0,则禁用裁剪。如果所有输入张量的类型为 ANEURALNETWORKS_TENSOR_FLOAT32,此标量必须为 ANEURALNETWORKS_FLOAT32 类型,否则,如果所有输入张量的类型为 ANEURALNETWORKS_TENSOR_FLOAT16,此标量必须为 ANEURALNETWORKS_FLOAT16 类型。
  • 50:投影层输出的裁剪阈值,使值限制在 [-proj_clip, proj_clip] 范围内。如果设置为 0.0,则禁用裁剪。如果所有输入张量的类型为 ANEURALNETWORKS_TENSOR_FLOAT32,此标量必须为 ANEURALNETWORKS_FLOAT32 类型,否则,如果所有输入张量的类型为 ANEURALNETWORKS_TENSOR_FLOAT16,此标量必须为 ANEURALNETWORKS_FLOAT16 类型。
  • 51:merge_outputs。一个 ANEURALNETWORKS_BOOL 标量,指定是否合并正向和反向单元格的输出。
  • 52:time_major。一个 ANEURALNETWORKS_BOOL 标量,指定输入和输出张量的形状格式。
  • 53:正向输入层归一化权重。可选。一个 1-D 张量,形状为 [fw_num_units]。用于重新缩放输入门激活的归一化输入。
  • 54:正向遗忘门层归一化权重。可选。一个 1-D 张量,形状为 [fw_num_units]。用于重新缩放遗忘门激活的归一化输入。
  • 55:正向单元格层归一化权重。可选。一个 1-D 张量,形状为 [fw_num_units]。用于重新缩放单元格门激活的归一化输入。
  • 56:正向输出门层归一化权重。可选。一个 1-D 张量,形状为 [fw_num_units]。用于重新缩放输出门激活的归一化输入。
  • 57:反向输入层归一化权重。可选。一个 1-D 张量,形状为 [bw_num_units]。用于重新缩放输入门激活的归一化输入。
  • 58:反向遗忘门层归一化权重。可选。一个 1-D 张量,形状为 [bw_num_units]。用于重新缩放遗忘门激活的归一化输入。
  • 59:反向单元格层归一化权重。可选。一个 1-D 张量,形状为 [bw_num_units]。用于重新缩放单元格门激活的归一化输入。
  • 60:反向输出门层归一化权重。可选。一个 1-D 张量,形状为 [bw_num_units]。用于重新缩放输出门激活的归一化输入。

输出

  • 0:正向输出。一个 3-D 张量,形状为:如果时间优先且不合并输出:[max_time, batch_size, fw_output_size];如果时间优先且合并输出:[max_time, batch_size, fw_output_size + bw_output_size];如果批量优先且不合并输出:[batch_size, max_time, fw_output_size];如果批量优先且合并输出:[batch_size, max_time, fw_output_size + bw_output_size]。
  • 1:反向输出。如果 merge_outputs 为 true,则未使用。一个 3-D 张量,形状为:如果时间优先:[max_time, batch_size, bw_output_size];如果批量优先:[batch_size, max_time, bw_output_size]。
  • 2:正向激活状态输出。一个 2-D 张量,形状为 [batch_size, fw_output_size],包含序列中最后一个时间步的激活状态。此输出是可选的,可以省略。如果此输出存在,则输出 3-5 也必须存在。自 NNAPI 特性级别 4 起可用。
  • 3:正向单元格状态输出。一个张量,形状为 [batch_size, fw_cell_size],包含序列中最后一个时间步的单元格状态。此输出是可选的,可以省略。如果此输出存在,则输出 2、4、5 也必须存在。自 NNAPI 特性级别 4 起可用。
  • 4:反向激活状态输出。一个 2-D 张量,形状为 [batch_size, bw_output_size],包含序列中最后一个时间步的激活状态。此输出是可选的,可以省略。如果此输出存在,则输出 2、3、5 也必须存在。自 NNAPI 特性级别 4 起可用。
  • 5:反向单元格状态输出。一个张量,形状为 [batch_size, bw_cell_size],包含序列中最后一个时间步的单元格状态。此输出是可选的,可以省略。如果此输出存在,则输出 2-4 也必须存在。自 NNAPI 特性级别 4 起可用。

自 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)

其中:

  • “{fw,bw}_input_weights”是与输入相乘的权重矩阵;
  • “{fw,bw}_recurrent_weights”是与当前“状态”相乘的权重矩阵,“状态”本身是前一个时间步计算的输出;
  • “{fw,bw}_bias”是偏置向量(添加到批次中的每个输出向量);
  • “activation”是作为“fused_activation_function”参数传入的函数(如果不是“NONE”)。

该操作支持通过辅助输入进行交叉链接。常规单元将一个输入馈送到两个 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

所有输入张量必须具有相同的类型。

输入

  • 0:输入。一个 3-D 张量。形状由输入 6 (timeMajor) 定义。如果设置为 true,则输入形状为 [maxTime, batchSize, inputSize],否则输入形状为 [batchSize, maxTime, inputSize]。
  • 1:fwWeights。一个 2-D 张量,形状为 [fwNumUnits, inputSize]。
  • 2:fwRecurrentWeights。一个 2-D 张量,形状为 [fwNumUnits, fwNumUnits]。
  • 3:fwBias。一个 1-D 张量,形状为 [fwNumUnits]。
  • 4:fwHiddenState。一个 2-D 张量,形状为 [batchSize, fwNumUnits]。指定计算的第一个时间步的隐藏状态输入。
  • 5:bwWeights。一个 2-D 张量,形状为 [bwNumUnits, inputSize]。
  • 6:bwRecurrentWeights。一个 2-D 张量,形状为 [bwNumUnits, bwNumUnits]。
  • 7:bwBias。一个 1-D 张量,形状为 [bwNumUnits]。
  • 8:bwHiddenState。一个 2-D 张量,形状为 [batchSize, bwNumUnits]。指定计算的第一个时间步的隐藏状态输入。
  • 9:auxInput。一个 3-D 张量。形状由输入 6 (timeMajor) 定义。如果设置为 true,则输入形状为 [maxTime, batchSize, auxInputSize],否则输入形状为 [batchSize, maxTime, auxInputSize]。可以省略。使用模式说明请参阅上面的文档。
  • 10:fwAuxWeights。一个 2-D 张量,形状为 [fwNumUnits, auxInputSize]。可以省略。使用模式说明请参阅上面的文档。
  • 11:bwAuxWeights。一个 2-D 张量,形状为 [bwNumUnits, auxInputSize]。可以省略。使用模式说明请参阅上面的文档。
  • 12:fusedActivationFunction。一个 FuseCode 值,表示激活函数。如果指定为“NONE”,则结果为线性激活。
  • 13:timeMajor。一个 ANEURALNETWORKS_BOOL 标量,指定输入和输出张量的形状格式。
  • 14:mergeOutputs。一个 ANEURALNETWORKS_BOOL 标量,指定正向和反向单元格的输出是分开的(如果设置为 false)还是连接在一起的(如果设置为 true)。输出
  • 0:fwOutput。一个 3-D 张量。形状的前两个维度由输入 6 (timeMajor) 定义,第三个维度由输入 14 (mergeOutputs) 定义。如果 timeMajor 设置为 true,则前两个维度为 [maxTime, batchSize],否则为 [batchSize, maxTime]。如果 mergeOutputs 设置为 true,则第三个维度等于 (fwNumUnits + bwNumUnits),否则设置为 fwNumUnits。
  • 1:bwOutput。一个 3-D 张量。如果输入 14 (mergeOutputs) 设置为 true,则不生成此张量。形状由输入 6 (timeMajor) 定义。如果设置为 true,则形状为 [maxTime, batchSize, bwNumUnits],否则形状为 [batchSize, maxTime, bwNumUnits]。
  • 2:正向隐藏状态输出。一个 2-D 张量,形状为 [batchSize, fwNumUnits],包含序列中最后一个时间步的隐藏状态。此输出是可选的,可以省略。如果此输出存在,则输出 3 也必须存在。自 NNAPI 特性级别 4 起可用。
  • 3:反向隐藏状态输出。一个 2-D 张量,形状为 [batchSize, bwNumUnits],包含序列中最后一个时间步的隐藏状态。此输出是可选的,可以省略。如果此输出存在,则输出 2 也必须存在。自 NNAPI 特性级别 4 起可用。

自 NNAPI 功能级别 3 起可用。

重要提示:截至 NNAPI 特性级别 3,无法获取输出状态张量,NNAPI 也不维护内部状态。此操作不支持多单元格链式连接并传播状态张量的使用模式。

ANEURALNETWORKS_BOX_WITH_NMS_LIMIT

按得分降序贪婪选择边界框子集。

此操作对每个类别应用 NMS 算法。在每次执行循环中,选择得分最高的框并将其从待处理集合中移除。根据与先前选择的框的交并比 (IOU) 重叠以及指定的 NMS 核方法降低其余框的得分。任何得分低于阈值的框都将从待处理集合中移除。

支持三种 NMS 核:

  • 硬 NMS (Hard): score_new = score_old * (如果 IoU < 阈值则为 1,否则为 0)
  • 线性 NMS (Linear): score_new = score_old * (如果 IoU < 阈值则为 1,否则为 1 - IoU)
  • 高斯 NMS (Gaussian): score_new = score_old * exp(- IoU^2 / sigma)

轴对齐边界框由其左上角坐标 (x1,y1) 和右下角坐标 (x2,y2) 表示。有效的边界框应满足 x1 <= x2 且 y1 <= y2。

支持的张量 OperandCode

输入

  • 0:一个 2-D 张量,形状为 [num_rois, num_classes],指定每个边界框提议的得分。框在第一维度按批次分组。此张量支持 num_rois 为零。
  • 1:一个 2-D 张量,指定边界框,形状为 [num_rois, num_classes * 4],按 [x1, y1, x2, y2] 的顺序组织。框在第一维度按批次分组。框的顺序与 input0 对应。对于类型为 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 的 input0,此张量应为 ANEURALNETWORKS_TENSOR_QUANT16_ASYMM 类型,零点为 0,比例为 0.125。对于类型为 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM_SIGNED 的 input0,此张量应为 ANEURALNETWORKS_TENSOR_QUANT16_ASYMM 类型,零点为 -128,比例为 0.125。此张量支持 num_rois 为零。
  • 2:一个 1-D ANEURALNETWORKS_TENSOR_INT32 张量,形状为 [num_rois],指定每个框的批次索引。具有相同批次索引的框被分组在一起。
  • 3:一个 ANEURALNETWORKS_FLOAT32 标量,score_threshold。得分低于此阈值的框在发送到 NMS 算法之前会被过滤。
  • 4:一个 ANEURALNETWORKS_INT32 标量,指定每个图像选定的最大边界框数量。设置为负值表示输出边界框数量无限制。
  • 5:一个 ANEURALNETWORKS_INT32 标量,指定 NMS 核方法,选项包括 0:硬 (hard),1:线性 (linear),2:高斯 (gaussian)。
  • 6:一个 ANEURALNETWORKS_FLOAT32 标量,指定硬核和线性 NMS 核中的 IoU 阈值。如果选择了高斯核,则忽略此字段。
  • 7:一个 ANEURALNETWORKS_FLOAT32 标量,指定高斯 NMS 核中的 sigma。如果未选择高斯核,则忽略此字段。
  • 8:一个 ANEURALNETWORKS_FLOAT32 标量,nms_score_threshold。在软 NMS 的得分更新阶段,得分低于此阈值的框会被丢弃。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_CAST

将张量强制转换为某种类型。

此操作忽略量化张量的比例 (scale) 和零点 (zeroPoint),例如,它将类型为 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 的输入视为 uint8 值的张量。

支持的张量 OperandCode

支持的张量维度:从 1 起

输入

  • 0:一个张量。

输出

  • 0:与 input0 形状相同的张量。

自 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

输入

  • 0:一个 n-D 张量,指定要打乱的张量。
  • 1:一个 ANEURALNETWORKS_INT32 标量,指定组数。
  • 2:一个 ANEURALNETWORKS_INT32 标量,指定将执行通道打乱的维度。负索引用于指定从末尾开始的轴(例如,-1 表示最后一个轴)。必须在 [-n, n) 范围内。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_CONCATENATION

沿给定维度连接输入张量。

输入张量必须具有相同的 OperandCode 和除连接轴外的相同维度。

支持的张量 OperandCode

支持的张量维度:最多 4

输入

输出

  • 0:输出,与输入张量具有相同 OperandCode 的张量。输出形状为 [D0, D1, ..., sum(Daxis(i)), ..., Dm]。自 NNAPI 特性级别 3 起,对于 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 张量,比例和零点值可以与输入张量不同。在 NNAPI 特性级别 3 之前,它们必须与输入张量相同。

自 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 起受支持。

显式填充和隐式填充都受支持。

输入(显式填充)

输入(隐式填充)

输出

  • 0:输出 4-D 张量,形状为 [batches, out_height, out_width, depth_out]。在 NNAPI 特性级别 3 之前,对于 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 类型的输出张量,必须满足以下条件:output_scale > input_scale * filter_scale。

自 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 起受支持。

显式填充和隐式填充都受支持。

输入(显式填充)

输入(隐式填充)

  • 0:一个 4-D 张量,形状为 [batches, height, width, depth_in],指定输入。
  • 1:一个 4-D 张量,形状为 [1, filter_height, filter_width, depth_out],指定滤波器。
  • 2:一个 1-D 张量,形状为 [depth_out],指定偏置。对于类型为 ANEURALNETWORKS_TENSOR_FLOAT32ANEURALNETWORKS_TENSOR_FLOAT16 的输入张量,偏置必须是相同类型。对于类型为 ANEURALNETWORKS_TENSOR_QUANT8_ASYMMANEURALNETWORKS_TENSOR_QUANT8_ASYMM_SIGNED 的滤波器张量,偏置应为 ANEURALNETWORKS_TENSOR_INT32,零点为 0,bias_scale == input_scale * filter_scale。对于类型为 ANEURALNETWORKS_TENSOR_QUANT8_SYMM_PER_CHANNEL 的滤波器张量,偏置应为 ANEURALNETWORKS_TENSOR_INT32,零点为 0,bias_scale 为 0。每个值“i”的实际比例等于 bias_scale[i] = input_scale * filter_scale[i]。
  • 3:一个 ANEURALNETWORKS_INT32 标量,指定隐式填充方案,必须是 PaddingCode 值之一。
  • 4:一个 ANEURALNETWORKS_INT32 标量,指定在“宽度”维度中遍历输入时的步长。
  • 5:一个 ANEURALNETWORKS_INT32 标量,指定在“高度”维度中遍历输入时的步长。
  • 6:一个 ANEURALNETWORKS_INT32 标量,指定逐深度乘数。
  • 7:一个 ANEURALNETWORKS_INT32 标量,必须是 FuseCode 值之一。指定对结果调用的激活函数。
  • 8:一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。设置为 true 以指定 input0 和 output0 的 NCHW 数据布局。自 NNAPI 特性级别 3 起可用。
  • 9:一个可选的 ANEURALNETWORKS_INT32 标量,指定宽度的膨胀因子。默认为 1。如果设置为 k > 1,则宽度维度上每个滤波器元素之间将跳过 k-1 个单元格。如果设置了此输入,则输入 10(高度的膨胀因子)也必须指定。自 NNAPI 特性级别 3 起可用。
  • 10:一个可选的 ANEURALNETWORKS_INT32 标量,指定高度的膨胀因子。默认为 1。如果设置为 k > 1,则高度维度上每个滤波器元素之间将跳过 k-1 个单元格。如果设置了此输入,则输入 9(宽度的膨胀因子)也必须指定。自 NNAPI 特性级别 3 起可用。

输出

  • 0:输出 4-D 张量,形状为 [batches, out_height, out_width, depth_out]。在 NNAPI 特性级别 3 之前,对于 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 类型的输出张量,必须满足以下条件:output_scale > input_scale * filter_scale。

自 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 起受支持。

输入

  • 0:一个 4-D 张量,形状为 [batches, height, width, depth_in],指定输入。
  • 1:一个 ANEURALNETWORKS_INT32 标量,指定 block_size。block_size 必须 >= 1,并且 block_size * block_size 必须是输入深度的约数。
  • 2:一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。设置为 true 以指定 input0 和 output0 的 NCHW 数据布局。自 NNAPI 特性级别 3 起可用。

输出

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_DEQUANTIZE

对输入张量进行反量化。

公式为:

output = (input - zeroPoint) * scale.

支持的输入张量 OperandCode

支持的输出张量 OperandCode

支持的张量维度:最多 4

输入

  • 0:一个张量。自 NNAPI 特性级别 3 起,此张量可以是零尺寸。

输出

  • 0:与 input0 形状相同的张量。

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_DETECTION_POSTPROCESSING

对边界框检测应用后处理步骤。

边界框检测是通过对一组预定义的锚点应用变换,并结合边界框回归产生的边界框 delta 来生成的。最后应用硬 NMS 步骤来限制返回的框的数量。

支持的张量 OperandCode

输入

  • 0:一个 3-D 张量,形状为 [batches, num_anchors, num_classes],指定每个锚点在每个类别上的得分。每个 [batches, num_anchors, 0] 位置的类别 0 是背景,将被忽略。
  • 1:一个 3-D 张量,形状为 [batches, num_anchors, length_box_encoding],其中 length_box_encoding 中的前四个值指定边界框 delta。框 delta 按 [dy, dx, dh, dw] 的顺序编码,其中 dy 和 dx 是边界框中心位置相对于宽度和高度的线性比例校正因子,dh 和 dw 是宽度和高度的对数比例校正因子。此操作会忽略 length_box_encoding 中前四个值之后的所有条目。
  • 2:一个 2-D 张量,形状为 [num_anchors, 4],指定每个预定义锚点的形状,格式为 [ctr_y, ctr_x, h, w],其中 ctr_y 和 ctr_x 是框的中心位置,h 和 w 是高度和宽度。
  • 3:一个 ANEURALNETWORKS_FLOAT32 标量,指定边界框 delta 中 dy 的比例因子。
  • 4:一个 ANEURALNETWORKS_FLOAT32 标量,指定边界框 delta 中 dx 的比例因子。
  • 5:一个 ANEURALNETWORKS_FLOAT32 标量,指定边界框 delta 中 dh 的比例因子。
  • 6:一个 ANEURALNETWORKS_FLOAT32 标量,指定边界框 delta 中 dw 的比例因子。
  • 7:一个 ANEURALNETWORKS_BOOL 标量,设置为 true 以使用常规多类 NMS 算法(对每个类别单独执行 NMS),设置为 false 则使用更快的算法(仅使用最高类别得分执行一次 NMS)。
  • 8:一个 ANEURALNETWORKS_INT32 标量,max_num_detections,指定每个批次输出的最大框数量。丢弃得分最低的框以满足限制。
  • 9:一个 ANEURALNETWORKS_INT32 标量,仅当 input7 设置为 false 时使用,指定每次检测的最大类别数量。
  • 10:一个 ANEURALNETWORKS_INT32 标量,仅当 input7 设置为 true 时使用,指定对每个单个类别应用 NMS 算法时的最大检测数量。
  • 11:一个标量,score_threshold。得分低于此阈值的框在发送到 NMS 算法之前会被过滤。如果 input0 是 ANEURALNETWORKS_TENSOR_FLOAT16 类型,则标量必须是 ANEURALNETWORKS_FLOAT16 类型;如果 input0 是 ANEURALNETWORKS_TENSOR_FLOAT32 类型,则标量必须是 ANEURALNETWORKS_FLOAT32 类型。
  • 12:一个标量,指定硬 NMS 的 IoU 阈值。如果 input0 是 ANEURALNETWORKS_TENSOR_FLOAT16 类型,则标量必须是 ANEURALNETWORKS_FLOAT16 类型;如果 input0 是 ANEURALNETWORKS_TENSOR_FLOAT32 类型,则标量必须是 ANEURALNETWORKS_FLOAT32 类型。
  • 13:一个 ANEURALNETWORKS_BOOL 标量,设置为 true 以在输出标签映射列表中包含背景类别,设置为 false 则不包含背景。包含背景类别时,其标签为 0,输出类别从标签映射中的 1 开始;否则,输出类别从 0 开始。

输出

  • 0:一个 2-D 张量,与 input0 具有相同的 OperandCode,形状为 [batches, max_num_detections],指定每个输出检测的得分。
  • 1:一个 3-D 张量,形状为 [batches, max_num_detections, 4],指定每个输出边界框的坐标,格式为 [y1, x1, y2, x2]。
  • 2:一个 2-D ANEURALNETWORKS_TENSOR_INT32 张量,形状为 [batches, max_num_detections],指定每个输出检测的类别标签。
  • 3:一个 1-D ANEURALNETWORKS_TENSOR_INT32 张量,形状为 [batches],指定每个批次的有效输出检测数量。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_DIV

两个张量的逐元素相除。

接收两个具有相同 OperandCode 和兼容维度的输入张量。输出是将第一个输入张量除以第二个张量的结果,可选择通过激活函数进行修改。

对于 ANEURALNETWORKS_TENSOR_INT32 类型的输入,执行“整除”(Python 中的“//”)。例如,5 // 2 = 2,-5 // 2 = -3。

当两个维度满足以下条件之一时兼容

  1. 它们相等,或者
  2. 其中一个为 1

输出的大小是输入操作数沿每个维度的最大大小。它从尾部维度开始,向前推进。

示例:input1.dimension = {4, 1, 2},input2.dimension = {5, 4, 3, 1},output.dimension = {5, 4, 3, 2}

自 NNAPI 功能级别 3 起,支持泛型零大小输入张量。零维度仅与 0 或 1 兼容。如果任一对应输入维度为零,则输出维度的大小为零。

支持的张量 OperandCode

支持的张量维度:最多 4

输入

输出

  • 0:一个张量,与 input0 具有相同的 OperandCode

自 NNAPI 功能级别 2 起可用。

ANEURALNETWORKS_ELU

逐元素计算输入张量的指数线性激活。

输出使用以下公式计算:

ELU(x) = max(0, x) + min(0, alpha * (exp(x) - 1))

支持的张量 OperandCode

支持的张量维度:从 1 起。

输入

输出

  • 0:输出张量,与 input0 具有相同形状和类型。

自 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 开始

输入

  • 0:Lookups。一个 1-D ANEURALNETWORKS_TENSOR_INT32 张量。这些值是 Values 第一个维度的索引。
  • 1:Values。一个 n-D 张量,其中 n >= 2,从中提取子张量。

输出

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_EQUAL

对于输入张量 x 和 y,计算 x == y(逐元素)。

支持的张量 OperandCode

支持的张量维度:从 1 起

此操作支持广播。

输入

  • 0:一个张量。
  • 1:一个张量,与 input0 具有相同的 OperandCode 和兼容维度。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_EXP

逐元素计算 x 的指数。

支持的张量 OperandCode

支持的张量维度:从 1 起。

输入

  • 0:一个张量。

输出

  • 0:与 input0 形状相同的输出张量。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_EXPAND_DIMS

在张量的形状中插入一个大小为 1 的维度。

给定输入张量 input,此操作在 input 形状的给定维度索引处插入一个大小为 1 的维度。维度索引从零开始;如果指定负维度索引,则从末尾向后计数。

支持的张量 OperandCode

支持的张量维度:从 1 起

输入

  • 0:一个 n-D 张量。
  • 1:一个 ANEURALNETWORKS_INT32 标量,指定要展开的维度索引。必须在 [-(n + 1), (n + 1)) 范围内。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_FILL

创建一个填充标量值的张量。

支持的输出张量 OperandCode

支持的张量维度:从 1 起。

输入

输出

  • 0:输出张量。

自 NNAPI 功能级别 4 起可用。

ANEURALNETWORKS_FLOOR

逐元素计算输入张量的 floor()。

支持的张量 OperandCode

支持的张量维度:最多 4

输入

  • 0:一个张量。

输出

  • 0:输出张量,与输入张量具有相同的 OperandCode 和维度。

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_FULLY_CONNECTED

表示一个全连接(密集)层,它将输入张量中的所有元素与输出张量中的每个元素连接起来。

此层实现以下操作:

outputs = activation(inputs * weights’ + bias)

支持的张量 OperandCode

支持的张量秩:最高 4。

输入

  • 0:一个至少秩为 2 的张量,指定输入。如果秩大于 2,则将其展平为 2-D 张量。展平后的 2-D 张量(如果需要)重塑为 [batch_size, input_size],其中“input_size”对应于层输入的数量,匹配权重的第二个维度,“batch_size”通过将元素数量除以“input_size”计算。自 NNAPI 特性级别 3 起,此张量支持零 batch_size。
  • 1:一个 2-D 张量,形状为 [num_units, input_size],指定权重,其中“num_units”对应于输出节点数量。
  • 2:一个 1-D 张量,形状为 [num_units],指定偏置。对于 ANEURALNETWORKS_TENSOR_FLOAT32 类型的输入张量,偏置也应为 ANEURALNETWORKS_TENSOR_FLOAT32 类型。对于 ANEURALNETWORKS_TENSOR_QUANT8_ASYMMANEURALNETWORKS_TENSOR_QUANT8_ASYMM_SIGNED 类型的输入张量,偏置应为 ANEURALNETWORKS_TENSOR_INT32,零点为 0,bias_scale == input_scale * filter_scale。
  • 3:一个 ANEURALNETWORKS_INT32 标量,必须是 FuseCode 值之一。指定对结果调用的激活函数。

输出

  • 0:输出张量,形状为 [batch_size, num_units]。在 NNAPI 特性级别 3 之前,对于 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 类型的输出张量,必须满足以下条件:output_scale > input_scale * filter_scale。

自 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 起

输入

  • 0:一个 n-D 张量,从中收集值。
  • 1:一个 ANEURALNETWORKS_INT32 标量,指定轴。负索引用于指定从末尾开始的轴(例如,-1 表示最后一个轴)。必须在 [-n, n) 范围内。
  • 2:一个 k-D ANEURALNETWORKS_TENSOR_INT32 索引张量。值必须在 input0 相应维度的范围内。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_GENERATE_PROPOSALS

生成轴对齐的边界框提议。

通过对一组预定义锚点应用变换,并结合边界框回归得到的边界框偏移量,生成边界框提议。最后应用硬非极大值抑制 (NMS) 步骤来限制返回的边界框数量。

轴对齐边界框由其左上角坐标 (x1,y1) 和右下角坐标 (x2,y2) 表示。有效的边界框应满足 x1 <= x2 且 y1 <= y2。

支持的张量 OperandCode

输入

  • 0: 一个 4 维张量,指定每个位置上每个锚点的得分。使用 "NHWC" 数据布局时,张量形状为 [batches, height, width, num_anchors]。使用 "NCHW" 数据布局时,张量形状为 [batches, num_anchors, height, width]。
  • 1: 一个 4 维张量,指定边界框偏移量。使用 "NHWC" 数据布局时,张量形状为 [batches, height, width, num_anchors * 4]。使用 "NCHW" 数据布局时,张量形状为 [batches, num_anchors * 4, height, width]。边界框偏移量按 [dx, dy, dw, dh] 的顺序编码,其中 dx 和 dy 是边界框中心位置相对于宽度和高度的线性缩放校正因子,dw 和 dh 是宽度和高度的对数缩放校正因子。最后一个维度是通道维度。
  • 2: 一个形状为 [num_anchors, 4] 的 2 维张量,指定每个预定义锚点的形状,格式为 [x1, y1, x2, y2]。对于类型为 ANEURALNETWORKS_TENSOR_QUANT8_ASYMMANEURALNETWORKS_TENSOR_QUANT8_ASYMM_SIGNED 的 input0,此张量应为 ANEURALNETWORKS_TENSOR_QUANT16_SYMM 类型,scale 为 0.125。
  • 3: 一个形状为 [batches, 2] 的 2 维张量,指定批次中每张图片的大小,格式为 [image_height, image_width]。对于类型为 ANEURALNETWORKS_TENSOR_QUANT8_ASYMMANEURALNETWORKS_TENSOR_QUANT8_ASYMM_SIGNED 的 input0,此张量应为 ANEURALNETWORKS_TENSOR_QUANT16_SYMM 类型,scale 为 0.125。
  • 4: 一个 ANEURALNETWORKS_FLOAT32 标量,指定原始图片高度与特征图高度的比例。
  • 5: 一个 ANEURALNETWORKS_FLOAT32 标量,指定原始图片宽度与特征图宽度的比例。
  • 6: 一个 ANEURALNETWORKS_INT32 标量,指定在进入硬非极大值抑制 (NMS) 算法之前的最大边界框数量。分数最低的边界框将被丢弃以满足此限制。设置为非正值表示数量不受限制。
  • 7: 一个 ANEURALNETWORKS_INT32 标量,指定硬非极大值抑制 (NMS) 算法返回的最大边界框数量。分数最低的边界框将被丢弃以满足此限制。设置为非正值表示数量不受限制。
  • 8: 一个 ANEURALNETWORKS_FLOAT32 标量,指定硬非极大值抑制 (NMS) 的 IoU 阈值。
  • 9: 一个 ANEURALNETWORKS_FLOAT32 标量,min_size。将高度或宽度低于绝对阈值的边界框过滤掉。
  • 10: 一个 ANEURALNETWORKS_BOOL 标量,设置为 true 表示 input0 和 input1 使用 NCHW 数据布局。设置为 false 表示使用 NHWC。

输出

  • 0: 一个 OperandCode 与 input0 相同的张量,形状为 [num_output_rois],指定每个输出边界框的得分。边界框按批次分组,但不保证每个批次内的顺序。对于 ANEURALNETWORKS_TENSOR_QUANT8_ASYMMANEURALNETWORKS_TENSOR_QUANT8_ASYMM_SIGNED 类型,scale 和 zero point 必须与 input0 相同。
  • 1: 一个 OperandCode 与 input3 相同的张量,形状为 [num_output_rois, 4],指定每个类别中每个输出边界框的坐标,格式为 [x1, y1, x2, y2]。边界框的顺序与 output0 对应。对于 ANEURALNETWORKS_TENSOR_QUANT16_ASYMM 类型,scale 必须为 0.125,zero point 必须为 0。
  • 2: 一个 1 维 ANEURALNETWORKS_TENSOR_INT32 张量,形状为 [num_output_rois],指定每个边界框所属的批次索引。具有相同批次索引的边界框将被分组。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_GREATER

对于输入张量 x 和 y,逐元素计算 x > y。

支持的张量 OperandCode

支持的张量维度:从 1 起

此操作支持广播。

输入

  • 0:一个张量。
  • 1:一个张量,与 input0 具有相同的 OperandCode 和兼容维度。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_GREATER_EQUAL

对于输入张量 x 和 y,逐元素计算 x >= y。

支持的张量 OperandCode

支持的张量维度:从 1 起

此操作支持广播。

输入

  • 0:一个张量。
  • 1:一个张量,与 input0 具有相同的 OperandCode 和兼容维度。

输出

自 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 起。

输入

  • 0:一个张量,指定输入。可以是零尺寸。

输出

  • 0: 输出张量,与 input0 具有相同的形状和类型。此张量的 scale 和 zero point 可能与输入张量的参数不同。

自 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 开始

输入

  • 0: Lookups。一个形状为 [ k ] 的 1 维 ANEURALNETWORKS_TENSOR_INT32 张量。
  • 1: Keys。一个形状为 [ n ] 的 1 维 ANEURALNETWORKS_TENSOR_INT32 张量;Keys 和 Values 对表示一个映射,即 Keys 中的第 i 个元素 (Keys[i]) 是用于选择 Values 中第 i 个子张量 (Values[i]) 的键,其中 0 <= i <= n-1。Keys 张量必须按升序排序。
  • 2: Values。一个形状为 [ n, … ] 的张量;即,第一个维度必须是 n。

输出

  • 0: 输出 (Output)。一个形状为 [ k … ] 的张量。对于 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 张量,scale 和 zeroPoint 必须与 input2 相同。
  • 1: 命中 (Hits)。一个形状为 [ k ] 的布尔张量,指示查找是否命中 (True) 或未命中 (False)。存储为 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 类型,偏移量为 0,scale 为 1.0f。非零字节表示 True(命中)。零表示未命中。

自 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 和其他操作数参数。

输入

  • 0: 一个类型为 ANEURALNETWORKS_TENSOR_BOOL8、形状为 [1] 的值,用于确定执行两个引用模型中的哪一个。该操作数必须具有完全指定的维度。
  • 1: 一个 ANEURALNETWORKS_MODEL 引用,指向在条件为 true 时执行的模型。
  • 2: 一个 ANEURALNETWORKS_MODEL 引用,指向在条件为 false 时执行的模型。
  • 3 ~ (n + 2): 将传递给选定模型执行的输入。

输出

  • 0 ~ (m - 1): 由选定模型产生的输出。

自 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]。

输入

输出

  • 0: 一个张量,与 input0 具有相同的 OperandCode 和形状。

自 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 开始支持。

输入

  • 0: 一个 n 维张量,指定要归一化的张量。
  • 1: 一个可选的 ANEURALNETWORKS_INT32 标量,默认值为 -1,指定进行归一化的维度。负索引用于从末尾指定轴(例如,-1 表示最后一个轴)。必须在 [-n, n) 范围内。从 NNAPI feature level 3 开始可用。

输出

  • 0: 一个张量,与 input0 具有相同的 OperandCode 和形状。对于 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM,scale 必须为 1.f / 128,zeroPoint 必须为 128。对于 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM_SIGNED,scale 必须为 1.f / 128,zeroPoint 必须为 0。注意:在 NNAPI feature level 4 之前,如果沿一个轴的元素全为零,结果是未定义的。从 NNAPI feature level 4 开始,如果沿一个轴的元素全为零,结果是逻辑零。

自 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 起受支持。

显式填充和隐式填充都受支持。

输入(显式填充)

  • 0:一个 4 维张量,形状为 [批次,高度,宽度,深度],指定输入。自 NNAPI 功能级别 3 起,此张量支持零批次。
  • 1:一个 ANEURALNETWORKS_INT32 标量,指定在“宽度”维度上的左侧填充。
  • 2:一个 ANEURALNETWORKS_INT32 标量,指定在“宽度”维度上的右侧填充。
  • 3:一个 ANEURALNETWORKS_INT32 标量,指定在“高度”维度上的顶部填充。
  • 4:一个 ANEURALNETWORKS_INT32 标量,指定在“高度”维度上的底部填充。
  • 5:一个 ANEURALNETWORKS_INT32 标量,指定在“宽度”维度中遍历输入的步幅。
  • 6:一个 ANEURALNETWORKS_INT32 标量,指定在“高度”维度中遍历输入的步幅。
  • 7:一个 ANEURALNETWORKS_INT32 标量,指定滤波器宽度。
  • 8:一个 ANEURALNETWORKS_INT32 标量,指定滤波器高度。
  • 9:一个 ANEURALNETWORKS_INT32 标量,必须是 FuseCode 值之一。指定对结果调用的激活函数。
  • 10:一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。设置为 true 以指定 input0 和 output0 的 NCHW 数据布局。自 NNAPI 功能级别 3 起可用。

输入(隐式填充)

  • 0:一个 4 维张量,形状为 [批次,高度,宽度,深度],指定输入。自 NNAPI 功能级别 3 起,此张量支持零批次。
  • 1:一个 ANEURALNETWORKS_INT32 标量,指定隐式填充方案,必须是 PaddingCode 值之一。
  • 2:一个 ANEURALNETWORKS_INT32 标量,指定在“宽度”维度中遍历输入的步幅。
  • 3:一个 ANEURALNETWORKS_INT32 标量,指定在“高度”维度中遍历输入的步幅。
  • 4:一个 ANEURALNETWORKS_INT32 标量,指定滤波器宽度。
  • 5:一个 ANEURALNETWORKS_INT32 标量,指定滤波器高度。
  • 6:一个 ANEURALNETWORKS_INT32 标量,必须是 FuseCode 值之一。指定对结果调用的激活函数。
  • 7:一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。设置为 true 以指定 input0 和 output0 的 NCHW 数据布局。自 NNAPI 功能级别 3 起可用。

输出

  • 0: 输出的 4 维张量,形状为 [batches, out_height, out_width, depth]。

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_LESS

对于输入张量 x 和 y,逐元素计算 x < y。

支持的张量 OperandCode

支持的张量维度:从 1 起

此操作支持广播。

输入

  • 0:一个张量。
  • 1:一个张量,与 input0 具有相同的 OperandCode 和兼容维度。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_LESS_EQUAL

对于输入张量 x 和 y,逐元素计算 x <= y。

支持的张量 OperandCode

支持的张量维度:从 1 起

此操作支持广播。

输入

  • 0:一个张量。
  • 1:一个张量,与 input0 具有相同的 OperandCode 和兼容维度。

输出

自 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 开始支持。

输入

输出

  • 0:与 input0 形状相同的输出张量。

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_LOG

逐元素计算 x 的自然对数。

支持的张量 OperandCode

支持的张量维度:从 1 起。

输入

  • 0:一个张量。

输出

  • 0:与 input0 形状相同的输出张量。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_LOGICAL_AND

逐元素返回 x AND y 的真值。

支持的张量 OperandCode

支持的张量维度:从 1 起

此操作支持广播。

输入

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_LOGICAL_NOT

逐元素计算 NOT x 的真值。

支持的张量 OperandCode

支持的张量维度:从 1 起。

输入

  • 0:一个张量。

输出

  • 0:与 input0 形状相同的输出张量。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_LOGICAL_OR

逐元素返回 x OR y 的真值。

支持的张量 OperandCode

支持的张量维度:从 1 起

此操作支持广播。

输入

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_LOGISTIC

对输入张量逐元素计算 sigmoid 激活函数。

输出使用此公式计算

output = 1 / (1 + exp(-input))

支持的张量 OperandCode

支持的张量秩:最高 4。

输入

  • 0: 一个张量,指定输入。从 NNAPI feature level 3 开始,此张量可能大小为零。

输出

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_LOG_SOFTMAX

计算给定 logits 的 log softmax 激活值。

输出使用此公式计算

output = logits * beta - log(reduce_sum(exp(logits * beta), axis))

支持的张量 OperandCode

支持的张量维度:从 1 起。

输入

输出

  • 0: 输出张量,与 input0 具有相同的 OperandCode 和形状。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_LSH_PROJECTION

通过局部敏感哈希将输入投影到位向量。

支持的输入张量 OperandCode

支持的输入张量秩:从 1 开始

输入

  • 0: 哈希函数。Dim.size == 2,DataType: Float。Tensor[0].Dim[0]:哈希函数数量。Tensor[0].Dim[1]:每个哈希函数生成的投影输出位数。如果投影类型是 Sparse:Tensor[0].Dim[1] + ceil(log2(Tensor[0].Dim[0])) <= 32
  • 1: 输入。Dim.size >= 1,DataType 无限制。
  • 2: 权重。可选。Dim.size == 1,DataType: Float。如果未设置,则每个输入元素被视为具有相同的权重 1.0。Tensor[1].Dim[0] == Tensor[2].Dim[0]
  • 3: 类型:Sparse: 值 LSHProjectionType_SPARSE(=3) (自 NNAPI feature level 3 起)。计算的位向量被视为稀疏。每个输出元素是一个 int32,由哈希函数计算出的多个位组成。注意:为了避免哈希函数之间的冲突,将向每个签名添加一个偏移值 k * (1 << Tensor[0].Dim[1]),其中 k 是哈希函数的索引。值 LSHProjectionType_SPARSE_DEPRECATED(=1)。不包含偏移值的旧行为。Dense: 值 LSHProjectionType_DENSE(=2)。计算的位向量被视为密集。每个输出元素表示一个位,可以取 0 或 1。

输出

  • 0: 如果投影类型是 Sparse:Output.Dim == { Tensor[0].Dim[0] } 一个表示哈希签名的 int32 张量。如果投影类型是 Dense:Output.Dim == { Tensor[0].Dim[0] * Tensor[0].Dim[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*} 其中

  • $x_t$ 是输入,
  • $i_t$ 是输入门,
  • $f_t$ 是遗忘门,
  • $C_t$ 是细胞状态,
  • $o_t$ 是输出,
  • $h_t$ 是输出状态,
  • $\sigma$ 是逻辑 sigmoid 函数,
  • $g$ 是细胞输入和细胞输出激活函数,通常是 $tahn$,
  • $W_{xi}$ 是输入到输入权重矩阵,
  • $W_{hi}$ 是循环到输入权重矩阵,
  • $W_{ci}$ 是细胞到输入权重矩阵,
  • $b_i$ 是输入门偏置,
  • $W_{xf}$ 是输入到遗忘权重矩阵,
  • $W_{hf}$ 是循环到遗忘权重矩阵,
  • $W_{cf}$ 是细胞到遗忘权重矩阵,
  • $b_f$ 是遗忘门偏置,
  • $W_{xc}$ 是输入到细胞权重矩阵,
  • $W_{hc}$ 是循环到细胞权重矩阵,
  • $b_c$ 是细胞偏置,
  • $W_{xo}$ 是输入到输出权重矩阵,
  • $W_{ho}$ 是循环到输出权重矩阵,
  • $W_{co}$ 是细胞到输出权重矩阵,
  • $b_o$ 是输出门偏置,
  • $W_{proj}$ 是投影权重矩阵,
  • $b_{proj}$ 是投影偏置,
  • $t_{cell}$ 是用于裁剪细胞状态的阈值,并且
  • $t_{proj}$ 是用于裁剪投影输出的阈值。
  • $\odot$ 是 Hadamard 乘积,它接受两个矩阵并产生另一个矩阵,其每个元素是输入矩阵对应元素的乘积。

自 NNAPI feature level 3 起,LSTM 支持层归一化。如果使用层归一化,则内部激活函数(sigmoid 和 $g$)的输入将按照 https://arxiv.org/pdf/1607.06450.pdf 第 3.1 节的方法进行归一化、重新缩放和重新定中心。

该操作具有以下独立可选输入

  • 细胞到输入权重 ( $W_{ci}$)、细胞到遗忘权重 ( $W_{cf}$) 和细胞到输出权重 ( $W_{co}$) 要么都有值,要么都没有值(即,都设置为 null)。如果它们有值,则使用 peephole 优化。
  • 输入到输入权重 ( $W_{xi}$)、循环到输入权重 ( $W_{hi}$) 和输入门偏置 ( $b_i$) 要么都有值,要么都没有值。如果它们没有值,则使用输入门和遗忘门耦合 (CIFG),在这种情况下,输入门 ( $i_t$) 将改用以下公式计算。 \begin{eqnarray*} i_t = 1 - f_t \end{eqnarray*} 如果使用 peephole 优化且不使用 CIFG,则细胞到输入 ( $W_{ci}$) 权重必须存在。否则,细胞到输入权重必须没有值。
  • 投影权重 ( $W_{proj}$) 仅在存在循环投影层时需要,否则不应有值。
  • 如果存在循环投影层,投影偏置 ( $b_{proj}$) 可能有值(但非必需),否则不应有值。
  • (NNAPI feature level 3 或更高版本)四个层归一化权重要么都有值,要么都没有值。此外,如果使用 CIFG,则省略输入层归一化权重张量,其他层归一化权重要么都有值,要么都没有值。当所有层归一化权重都有值时,使用层归一化。

参考资料

默认的非 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

所有输入和输出张量必须具有相同的类型。

输入

  • 0: 输入 ( $x_t$)。一个形状为 [batch_size, input_size] 的 2 维张量,其中“batch_size”对应于批处理维度,“input_size”是输入的大小。
  • 1: 输入到输入权重 ( $W_{xi}$)。可选。一个形状为 [num_units, input_size] 的 2 维张量,其中“num_units”对应于细胞单元的数量。
  • 2: 输入到遗忘权重 ( $W_{xf}$)。一个形状为 [num_units, input_size] 的 2 维张量。
  • 3: 输入到细胞权重 ( $W_{xc}$)。一个形状为 [num_units, input_size] 的 2 维张量。
  • 4: 输入到输出权重 ( $W_{xo}$)。一个形状为 [num_units, input_size] 的 2 维张量。
  • 5: 循环到输入权重 ( $W_{hi}$)。可选。一个形状为 [num_units, output_size] 的 2 维张量,其中“output_size”对应于细胞单元数量(即“num_units”),或者如果定义了“projection_weights”,则为其第二个维度。
  • 6: 循环到遗忘权重 ( $W_{hf}$)。一个形状为 [num_units, output_size] 的 2 维张量。
  • 7: 循环到细胞权重 ( $W_{hc}$)。一个形状为 [num_units, output_size] 的 2 维张量。
  • 8: 循环到输出权重 ( $W_{ho}$)。一个形状为 [num_units, output_size] 的 2 维张量。
  • 9: 细胞到输入权重 ( $W_{ci}$)。可选。一个形状为 [num_units] 的 1 维张量。
  • 10: 细胞到遗忘权重 ( $W_{cf}$)。可选。一个形状为 [num_units] 的 1 维张量。
  • 11: 细胞到输出权重 ( $W_{co}$)。可选。一个形状为 [num_units] 的 1 维张量。
  • 12: 输入门偏置 ( $b_i$)。可选。一个形状为 [num_units] 的 1 维张量。
  • 13: 遗忘门偏置 ( $b_f$)。一个形状为 [num_units] 的 1 维张量。
  • 14: 细胞偏置 ( $b_c$)。一个形状为 [num_units] 的 1 维张量。
  • 15: 输出门偏置 ( $b_o$)。一个形状为 [num_units] 的 1 维张量。
  • 16: 投影权重 ( $W_{proj}$)。可选。一个形状为 [output_size, num_units] 的 2 维张量。
  • 17: 投影偏置 ( $b_{proj}$)。可选。一个形状为 [output_size] 的 1 维张量。
  • 18: 输出状态 (in) ( $h_{t-1}$)。一个形状为 [batch_size, output_size] 的 2 维张量。
  • 19: 细胞状态 (in) ( $C_{t-1}$)。一个形状为 [batch_size, num_units] 的 2 维张量。
  • 20: 激活函数 ( $g$)。指示激活函数的值
    • 0:无;
    • 1:Relu;
    • 3:Relu6;
    • 4:Tanh;
    • 6:Sigmoid。
  • 21: 用于细胞状态的裁剪阈值 ( $t_{cell}$),使得值被限制在 [-cell_clip, cell_clip] 范围内。如果设置为 0.0,则禁用裁剪。在 NNAPI feature level 3 之前,此标量必须是 ANEURALNETWORKS_FLOAT32 类型。自 NNAPI feature level 3 起,如果所有输入张量的类型都是 ANEURALNETWORKS_TENSOR_FLOAT32,则此标量必须是 ANEURALNETWORKS_FLOAT32 类型;否则,如果所有输入张量的类型都是 ANEURALNETWORKS_TENSOR_FLOAT16,则此标量必须是 ANEURALNETWORKS_FLOAT16 类型。
  • 22: 用于投影层输出的裁剪阈值 ( $t_{proj}$),使得值被限制在 [-proj_clip, proj_clip] 范围内。如果设置为 0.0,则禁用裁剪。在 NNAPI feature level 3 之前,此标量必须是 ANEURALNETWORKS_FLOAT32 类型。自 NNAPI feature level 3 起,如果所有输入张量的类型都是 ANEURALNETWORKS_TENSOR_FLOAT32,则此标量必须是 ANEURALNETWORKS_FLOAT32 类型;否则,如果所有输入张量的类型都是 ANEURALNETWORKS_TENSOR_FLOAT16,则此标量必须是 ANEURALNETWORKS_FLOAT16 类型。自 NNAPI feature level 3 起,此操作还有额外的输入
  • 23: 输入层归一化权重。一个形状为 [num_units] 的 1 维张量。用于重新缩放输入门的归一化输入以进行激活。
  • 24: 遗忘层归一化权重。一个形状为 [num_units] 的 1 维张量。用于重新缩放遗忘门的归一化输入以进行激活。
  • 25: 细胞层归一化权重。一个形状为 [num_units] 的 1 维张量。用于重新缩放细胞门的归一化输入以进行激活。
  • 26: 输出层归一化权重。一个形状为 [num_units] 的 1 维张量。用于重新缩放输出门的归一化输入以进行激活。

输出

  • 0: 暂存缓冲区。如果使用 CIFG,形状为 [batch_size, num_units * 3] 的 2 维张量;如果不使用 CIFG,形状为 [batch_size, num_units * 4]。
  • 1: 输出状态 (out) ( $h_t$)。一个形状为 [batch_size, output_size] 的 2 维张量。
  • 2: 细胞状态 (out) ( $C_t$)。一个形状为 [batch_size, num_units] 的 2 维张量。
  • 3: 输出 ( $o_t$)。一个形状为 [batch_size, output_size] 的 2 维张量。这实际上与当前的“输出状态 (out)”值相同。

自 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 起受支持。

显式填充和隐式填充都受支持。

输入(显式填充)

  • 0:一个 4 维张量,形状为 [批次,高度,宽度,深度],指定输入。自 NNAPI 功能级别 3 起,此张量支持零批次。
  • 1:一个 ANEURALNETWORKS_INT32 标量,指定在“宽度”维度上的左侧填充。
  • 2:一个 ANEURALNETWORKS_INT32 标量,指定在“宽度”维度上的右侧填充。
  • 3:一个 ANEURALNETWORKS_INT32 标量,指定在“高度”维度上的顶部填充。
  • 4:一个 ANEURALNETWORKS_INT32 标量,指定在“高度”维度上的底部填充。
  • 5:一个 ANEURALNETWORKS_INT32 标量,指定在“宽度”维度中遍历输入的步幅。
  • 6:一个 ANEURALNETWORKS_INT32 标量,指定在“高度”维度中遍历输入的步幅。
  • 7:一个 ANEURALNETWORKS_INT32 标量,指定滤波器宽度。
  • 8:一个 ANEURALNETWORKS_INT32 标量,指定滤波器高度。
  • 9:一个 ANEURALNETWORKS_INT32 标量,必须是 FuseCode 值之一。指定对结果调用的激活函数。
  • 10:一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。设置为 true 以指定 input0 和 output0 的 NCHW 数据布局。自 NNAPI 功能级别 3 起可用。

输入(隐式填充)

  • 0:一个 4 维张量,形状为 [批次,高度,宽度,深度],指定输入。自 NNAPI 功能级别 3 起,此张量支持零批次。
  • 1:一个 ANEURALNETWORKS_INT32 标量,指定隐式填充方案,必须是 PaddingCode 值之一。
  • 2:一个 ANEURALNETWORKS_INT32 标量,指定在“宽度”维度中遍历输入的步幅。
  • 3:一个 ANEURALNETWORKS_INT32 标量,指定在“高度”维度中遍历输入的步幅。
  • 4:一个 ANEURALNETWORKS_INT32 标量,指定滤波器宽度。
  • 5:一个 ANEURALNETWORKS_INT32 标量,指定滤波器高度。
  • 6:一个 ANEURALNETWORKS_INT32 标量,必须是 FuseCode 值之一。指定对结果调用的激活函数。
  • 7:一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。设置为 true 以指定 input0 和 output0 的 NCHW 数据布局。自 NNAPI 功能级别 3 起可用。

输出

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_MEAN

计算张量元素在维度上的均值。

沿给定的维度对输入张量进行归约。除非 keep_dims 为 true,否则张量的秩将为 axis 中每个条目减少 1。如果 keep_dims 为 true,则归约的维度将保留长度为 1。

支持的张量 OperandCode

支持的张量维度:最多 4

输入

  • 0: 一个张量,指定输入。
  • 1: 一个 1 维 ANEURALNETWORKS_TENSOR_INT32 张量。要归约的维度。必须在 [-rank(input_tensor), rank(input_tensor)) 范围内。注意:在引入此操作时,文档错误地指出如果维度为空,操作将跨所有维度进行归约。此行为从未实现。
  • 2: 一个 ANEURALNETWORKS_INT32 标量,keep_dims。如果为正,则保留长度为 1 的归约维度。

输出

自 NNAPI 功能级别 2 起可用。

ANEURALNETWORKS_MINIMUM

返回两个张量的逐元素最小值。

支持的张量 OperandCode

支持的张量维度:从 1 起。

输入

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_MIRROR_PAD

使用镜像值对张量进行填充。

此操作符指定两种填充模式之一:REFLECT 或 SYMMETRIC。在 REFLECT 模式下,镜像不包括填充侧的边界元素。在 SYMMETRIC 模式下,镜像包括填充侧的边界元素。

例如,如果输入是一维张量 [1, 2, 3],填充为 [0, 2](即,在第一个(也是唯一一个)维度之前不填充元素,在第一个(也是唯一一个)维度之后填充两个元素),则

  • REFLECT 模式产生输出 [1, 2, 3, 2, 1]
  • SYMMETRIC 模式产生输出 [1, 2, 3, 3, 2]

支持的张量 OperandCode

支持的张量维度:从 1 起。

输入

  • 0: 一个 n 维张量,指定要填充的张量。
  • 1: 一个 ANEURALNETWORKS_TENSOR_INT32 类型的 2 维张量,指定输入张量每个空间维度的填充。张量的形状必须为 {rank(input0), 2}。padding[i, 0] 指定在维度 i 前部填充的元素数量。padding[i, 1] 指定在维度 i 末尾后部填充的元素数量。每个填充值必须是非负的。在 REFLECT 模式下,每个填充值必须小于相应维度。在 SYMMETRIC 模式下,每个填充值必须小于或等于相应维度。
  • 2: 一个 ANEURALNETWORKS_INT32 标量,指定模式。选项有 0:REFLECT 和 1:SYMMETRIC。

输出

从 NNAPI feature level 7 开始可用。

ANEURALNETWORKS_MUL

逐元素乘以两个张量。

接受两个具有相同 OperandCode 和兼容维度的输入张量。输出是两个输入张量的乘积,可选地由激活函数修改。

当两个维度满足以下条件之一时兼容

  1. 它们相等,或者
  2. 其中一个为 1

结果输出的大小是沿输入操作数每个维度的最大大小。它从末尾维度开始,向前推进。

自 NNAPI 功能级别 3 起,支持泛型零大小输入张量。零维度仅与 0 或 1 兼容。如果任一对应输入维度为零,则输出维度的大小为零。

支持的张量 OperandCode

支持的张量维度:最多 4

输入

输出

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_NEG

按元素计算数值负值。

支持的张量 OperandCode

支持的张量维度:从 1 起。

输入

  • 0:一个张量。

输出

  • 0:与 input0 形状相同的输出张量。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_NOT_EQUAL

对于输入张量 x 和 y,按元素计算 x != y。

支持的张量 OperandCode

支持的张量维度:从 1 起

此操作支持广播。

输入

  • 0:一个张量。
  • 1:一个张量,与 input0 具有相同的 OperandCode 和兼容维度。

输出

自 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 开始

输入

输出

  • 0: 打包后的张量。

自 NNAPI 功能级别 6 起可用。

ANEURALNETWORKS_PAD

填充张量。

此操作根据指定的填充来填充张量。

支持的张量 OperandCode

支持的张量维度:最多 4

输入

  • 0: 一个 n 维张量,指定要填充的张量。
  • 1: 一个 ANEURALNETWORKS_TENSOR_INT32 类型的二维张量,表示输入张量每个空间维度的填充。该张量的形状必须是 {rank(input0), 2}。padding[i, 0] 指定维度 i 前面要填充的元素数量。padding[i, 1] 指定维度 i 末尾之后要填充的元素数量。

输出

自 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 起

输入

  • 0: 指定 base 的张量。
  • 1: 指定 exponent 的张量。

输出

  • 0: 输出张量。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_PRELU

参数化修正线性单元。

其遵循:f(x) = alpha * x 当 x < 0 时,f(x) = x 当 x >= 0 时,其中 alpha 是一个与输入 x 具有相同 OperandCode 和兼容维度的学习数组。

当两个维度满足以下条件之一时兼容

  1. 它们相等,或者
  2. 其中一个为 1

输出的大小是输入操作数沿每个维度的最大大小。它从尾部维度开始,向前推进。

Example: input.dimension = {4, 1, 2} alpha.dimension = {5, 4, 3, 1} output.dimension = {5, 4, 3, 2}

支持的张量 OperandCode

支持的张量维度:从 1 起

输入

  • 0: 一个张量,指定输入。
  • 1: 一个与 input0 具有相同 OperandCode 和兼容维度的张量,指定 alpha。

输出

自 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 起

输入

  • 0: 一个张量,可能为零尺寸。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_QUANTIZED_16BIT_LSTM

一种量化 LSTM 的版本,使用 16 位量化处理内部状态。

没有投影层,因此单元状态大小等于输出大小。

输入

  • 0: 一个 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 类型、形状为 [numBatches, inputSize] 的二维张量,指定 LSTM 单元的输入。张量使用固定的量化范围 -1, 127/128 进行量化。
  • 1: 输入到输入的权重。一个 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 类型、形状为 [outputSize, inputSize] 的二维张量,指定 LSTM 单元内全连接层的输入到输入部分的权重。所有权重的量化 zero point 和 scale 必须相同。
  • 2: 输入到遗忘的权重。一个 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 类型、形状为 [outputSize, inputSize] 的二维张量,指定 LSTM 单元内全连接层的输入到遗忘部分的权重。所有权重的量化 zero point 和 scale 必须相同。
  • 3: 输入到 cell 的权重。一个 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 类型、形状为 [outputSize, inputSize] 的二维张量,指定 LSTM 单元内全连接层的输入到 cell 部分的权重。所有权重的量化 zero point 和 scale 必须相同。
  • 4: 输入到输出的权重。一个 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 类型、形状为 [outputSize, inputSize] 的二维张量,指定 LSTM 单元内全连接层的输入到输出部分的权重。所有权重的量化 zero point 和 scale 必须相同。
  • 5: 循环到输入的权重。一个 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 类型、形状为 [outputSize, outputSize] 的二维张量,指定 LSTM 单元内全连接层的循环到输入部分的权重。所有权重的量化 zero point 和 scale 必须相同。
  • 6: 循环到遗忘的权重。一个 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 类型、形状为 [outputSize, outputSize] 的二维张量,指定 LSTM 单元内全连接层的循环到遗忘部分的权重。所有权重的量化 zero point 和 scale 必须相同。
  • 7: 循环到 cell 的权重。一个 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 类型、形状为 [outputSize, outputSize] 的二维张量,指定 LSTM 单元内全连接层的循环到 cell 部分的权重。所有权重的量化 zero point 和 scale 必须相同。
  • 8: 循环到输出的权重。一个 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 类型、形状为 [outputSize, outputSize] 的二维张量,指定 LSTM 单元内全连接层的循环到输出部分的权重。所有权重的量化 zero point 和 scale 必须相同。
  • 9: 输入门偏置。一个 ANEURALNETWORKS_TENSOR_INT32 类型、形状为 [outputSize] 的一维张量,指定 LSTM 单元内全连接层的偏置。偏置通过 scale 为输入和权重 scale 的乘积、zeroPoint 为 0 进行量化。
  • 10: 遗忘门偏置。一个 ANEURALNETWORKS_TENSOR_INT32 类型、形状为 [outputSize] 的一维张量,指定 LSTM 单元内全连接层的偏置。偏置通过 scale 为输入和权重 scale 的乘积、zeroPoint 为 0 进行量化。
  • 11: Cell 偏置。一个 ANEURALNETWORKS_TENSOR_INT32 类型、形状为 [outputSize] 的一维张量,指定 LSTM 单元内全连接层的偏置。偏置通过 scale 为输入和权重 scale 的乘积、zeroPoint 为 0 进行量化。
  • 12: 输出门偏置。一个 ANEURALNETWORKS_TENSOR_INT32 类型、形状为 [outputSize] 的一维张量,指定 LSTM 单元内全连接层的偏置。偏置通过 scale 为输入和权重 scale 的乘积、zeroPoint 为 0 进行量化。
  • 13: 一个 ANEURALNETWORKS_TENSOR_QUANT16_SYMM 类型、形状为 [numBatches, outputSize] 的二维张量,指定 LSTM 单元前一时间步的 cell 状态。它使用 -2^4, 2^4 * 32767/32768 的量化范围进行量化。
  • 14: 一个 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 类型、形状为 [numBathes, outputSize] 的二维张量,指定 LSTM 单元前一时间步的输出。张量使用固定的量化范围 -1, 127/128 进行量化。

输出

ANEURALNETWORKS_QUANTIZED_LSTM

ANEURALNETWORKS_LSTM 的量化版本。

输入和输出使用非对称量化类型,而其余部分使用对称量化类型。

输入

输出

自 NNAPI 功能级别 4 起可用。

ANEURALNETWORKS_RANDOM_MULTINOMIAL

从多项分布中抽取样本。

支持的张量 OperandCode

输入

  • 0: 一个形状为 [batches, classes] 的二维张量,指定所有类别的未归一化对数概率。
  • 1: 一个 ANEURALNETWORKS_INT32 标量,指定为每个行切片抽取的独立样本数量。
  • 2: 一个形状为 [2] 的一维 ANEURALNETWORKS_TENSOR_INT32 张量,指定用于初始化随机分布的种子。如果提供的两个种子都是 0,则都会随机生成。输出
  • 0: 一个形状为 [batches, samples] 的二维 ANEURALNETWORKS_TENSOR_INT32 张量,包含抽取的样本。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_RANK

返回张量的秩。

张量的秩是其维度的数量。也称为“阶”(order)、“度”(degree)、“维数”(ndims)。

支持的张量 OperandCode

支持的张量维度:从 1 起。

输入

  • 0: 输入张量。

输出

自 NNAPI 功能级别 4 起可用。

ANEURALNETWORKS_REDUCE_ALL

通过计算给定维度上元素的“逻辑与”来缩减张量。

如果 keep_dims 为 true,则保留被缩减的维度,其长度为 1。否则,张量的秩会因 dimensions 中的每个条目而减小 1。

支持的张量 OperandCode

支持的张量维度:最多 4

输入

  • 0:一个 n-D 张量。
  • 1: 一个 ANEURALNETWORKS_TENSOR_INT32 类型的一维张量。要缩减的维度。维度值必须在 [-n, n) 范围内。
  • 2: 一个 ANEURALNETWORKS_BOOL 标量,keep_dims。如果为 true,则保留被缩减的维度,其长度为 1。

输出

  • 0: 一个与 input0 具有相同 OperandCode 的张量。如果所有维度都被缩减且 keep_dims 为 false,则输出形状为 [1]。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_REDUCE_ANY

通过计算给定维度上元素的“逻辑或”来缩减张量。

如果 keep_dims 为 true,则保留被缩减的维度,其长度为 1。否则,张量的秩会因 dimensions 中的每个条目而减小 1。

支持的张量 OperandCode

支持的张量维度:最多 4

输入

  • 0:一个 n-D 张量。
  • 1: 一个 ANEURALNETWORKS_TENSOR_INT32 类型的一维张量。要缩减的维度。维度值必须在 [-n, n) 范围内。
  • 2: 一个 ANEURALNETWORKS_BOOL 标量,keep_dims。如果为 true,则保留被缩减的维度,其长度为 1。

输出

  • 0: 一个与 input0 具有相同 OperandCode 的张量。如果所有维度都被缩减且 keep_dims 为 false,则输出形状为 [1]。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_REDUCE_MAX

通过计算给定维度上元素的最大值来缩减张量。

如果 keep_dims 为 true,则保留被缩减的维度,其长度为 1。否则,张量的秩会因 dimensions 中的每个条目而减小 1。

支持的张量 OperandCode

支持的张量维度:最多 4

输入

  • 0:一个 n-D 张量。
  • 1: 一个 ANEURALNETWORKS_TENSOR_INT32 类型的一维张量。要缩减的维度。维度值必须在 [-n, n) 范围内。
  • 2: 一个 ANEURALNETWORKS_BOOL 标量,keep_dims。如果为 true,则保留被缩减的维度,其长度为 1。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_REDUCE_MIN

通过计算给定维度上元素的最小值来缩减张量。

如果 keep_dims 为 true,则保留被缩减的维度,其长度为 1。否则,张量的秩会因 dimensions 中的每个条目而减小 1。

支持的张量 OperandCode

支持的张量维度:最多 4

输入

  • 0:一个 n-D 张量。
  • 1: 一个 ANEURALNETWORKS_TENSOR_INT32 类型的一维张量。要缩减的维度。维度值必须在 [-n, n) 范围内。
  • 2: 一个 ANEURALNETWORKS_BOOL 标量,keep_dims。如果为 true,则保留被缩减的维度,其长度为 1。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_REDUCE_PROD

通过将给定维度上元素相乘来缩减张量。

如果 keep_dims 为 true,则保留被缩减的维度,其长度为 1。否则,张量的秩会因 dimensions 中的每个条目而减小 1。

支持的张量 OperandCode

支持的张量维度:最多 4

输入

  • 0:一个 n-D 张量。
  • 1: 一个 ANEURALNETWORKS_TENSOR_INT32 类型的一维张量。要缩减的维度。维度值必须在 [-n, n) 范围内。
  • 2: 一个 ANEURALNETWORKS_BOOL 标量,keep_dims。如果为 true,则保留被缩减的维度,其长度为 1。

输出

  • 0: 一个与 input0 具有相同 OperandCode 的张量。如果所有维度都被缩减且 keep_dims 为 false,则输出形状为 [1]。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_REDUCE_SUM

通过对给定维度上元素求和来缩减张量。

如果 keep_dims 为 true,则保留被缩减的维度,其长度为 1。否则,张量的秩会因 dimensions 中的每个条目而减小 1。

支持的张量 OperandCode

支持的张量维度:最多 4

输入

  • 0:一个 n-D 张量。
  • 1: 一个 ANEURALNETWORKS_TENSOR_INT32 类型的一维张量。要缩减的维度。维度值必须在 [-n, n) 范围内。
  • 2: 一个 ANEURALNETWORKS_BOOL 标量,keep_dims。如果为 true,则保留被缩减的维度,其长度为 1。

输出

  • 0: 一个与 input0 具有相同 OperandCode 的张量。如果所有维度都被缩减且 keep_dims 为 false,则输出形状为 [1]。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_RELU

对输入张量按元素计算修正线性激活。

输出使用此公式计算

output = max(0, input)

支持的张量 OperandCode

支持的张量秩:最高 4。

输入

  • 0: 一个张量,指定输入。从 NNAPI feature level 3 开始,此张量可能大小为零。

输出

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_RELU1

对输入张量按元素计算修正线性 1 激活。

输出使用此公式计算

output = min(1.f, max(-1.f, input))

支持的张量 OperandCode

支持的张量秩:最高 4。

输入

  • 0: 一个张量,指定输入。从 NNAPI feature level 3 开始,此张量可能大小为零。

输出

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_RELU6

对输入张量按元素计算修正线性 6 激活。

输出使用此公式计算

output = min(6, max(0, input))

支持的张量 OperandCode

支持的张量秩:最高 4。

输入

  • 0: 一个张量,指定输入。从 NNAPI feature level 3 开始,此张量可能大小为零。

输出

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_RESHAPE

重塑张量。

给定一个张量,此操作返回一个与该张量具有相同值但形状新指定的张量。

支持的张量 OperandCode

支持的张量秩:最高 4。

输入

  • 0: 一个张量,指定要重塑的张量。
  • 1: 一个 ANEURALNETWORKS_TENSOR_INT32 类型的一维张量,定义输出张量的形状。由 shape 推断的元素数量必须与输入张量中的元素数量相同。如果 shape 的一个分量是特殊值 -1,则计算该维度的尺寸以使总尺寸保持不变。特别是,形状为 [-1] 会展平为一维。shape 中最多只能有一个分量为 -1。

输出

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_RESIZE_BILINEAR

使用双线性插值将图像大小调整为给定尺寸。

如果调整大小后的图像输出宽高比与输入宽高比不同,则图像可能会失真。输出的角像素可能与输入的角像素不同。

支持的张量 OperandCode

支持的张量维度:4,采用“NHWC”或“NCHW”数据布局。默认数据布局 NHWC 的数据存储顺序为:[批次,高度,宽度,通道]。或者,数据布局可以是 NCHW,数据存储顺序为:[批次,通道,高度,宽度]。NCHW 自 NNAPI 功能级别 3 起受支持。

支持按形状调整大小和按比例调整大小两种方式。

输入 (按形状调整大小)

  • 0:一个 4 维张量,形状为 [批次,高度,宽度,深度],指定输入。自 NNAPI 功能级别 3 起,此张量支持零批次。
  • 1: 一个 ANEURALNETWORKS_INT32 标量,指定输出张量的输出宽度。
  • 2: 一个 ANEURALNETWORKS_INT32 标量,指定输出张量的输出高度。
  • 3: 一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。设置为 true 表示 input0 和 output0 使用 NCHW 数据布局。自 NNAPI 功能级别 3 起可用。
  • 4: 对齐角点。一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。如果为 True,则对齐输入和输出张量的 4 个角像素的中心,保留角像素处的值。自 NNAPI 功能级别 4 起可用。
  • 5: 半像素中心。一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。如果为 True,则假定像素中心位于 (0.5, 0.5)。这是 TF 2.0 中 image.resize 的默认行为。如果此参数为 True,则 align_corners 参数必须为 False。自 NNAPI 功能级别 4 起可用。

输入 (按比例调整大小,自 NNAPI 功能级别 3 起)

  • 0: 一个四维张量,形状为 [batches, height, width, depth],指定输入。此张量支持零批次。
  • 1: 一个标量,指定 width_scale,即宽度维度从输入张量到输出张量的缩放因子。输出宽度计算为 new_width = floor(width * width_scale)。如果 input0 为 ANEURALNETWORKS_TENSOR_FLOAT16 类型,则该标量必须为 ANEURALNETWORKS_FLOAT16 类型;否则必须为 ANEURALNETWORKS_FLOAT32 类型。
  • 2: 一个标量,指定 height_scale,即高度维度从输入张量到输出张量的缩放因子。输出高度计算为 new_height = floor(height * height_scale)。如果 input0 为 ANEURALNETWORKS_TENSOR_FLOAT16 类型,则该标量必须为 ANEURALNETWORKS_FLOAT16 类型;否则必须为 ANEURALNETWORKS_FLOAT32 类型。
  • 3: 一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。设置为 true 表示 input0 和 output0 使用 NCHW 数据布局。
  • 4: 对齐角点。一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。如果为 True,则对齐输入和输出张量的 4 个角像素的中心,保留角像素处的值。自 NNAPI 功能级别 4 起可用。
  • 5: 半像素中心。一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。如果为 True,则假定像素中心位于 (0.5, 0.5)。这是 TF 2.0 中 image.resize 的默认行为。如果此参数为 True,则 align_corners 参数必须为 False。自 NNAPI 功能级别 4 起可用。

输出

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_RESIZE_NEAREST_NEIGHBOR

使用最近邻插值将图像大小调整为给定尺寸。

如果调整大小后的图像输出宽高比与输入宽高比不同,则图像可能会失真。输出的角像素可能与输入的角像素不同。

支持的张量 OperandCode

支持的张量秩:4,数据布局为 "NHWC" 或 "NCHW"。默认数据布局为 NHWC,数据按以下顺序存储:[batch, height, width, channels]。或者,数据布局可以是 NCHW,数据存储顺序为:[batch, channels, height, width]。

支持按形状调整大小和按比例调整大小两种方式。

输入 (按形状调整大小)

  • 0: 一个四维张量,形状为 [batches, height, width, depth],指定输入。此张量支持零批次。
  • 1: 一个 ANEURALNETWORKS_INT32 标量,指定输出张量的输出宽度。
  • 2: 一个 ANEURALNETWORKS_INT32 标量,指定输出张量的输出高度。
  • 3: 一个 ANEURALNETWORKS_BOOL 标量,默认为 false。设置为 true 表示 input0 和 output0 使用 NCHW 数据布局。
  • 4: 对齐角点。一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。如果为 True,则对齐输入和输出张量的 4 个角像素的中心,保留角像素处的值。自 NNAPI 功能级别 4 起可用。
  • 5: 半像素中心。一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。如果为 True,则假定像素中心位于 (0.5, 0.5)。这是 TF 2.0 中 image.resize 的默认行为。如果此参数为 True,则 align_corners 参数必须为 False。自 NNAPI 功能级别 4 起可用。

输入 (按比例调整大小)

  • 0: 一个四维张量,形状为 [batches, height, width, depth],指定输入。此张量支持零批次。
  • 1: 一个标量,指定 width_scale,即宽度维度从输入张量到输出张量的缩放因子。输出宽度计算为 new_width = floor(width * width_scale)。如果 input0 为 ANEURALNETWORKS_TENSOR_FLOAT16 类型,则该标量必须为 ANEURALNETWORKS_FLOAT16 类型;否则必须为 ANEURALNETWORKS_FLOAT32 类型。
  • 2: 一个标量,指定 height_scale,即高度维度从输入张量到输出张量的缩放因子。输出高度计算为 new_height = floor(height * height_scale)。如果 input0 为 ANEURALNETWORKS_TENSOR_FLOAT16 类型,则该标量必须为 ANEURALNETWORKS_FLOAT16 类型;否则必须为 ANEURALNETWORKS_FLOAT32 类型。
  • 3: 一个 ANEURALNETWORKS_BOOL 标量,默认为 false。设置为 true 表示 input0 和 output0 使用 NCHW 数据布局。
  • 4: 对齐角点。一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。如果为 True,则对齐输入和输出张量的 4 个角像素的中心,保留角像素处的值。自 NNAPI 功能级别 4 起可用。
  • 5: 半像素中心。一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。如果为 True,则假定像素中心位于 (0.5, 0.5)。这是 TF 2.0 中 image.resize 的默认行为。如果此参数为 True,则 align_corners 参数必须为 False。自 NNAPI 功能级别 4 起可用。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_REVERSE

反转张量的指定维度。

支持的张量 OperandCode

支持的张量秩:最高 8。

输入

  • 0: 秩为 n 的输入张量。
  • 1: 一个 ANEURALNETWORKS_TENSOR_INT32 类型的轴张量,形状为 [1],指定要反转的输入张量维度。该维度必须在 [0, n) 范围内。

输出

从 NNAPI feature level 7 开始可用。

ANEURALNETWORKS_RNN

一个基本循环神经网络层。

此层实现操作:outputs = state = activation(inputs * input_weights + state * recurrent_weights + bias)

其中:

  • “input_weights” 是与输入相乘的权重矩阵;
  • “recurrent_weights” 是与当前“state”相乘的权重矩阵,“state”本身是前一时间步计算的输出;
  • “bias” 是一个偏置向量(添加到批次中的每个输出向量);
  • “activation”是作为“fused_activation_function”参数传入的函数(如果不是“NONE”)。

支持的张量 OperandCode

所有输入张量必须具有相同的类型。

输入

  • 0: input。一个形状为 [batch_size, input_size] 的二维张量,其中“batch_size”对应于批次维度,“input_size”是输入的大小。
  • 1: weights。一个形状为 [num_units, input_size] 的二维张量,其中“num_units”对应于单元数量。
  • 2: recurrent_weights。一个形状为 [num_units, num_units] 的二维张量,其中列对应于每个单元的权重。
  • 3: bias。一个形状为 [num_units] 的一维张量。
  • 4: 隐藏状态 (in)。一个形状为 [batch_size, num_units] 的二维张量。
  • 5: fused_activation_function。一个可选的 FuseCode 值,指示激活函数。如果指定为“NONE”,则表示线性激活。

输出

  • 0: 隐藏状态 (out)。一个形状为 [batch_size, num_units] 的二维张量。
  • 1: output。一个形状为 [batch_size, num_units] 的二维张量。这实际上与当前状态值相同。

自 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]。

输入

  • 0: 一个四维张量,指定特征图。
  • 1: 一个形状为 [num_rois, 4] 的二维张量,指定感兴趣区域的位置,每行格式为 [x1, y1, x2, y2]。对于 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 类型的 input0,此张量应为 ANEURALNETWORKS_TENSOR_QUANT16_ASYMM 类型,zeroPoint 为 0,scale 为 0.125。此张量支持零 num_rois。
  • 2:一个 1 维 ANEURALNETWORKS_TENSOR_INT32 张量,形状为 [num_rois],指定每个框的批次索引。具有相同批次索引的框将分组在一起。此张量支持零 num_rois。
  • 3: 一个 ANEURALNETWORKS_INT32 标量,指定输出张量的输出高度。
  • 4: 一个 ANEURALNETWORKS_INT32 标量,指定输出张量的输出宽度。
  • 5: 一个 ANEURALNETWORKS_FLOAT32 标量,指定原始图像高度与特征图高度之比。
  • 6: 一个 ANEURALNETWORKS_FLOAT32 标量,指定原始图像宽度与特征图宽度之比。
  • 7: 一个 ANEURALNETWORKS_INT32 标量,指定用于计算输出的高度维度采样点数量。设置为 0 表示自适应值 ceil(roi_height/out_height)。
  • 8: 一个 ANEURALNETWORKS_INT32 标量,指定用于计算输出的宽度维度采样点数量。设置为 0 表示自适应值 ceil(roi_width/out_width)。
  • 9: 一个 ANEURALNETWORKS_BOOL 标量,设置为 true 表示 input0 和 output0 使用 NCHW 数据布局。设置为 false 表示 NHWC。

输出

自 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 起。

输入

  • 0:一个张量。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_SELECT

使用布尔张量 c 和输入张量 x 和 y 按元素从两个输入张量中选择值

O[i] = C[i] ? x[i] : y[i].

支持的张量 OperandCode

支持的张量维度:从 1 起

输入

输出

  • 0: 类型和形状与 input1 和 input2 相同的张量。对于 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 张量,其 scale 和 zeroPoint 可以与输入张量的 scale 和 zeroPoint 不同。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_SIN

按元素计算 x 的 sin。

支持的张量 OperandCode

支持的张量维度:从 1 起。

输入

  • 0:一个张量。

输出

  • 0:与 input0 形状相同的输出张量。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_SLICE

从指定位置开始,从输入张量中提取指定尺寸的切片。

起始位置指定为一个一维张量,包含每个维度的偏移量。尺寸指定为一个一维张量,包含相应维度上切片的尺寸或 -1。在后一种情况下,该维度的所有剩余元素都包含在切片中。

开始偏移量和切片尺寸之和不能超过相应维度的尺寸。

支持的张量 OperandCode

支持的张量维度:从 1 起

输入

  • 0: 一个 n 维张量,用于提取切片,可能为零尺寸。
  • 1: 一个 ANEURALNETWORKS_TENSOR_INT32 类型的一维张量,指定切片在每个维度中的起始索引。
  • 2: 一个 ANEURALNETWORKS_TENSOR_INT32 类型的一维张量,指定切片在每个维度中的尺寸。

输出

自 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 起受支持。

输入

  • 0: 一个 n 维张量,指定输入。
  • 1:一个 ANEURALNETWORKS_TENSOR_INT32 的 1 维张量,输入张量每个空间维度的块大小。所有值必须 >= 1。
  • 2: 一个 ANEURALNETWORKS_TENSOR_INT32 类型的二维张量,表示输入张量每个空间维度的填充。所有值必须 >= 0。该张量的形状必须是 {M, 2},其中 M 是空间维度的数量。padding[i, 0] 指定维度 i 前面要填充的元素数量。padding[i, 1] 指定维度 i 末尾之后要填充的元素数量。
  • 3: 一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。设置为 true 表示 input0 和 output0 使用 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 起受支持。

输入

  • 0:一个 4-D 张量,形状为 [batches, height, width, depth_in],指定输入。
  • 1:一个 ANEURALNETWORKS_INT32 标量,指定 block_size。block_size 必须 >=1 且必须是输入高度和宽度的除数。
  • 2:一个可选的 ANEURALNETWORKS_BOOL 标量,默认为 false。设置为 true 以指定 input0 和 output0 的 NCHW 数据布局。自 NNAPI 特性级别 3 起可用。

输出

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_SPLIT

沿给定轴将张量分成 num_splits 个子张量。

支持的张量 OperandCode

支持的张量维度:从 1 起

输入

  • 0:要分割的 n-D 张量。
  • 1:一个 ANEURALNETWORKS_INT32 标量,指定沿哪个轴分割。
  • 2:一个 ANEURALNETWORKS_INT32 标量,指示沿给定轴的分割数量。必须能整除轴的大小。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_SQRT

计算 x 的逐元素平方根。

支持的张量 OperandCode

支持的张量维度:从 1 起。

输入

  • 0:一个张量。

输出

  • 0:与 input0 形状相同的输出张量。

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_SQUEEZE

从张量形状中移除大小为 1 的维度。

给定一个输入张量,此操作返回一个具有相同 OperandCode 的张量,并移除所有大小为 1 的维度。如果您不想移除所有大小为 1 的维度,可以通过指定轴 (input1) 来移除特定的尺寸为 1 的维度。

支持的张量 OperandCode

支持的张量维度:最多 4

输入

  • 0:一个 n-D 张量,即要挤压的张量。
  • 1:一个可选的 ANEURALNETWORKS_TENSOR_INT32 类型的 1-D 张量。要挤压的维度。如果指定了维度,则只挤压列出的维度。否则,挤压所有维度。维度索引从 0 开始。如果挤压大小不为 1 的维度,必须报告错误。

输出

自 NNAPI 功能级别 2 起可用。

ANEURALNETWORKS_STRIDED_SLICE

提取张量的带步长切片。

大致来说,此操作从给定输入张量中提取大小为 (end - begin) / stride 的切片。从由 begin 指定的位置开始,通过向索引添加 stride 继续切片,直到所有维度都不小于 end。请注意,步长可以是负数,这会导致反向切片。

支持的张量 OperandCode

支持的张量维度:最多 4

输入

  • 0:一个 n-D 张量,指定要切片的张量。
  • 1:begin,一个 ANEURALNETWORKS_TENSOR_INT32 类型的 1-D 张量。要切片的输入张量的维度的起始。长度必须是 rank(input0)。
  • 2:end,一个 ANEURALNETWORKS_TENSOR_INT32 类型的 1-D 张量。要切片的输入张量的维度的结束。长度必须是 rank(input0)。
  • 3:strides,一个 ANEURALNETWORKS_TENSOR_INT32 类型的 1-D 张量。要切片的输入张量的维度的步长。长度必须是 rank(input0)。条目必须非零。
  • 4:begin_mask,一个 ANEURALNETWORKS_INT32 标量。如果 begin_mask 的第 i 位被设置,begin[i] 将被忽略,并改为使用该维度中的最大可能范围。
  • 5:end_mask,一个 ANEURALNETWORKS_INT32 标量。如果 end_mask 的第 i 位被设置,end[i] 将被忽略,并改为使用该维度中的最大可能范围。
  • 6:shrink_axis_mask,一个 ANEURALNETWORKS_INT32 标量。如果 shrink_axis_mask 的第 i 位被设置,则第 i 个维度规范会将维度减少 1,取 begin[i] 索引处的值。在这种情况下,第 i 个规范必须定义大小为 1 的切片,例如 begin[i] = x, end[i] = x + 1。

输出

自 NNAPI 功能级别 2 起可用。

ANEURALNETWORKS_SUB

两个张量的逐元素相减。

接受两个具有相同 OperandCode 和兼容维度的输入张量。输出是将第二个输入张量从第一个张量中减去的结果,可选择通过激活函数进行修改。

当两个维度满足以下条件之一时兼容

  1. 它们相等,或者
  2. 其中一个为 1

输出的大小是输入操作数沿每个维度的最大大小。它从尾部维度开始,向前推进。

示例: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.

它使用两阶段过滤机制处理传入的输入

  • 第一阶段在“特征”维度上执行过滤,其输出被推入固定大小 memory_size 的内存中。
  • 第二阶段对第一阶段 memory_size 记忆化输出的“时间”维度执行过滤。

具体来说,对于 rank 1,此层实现以下操作

memory = push(conv1d(inputs, weights_feature, feature_dim,
                     "ANEURALNETWORKS_PADDING_VALID"));
outputs = activation(memory * weights_time + bias);

其中:

  • “weights_feature”是一个权重矩阵,用于处理输入(通过将输入与每个“特征滤波器”进行卷积),并且其输出按顺序堆叠推入固定大小的“内存”(最旧的条目将被丢弃);
  • “weights_time”是一个权重矩阵,用于处理“内存”(通过对 num_units 执行批处理矩阵乘法);
  • “bias”是一个可选的偏置向量(添加到批处理中的每个输出向量);并且
  • “activation”是作为“fused_activation_function”参数传入的函数(如果不是“NONE”)。

每个 rank 通过堆叠滤波器向权重矩阵添加一个维度。

支持的张量 OperandCode

所有输入张量必须是相同的类型。

输入

  • 0: input。一个形状为 [batch_size, input_size] 的二维张量,其中“batch_size”对应于批次维度,“input_size”是输入的大小。
  • 1:weights_feature。一个形状为 [num_units, input_size] 的 2-D 张量,其中“num_units”对应于单元数量。
  • 2:weights_time。一个形状为 [num_units, memory_size] 的 2-D 张量,其中“memory_size”对应于内存的固定大小。
  • 3:bias。一个可选的形状为 [num_units] 的 1-D 张量。
  • 4:state (in)。一个形状为 [batch_size, (memory_size - 1) * num_units * rank] 的 2-D 张量。
  • 5:rank。SVD 近似的秩。
  • 6:fused_activation_function。一个可选的 FuseCode 值,指示激活函数。如果指定为“NONE”,则结果为线性激活。

输出

  • 0:state (out)。一个与输入具有相同 OperandCode 的 2-D 张量,形状为 [batch_size, (memory_size - 1) * num_units * rank]。
  • 1:output。一个与输入具有相同 OperandCode 的 2-D 张量,形状为 [batch_size, num_units]。

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_TANH

计算输入张量的逐元素双曲正切。

输出使用此公式计算

output = tanh(input)

支持的张量 OperandCode

支持的张量秩:最高 4。

输入

  • 0: 一个张量,指定输入。从 NNAPI feature level 3 开始,此张量可能大小为零。

输出

自 NNAPI 功能级别 1 起可用。

ANEURALNETWORKS_TILE

通过平铺给定张量来构造张量。

此操作通过将 input 复制 multiples 次来创建一个新张量。输出张量的第 i 个维度包含 input.dims(i) * multiples[i] 个元素,并且 input 的值沿第 i 个维度复制了 multiples[i] 次。例如,将 [a b c d][2] 平铺会生成 [a b c d a b c d]

支持的张量 OperandCode

支持的张量维度:从 1 起

输入

  • 0:input,一个 n-D 张量,指定输入。
  • 1:multiples,一个 ANEURALNETWORKS_TENSOR_INT32 类型的 1-D 张量。multiples 的长度必须为 n。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_TOPK_V2

查找最后一个维度的 k 个最大条目的值和索引。

每个维度的结果值按降序排序。如果两个值相等,则索引较大的那个先出现。

支持的张量 OperandCode

支持的张量维度:从 1 起

输入

  • 0:input,一个 n-D 张量,指定输入。
  • 1:k,一个 ANEURALNETWORKS_INT32 标量,指定沿最后一个维度查找的顶部元素的数量。

输出

自 NNAPI 功能级别 3 起可用。

ANEURALNETWORKS_TRANSPOSE

根据 perm 张量对输入张量进行转置,重新排列维度。

返回张量的维度 i 对应于输入维度的 perm[i]。如果未给出 perm,则默认为 (n-1...0),其中 n 是输入张量的秩。因此,默认情况下,此操作对 2-D 输入张量执行常规矩阵转置。

支持的张量 OperandCode

支持的张量维度:最多 4

输入

  • 0:一个 n-D 张量,指定要转置的张量。自 NNAPI 功能级别 3 起,此张量可以是零大小的。
  • 1:一个可选的 ANEURALNETWORKS_TENSOR_INT32 类型的 1-D 张量,表示输入张量维度的置换。

输出

自 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)。

所有输入和输出张量必须具有相同的类型。

输入

  • 0:输入( $x_t$)。一个 3-D 张量,形状为:如果 time-major:[max_time, batch_size, input_size] 如果 batch-major:[batch_size, max_time, input_size] 其中“max_time”是时间步数(序列长度),“batch_size”对应于批处理维度,“input_size”是输入的大小。
  • 1: 输入到输入权重 ( $W_{xi}$)。可选。一个形状为 [num_units, input_size] 的 2 维张量,其中“num_units”对应于细胞单元的数量。
  • 2: 输入到遗忘权重 ( $W_{xf}$)。一个形状为 [num_units, input_size] 的 2 维张量。
  • 3: 输入到细胞权重 ( $W_{xc}$)。一个形状为 [num_units, input_size] 的 2 维张量。
  • 4: 输入到输出权重 ( $W_{xo}$)。一个形状为 [num_units, input_size] 的 2 维张量。
  • 5: 循环到输入权重 ( $W_{hi}$)。可选。一个形状为 [num_units, output_size] 的 2 维张量,其中“output_size”对应于细胞单元数量(即“num_units”),或者如果定义了“projection_weights”,则为其第二个维度。
  • 6: 循环到遗忘权重 ( $W_{hf}$)。一个形状为 [num_units, output_size] 的 2 维张量。
  • 7: 循环到细胞权重 ( $W_{hc}$)。一个形状为 [num_units, output_size] 的 2 维张量。
  • 8: 循环到输出权重 ( $W_{ho}$)。一个形状为 [num_units, output_size] 的 2 维张量。
  • 9: 细胞到输入权重 ( $W_{ci}$)。可选。一个形状为 [num_units] 的 1 维张量。
  • 10: 细胞到遗忘权重 ( $W_{cf}$)。可选。一个形状为 [num_units] 的 1 维张量。
  • 11: 细胞到输出权重 ( $W_{co}$)。可选。一个形状为 [num_units] 的 1 维张量。
  • 12: 输入门偏置 ( $b_i$)。可选。一个形状为 [num_units] 的 1 维张量。
  • 13: 遗忘门偏置 ( $b_f$)。一个形状为 [num_units] 的 1 维张量。
  • 14: 细胞偏置 ( $b_c$)。一个形状为 [num_units] 的 1 维张量。
  • 15: 输出门偏置 ( $b_o$)。一个形状为 [num_units] 的 1 维张量。
  • 16: 投影权重 ( $W_{proj}$)。可选。一个形状为 [output_size, num_units] 的 2 维张量。
  • 17: 投影偏置 ( $b_{proj}$)。可选。一个形状为 [output_size] 的 1 维张量。
  • 18: 输出状态 (in) ( $h_{t-1}$)。一个形状为 [batch_size, output_size] 的 2 维张量。
  • 19: 细胞状态 (in) ( $C_{t-1}$)。一个形状为 [batch_size, num_units] 的 2 维张量。
  • 20: 激活函数 ( $g$)。指示激活函数的值
    • 0:无;
    • 1:Relu;
    • 3:Relu6;
    • 4:Tanh;
    • 6:Sigmoid。
  • 21:单元状态的裁剪阈值( $t_{cell}$),使得值被限制在 [-cell_clip, cell_clip] 范围内。如果设置为 0.0,则禁用裁剪。
  • 22:来自投影层输出的裁剪阈值( $t_{proj}$),使得值被限制在 [-proj_clip, proj_clip] 范围内。如果设置为 0.0,则禁用裁剪。
  • 23:如果为 true 则 time-major,如果为 false 则 batch-major。
  • 24:输入层归一化权重。可选。一个形状为 [num_units] 的 1-D 张量。用于重新缩放输入门激活的归一化输入。
  • 25:遗忘层归一化权重。可选。一个形状为 [num_units] 的 1-D 张量。用于重新缩放遗忘门激活的归一化输入。
  • 26:单元层归一化权重。可选。一个形状为 [num_units] 的 1-D 张量。用于重新缩放单元门激活的归一化输入。
  • 27:输出层归一化权重。可选。一个形状为 [num_units] 的 1-D 张量。用于重新缩放输出门激活的归一化输入。

输出

  • 0:输出( $o_t$)。一个 3-D 张量,形状为:如果 time-major:[max_time, batch_size, output_size] 如果 batch-major:[batch_size, max_time, output_size]
  • 1:一个形状为 [batch_size, output_size] 的张量,包含序列中最后一个时间步的隐藏状态。此输出是可选的,可以省略。如果此输出存在,则输出 #2 也必须存在。自 NNAPI 功能级别 4 起可用。
  • 2:一个形状为 [batch_size, cell_size] 的张量,包含序列中最后一个时间步的单元状态。此输出是可选的,可以省略。自 NNAPI 功能级别 4 起可用。

自 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)

其中:

  • “input_weights” 是与输入相乘的权重矩阵;
  • “recurrent_weights” 是与当前“state”相乘的权重矩阵,“state”本身是前一时间步计算的输出;
  • “bias” 是一个偏置向量(添加到批次中的每个输出向量);
  • “activation”是作为“fused_activation_function”参数传入的函数(如果不是“NONE”)。

支持的张量 OperandCode

所有输入张量必须具有相同的类型。

输入

  • 0:input。一个 3-D 张量。形状由输入 6 (timeMajor) 定义。如果设置为 1,则输入形状为 [maxTime, batchSize, inputSize],否则输入形状为 [batchSize, maxTime, inputSize]。
  • 1:weights。一个形状为 [numUnits, inputSize] 的 2-D 张量。
  • 2:recurrent_weights。一个形状为 [numUnits, numUnits] 的 2-D 张量。
  • 3:bias。一个形状为 [numUnits] 的 1-D 张量。
  • 4:hidden state。一个形状为 [batchSize, numUnits] 的 2-D 张量。指定计算的第一个时间步的隐藏状态输入。
  • 5:fusedActivationFunction。一个 FuseCode 值,指示激活函数。如果指定为“NONE”,则结果为线性激活。
  • 6:timeMajor。一个 ANEURALNETWORKS_INT32 标量,指定输入和输出张量的形状格式。必须设置为 0 或 1。输出
  • 0:output。一个 3-D 张量。形状由输入 6 (timeMajor) 定义。如果设置为 1,则输出形状为 [maxTime, batchSize, numUnits],否则输出形状为 [batchSize, maxTime, numUnits]。
  • 1:一个形状为 [batchSize, numUnits] 的张量,包含序列中最后一个时间步的隐藏状态。此输出是可选的,可以省略。自 NNAPI 功能级别 4 起可用。

自 NNAPI 功能级别 3 起可用。

重要提示:截至 NNAPI 特性级别 3,无法获取输出状态张量,NNAPI 也不维护内部状态。此操作不支持多单元格链式连接并传播状态张量的使用模式。

ANEURALNETWORKS_WHILE

执行 body 模型直到 condition 模型输出 false。

此操作的输入是 condition 模型、body 模型以及循环第一次迭代的操作数的值。这些值被隐式地分为三组:输入-输出值、仅状态值和仅输入值,如下所述。

此操作的输出是输入-输出操作数的最终值。

condition 模型和 body 模型都接收 (m + k + n) 个输入。

  • 前 m 个 (m >= 1) 输入是输入-输出操作数。对于第一次迭代,它们从 WHILE 操作的相应输入进行初始化。在后续迭代中,它们的值来自 body 模型在前一次迭代中产生的相应输出。
  • 接下来的 k 个 (k >= 0) 输入是仅状态操作数。它们类似于输入-输出操作数,只是它们的值在循环终止后不再可用。
  • 最后 n 个 (n >= 0) 输入是仅输入操作数。它们的值来自 WHILE 操作的相应输入。

body 模型产生 (m + k) 个输出。

  • 前 m 个输出是输入-输出操作数。当达到终止条件时,它们成为 WHILE 操作的输出。
  • 最后 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

输入

  • 0:指向 condition 模型的 ANEURALNETWORKS_MODEL 引用。该模型必须具有 (m + k + n) 个输入,其类型、秩(如果指定)、维度(如果指定)、scales、zeroPoints 和其他操作数参数与 WHILE 操作的相应输入相同,并且只有一个 ANEURALNETWORKS_TENSOR_BOOL8 类型的输出,形状为 [1]。输出操作数必须具有完全指定的维度。
  • 1:指向 body 模型的 ANEURALNETWORKS_MODEL 引用。该模型必须具有 (m + k + n) 个输入和 (m + k) 个输出,其类型、秩(如果指定)、维度(如果指定)、scales、zeroPoints 和其他操作数参数与 WHILE 操作的相应输入和输出相同。
  • (m 个输入):输入-输出操作数的初始值。
  • (k 个输入):仅状态操作数的初始值。
  • (n 个输入):仅输入操作数的值。

输出

  • 0 ~ (m - 1):循环产生的输出。

自 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

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 对象创建。

此对象也用作驱动程序的提示,提供对快速执行序列生命周期的洞察。例如,驱动程序可能会选择在爆发对象生命周期内增加其加速器的时钟频率。

使用方法

自 NNAPI 功能级别 3 起可用。

ANeuralNetworksCompilation

android/NeuralNetworksTypes.h 中声明
struct ANeuralNetworksCompilation ANeuralNetworksCompilation

ANeuralNetworksCompilation 是一种不透明类型,可用于编译机器学习模型。

使用方法

通过调用 ANeuralNetworksCompilation_finish 完成编译。通过调用 ANeuralNetworksCompilation_free 销毁编译。

一旦对编译调用了 ANeuralNetworksCompilation_finish,就不能再修改该编译。

应用程序有责任确保在给定时间只有一个线程修改编译。但是,一旦 ANeuralNetworksCompilation_finish 返回,多个线程可以安全地使用该编译。

应用程序还有责任确保在调用 ANeuralNetworksCompilation_free 后没有其他使用该编译的地方。这包括使用该编译创建的任何执行对象或爆发对象,或者通过 ANeuralNetworksMemoryDesc_addInputRoleANeuralNetworksMemoryDesc_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 是一种不透明类型,可用于将机器学习模型应用于一组输入。

使用方法

输出缓冲区或内存区域不得与任何其他输出缓冲区或内存区域重叠,不得与输入缓冲区或内存区域重叠,也不得与内存对象中的操作数值重叠(ANeuralNetworksModel_setOperandValueFromMemory)。

通过 ANeuralNetworksExecution_create 创建后,执行处于准备状态。执行只能在准备状态下修改。通过调用 ANeuralNetworksExecution_burstComputeANeuralNetworksExecution_computeANeuralNetworksExecution_startComputeANeuralNetworksExecution_startComputeWithDependencies 调度计算将把执行对象的状态更改为计算状态。计算完成后,执行对象的状态将从计算状态更改为完成状态。当 ANeuralNetworksExecution_computeANeuralNetworksExecution_burstComputeANeuralNetworksEvent_wait 返回时,计算完成。

执行只能使用 ANeuralNetworksExecution_burstComputeANeuralNetworksExecution_computeANeuralNetworksExecution_startComputeANeuralNetworksExecution_startComputeWithDependencies 应用于模型一次。创建新的执行来进行模型的新评估。

从 NNAPI 功能级别 5 起,应用程序可以调用 ANeuralNetworksExecution_setReusable 将执行设置为可重复用于多次计算。应用程序可以从可重复使用执行的完成状态再次调度和评估计算。在计算之间不能修改执行。

应用程序有责任确保在给定时间只有一个线程修改执行。但是,多个线程可以同时安全地使用 ANeuralNetworksEvent_wait

应用程序还有责任确保在调用 ANeuralNetworksExecution_free 之前,执行要么从未被调度过,要么已完成(即 ANeuralNetworksExecution_burstComputeANeuralNetworksExecution_computeANeuralNetworksEvent_wait 已返回)。

.

应用程序还有责任确保在调用 ANeuralNetworksExecution_free 后没有其他使用该执行的地方。

应用程序有责任确保没有在同一执行上同时调度和评估并发计算,无论是在不同线程中使用 ANeuralNetworksExecution_computeANeuralNetworksExecution_burstCompute(它们是同步的),还是使用 ANeuralNetworksExecution_startComputeANeuralNetworksExecution_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_setInputFromMemoryANeuralNetworksExecution_setOutputFromMemory

调用 ANeuralNetworksModel_setOperandValueFromMemoryANeuralNetworksExecution_setInputFromMemoryANeuralNetworksExecution_setOutputFromMemory 时,共享内存对象中的每个操作数必须按照元素类型字节大小的倍数字节边界对齐,例如,ANEURALNETWORKS_TENSOR_FLOAT32 类型的张量必须按照 4 字节边界对齐。

应用程序有责任确保在调用 ANeuralNetworksMemory_free 后没有使用该内存的地方。这包括任何因调用 ANeuralNetworksModel_setOperandValueFromMemory 而引用此内存的模型,使用此类模型创建的任何编译,使用此类编译创建的任何执行对象或爆发对象,或任何因调用 ANeuralNetworksExecution_setInputFromMemoryANeuralNetworksExecution_setOutputFromMemory 而引用此内存的执行。

自 NNAPI 功能级别 1 起可用。

从 NNAPI 功能级别 4 起,应用程序可以请求从 ANeuralNetworksMemoryDesc 创建设备原生内存,以避免执行之间潜在的内存复制和转换开销。另请参阅 ANeuralNetworksMemoryDescANeuralNetworksMemory_createFromDesc

ANeuralNetworksMemoryDesc

android/NeuralNetworksTypes.h 中声明
struct ANeuralNetworksMemoryDesc ANeuralNetworksMemoryDesc

ANeuralNetworksMemoryDesc 是一种表示内存描述符的不透明类型。

内存描述符描述内存对象的属性,并由 ANeuralNetworksMemory_createFromDesc 使用。

使用方法

通过调用 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_IFANEURALNETWORKS_WHILE 操作输入操作数类型中推导出来。

在以下情况下,张量操作数类型必须完全指定

指定了秩但有部分维度未指定的张量操作数类型,通过将 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 并传入有效的 ANeuralNetworksExecutionANeuralNetworksBurst 后才会执行计算。

提供的编译必须比爆发对象存在的时间更长。

自 NNAPI 功能级别 3 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
compilation
burst
新创建的对象;如果失败则为 NULL。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR,如果编译无效则为 ANEURALNETWORKS_BAD_DATA

ANeuralNetworksBurst_free

android/NeuralNetworks.h 中声明
void ANeuralNetworksBurst_free(
  ANeuralNetworksBurst *burst
)

销毁 burst 对象。

自 NNAPI 功能级别 3 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
burst
要销毁的爆发对象。传入 NULL 是可接受的,不会执行任何操作。

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 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
model
要编译的 ANeuralNetworksModel
compilation
新创建的对象;如果失败则为 NULL。
返回值
如果成功则为 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 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
model
要编译的 ANeuralNetworksModel
devices
设备集。不得包含重复项。
numDevices
设备集中的设备数量。
compilation
新创建的对象;如果失败则为 NULL。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR,如果模型无效则为 ANEURALNETWORKS_BAD_DATA

ANeuralNetworksCompilation_finish

android/NeuralNetworks.h 中声明
int ANeuralNetworksCompilation_finish(
  ANeuralNetworksCompilation *compilation
)

表示我们已完成对编译的修改。

在调用 ANeuralNetworksBurst_createANeuralNetworksExecution_create 之前必须调用。

应用程序必须确保在同一时间没有其他线程使用该编译。

对于给定的编译,此函数只能调用一次。

如果在此编译上调用了 ANeuralNetworksCompilation_setTimeout,并且编译未能在超时时长内完成,则编译可能会被中止,在这种情况下将返回 ANEURALNETWORKS_MISSED_DEADLINE_* ResultCode

有关多线程使用信息,请参阅 ANeuralNetworksCompilation

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
compilation
要完成的编译。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksCompilation_free

android/NeuralNetworks.h 中声明
void ANeuralNetworksCompilation_free(
  ANeuralNetworksCompilation *compilation
)

销毁编译。

编译不必通过调用 ANeuralNetworksCompilation_finish 完成。

有关多线程使用信息,请参阅 ANeuralNetworksCompilation

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
compilation
要销毁的编译。传入 NULL 是可接受的,不会执行任何操作。

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 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
compilation
编译对象。必须已通过调用 ANeuralNetworksCompilation_finish 完成。
index
从编译中引用的输入参数的索引。它是传递给 ANeuralNetworksModel_identifyInputsAndOutputs 的 inputs 列表中的索引。它不是与 ANeuralNetworksModel_addOperand 关联的索引。
alignment
返回的首选对齐值,以字节为单位。它将是 2 的幂。
返回值
如果成功则为 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 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
compilation
编译对象。必须已通过调用 ANeuralNetworksCompilation_finish 完成。
index
从编译中引用的输出参数的索引。它是传递给 ANeuralNetworksModel_identifyInputsAndOutputs 的 outputs 列表中的索引。它不是与 ANeuralNetworksModel_addOperand 关联的索引。
alignment
返回的首选对齐值,以字节为单位。它将是 2 的幂。
返回值
如果成功则为 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_setInputANeuralNetworksExecution_setInputFromMemory 中传递的长度值大于或等于输入的原始大小(即元素大小乘以元素数量),并向上舍入到相同输入的首选填充值的倍数。如果提供的缓冲区或内存值不满足首选填充要求,驱动程序可能会选择分配单独的缓冲区并进行内存复制。

有关多线程使用信息,请参阅 ANeuralNetworksCompilation。有关如何将输入缓冲区或内存填充传递给驱动程序的信息,请参阅 ANeuralNetworksExecution_enableInputAndOutputPaddingANeuralNetworksExecution_setInputANeuralNetworksExecution_setInputFromMemory

自 NNAPI 功能级别 5 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
compilation
编译对象。必须已通过调用 ANeuralNetworksCompilation_finish 完成。
index
从编译中引用的输入参数的索引。它是传递给 ANeuralNetworksModel_identifyInputsAndOutputs 的 inputs 列表中的索引。它不是与 ANeuralNetworksModel_addOperand 关联的索引。
padding
返回的首选填充值,以字节为单位。它将是 2 的幂。
返回值
如果成功则为 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_setOutputANeuralNetworksExecution_setOutputFromMemory 中传递的长度值大于或等于输出的原始大小(即元素大小乘以元素数量),并向上舍入到相同输出的首选填充值的倍数。如果提供的缓冲区或内存值不满足首选填充要求,驱动程序可能会选择分配单独的缓冲区并进行内存复制。

有关多线程使用信息,请参阅 ANeuralNetworksCompilation。有关如何将输出缓冲区或内存填充传递给驱动程序的信息,请参阅 ANeuralNetworksExecution_enableInputAndOutputPaddingANeuralNetworksExecution_setOutputANeuralNetworksExecution_setOutputFromMemory

自 NNAPI 功能级别 5 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
compilation
编译对象。必须已通过调用 ANeuralNetworksCompilation_finish 完成。
index
从编译中引用的输出参数的索引。它是传递给 ANeuralNetworksModel_identifyInputsAndOutputs 的 outputs 列表中的索引。它不是与 ANeuralNetworksModel_addOperand 关联的索引。
padding
返回的首选填充值,以字节为单位。它将是 2 的幂。
返回值
如果成功则为 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 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
compilation
要修改的编译。
cacheDir
运行时存储和检索缓存数据的缓存目录。建议使用 Android 运行时提供的代码缓存目录。如果不使用代码缓存目录,用户应选择应用程序本地的目录,并负责管理缓存条目。
令牌
用户提供的用于指定模型的令牌长度必须为 ANEURALNETWORKS_BYTE_SIZE_OF_CACHE_TOKEN。用户应确保令牌在应用程序中对于特定模型是唯一的。NNAPI 运行时无法检测到令牌冲突;冲突将导致执行失败或执行成功但生成不正确的输出值。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksCompilation_setPreference

android/NeuralNetworks.h 中声明
int ANeuralNetworksCompilation_setPreference(
  ANeuralNetworksCompilation *compilation,
  int32_t preference
)

设置执行偏好。

在可能存在权衡时,向运行时提供指导。默认情况下,运行时使用 PREFER_SINGLE_FAST_ANSWER

有关多线程使用信息,请参阅 ANeuralNetworksCompilation

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
compilation
要修改的编译。
偏好设置
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksCompilation_setPriority

android/NeuralNetworks.h 中声明
int ANeuralNetworksCompilation_setPriority(
  ANeuralNetworksCompilation *compilation,
  int priority
)

设置执行优先级。

执行优先级是相对于同一应用程序(特别是同一 uid)为同一设备创建的其他执行而言的。具体来说,来自一个应用程序的执行优先级不会影响来自另一个应用程序的执行。同样,在一个设备上的执行优先级不会影响在另一个设备上的执行。

较高优先级的执行可能会比较低优先级的执行使用更多计算资源,并且可能会抢占或饿死较低优先级的执行。

有关多线程使用信息,请参阅 ANeuralNetworksCompilation

自 NNAPI 功能级别 4 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
compilation
要修改的编译。
优先级
相对于应用程序创建的其他执行而言,执行的相对优先级。必须是 ANEURALNETWORKS_PRIORITY_* 中的一个。
返回值
如果成功则为 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 已弃用。有关详细信息,请参阅此网页

详细信息
参数
compilation
要修改的编译。
持续时间
预计完成编译所需的最大时间量(以纳秒为单位)。如果超过此持续时间,编译可能会中止。如果设置为 0,则超时持续时间被视为无限。
返回值
如果成功则为 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 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
设备
指定设备的表示形式。
featureLevel
此驱动程序实现的最先进特征的 FeatureLevelCode
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksDevice_getName

android/NeuralNetworks.h 中声明
int ANeuralNetworksDevice_getName(
  const ANeuralNetworksDevice *device,
  const char **name
)

获取指定设备的名称。

自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
设备
指定设备的表示形式。
名称
返回的指定设备名称。名称将采用 UTF-8 编码,以 null 结尾。它将是一个可识别的已知设备名称,而不是一个晦涩的字符串。对于特征级别(由 ANeuralNetworksDevice_getFeatureLevel 报告)等于 ANEURALNETWORKS_FEATURE_LEVEL_3 或更高的设备,名称格式为 {VENDOR}-{DEVICE}。对于特征级别低于 ANEURALNETWORKS_FEATURE_LEVEL_2 的设备,名称格式未定义。该名称在应用程序整个生命周期内都有效。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksDevice_getType

android/NeuralNetworks.h 中声明
int ANeuralNetworksDevice_getType(
  const ANeuralNetworksDevice *device,
  int32_t *type
)

获取给定设备的类型。

设备类型可用于帮助应用程序开发者分配机器学习工作负载和其他工作负载,例如图形渲染。例如,对于一个基于实时对象检测结果渲染 AR 场景的应用程序,开发者可以选择 ACCELERATOR 类型的设备用于 ML 工作负载,并将 GPU 保留用于图形渲染。

自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
设备
指定设备的表示形式。
类型
指定设备返回的 DeviceTypeCode
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksDevice_getVersion

android/NeuralNetworks.h 中声明
int ANeuralNetworksDevice_getVersion(
  const ANeuralNetworksDevice *device,
  const char **version
)

获取指定设备的驱动实现版本。

驱动程序实现者有责任确保此版本字符串与所有先前实现版本唯一区分开来。

此版本字符串不得与仅由 ANeuralNetworksDevice_getFeatureLevel 定义的特征级别混淆。版本之间没有隐式顺序。例如,无法过滤掉早于某个特定版本的所有驱动程序。

应用程序开发者可以使用此版本字符串来避免或优先选择特定的驱动程序实现。例如,应用程序可能希望这样做是因为

  • 特定版本的驱动程序未提供所需的性能,可能是由于性能下降。
  • 特定版本的驱动程序存在 bug 或返回的结果不符合应用程序的最低精度要求。

自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
设备
指定设备的表示形式。
版本
返回的指定设备驱动程序版本字符串。字符串将采用 UTF-8 编码,以 null 结尾。对于特征级别低于或等于 28 的设备,将返回 "UNKNOWN"。版本字符串在应用程序整个生命周期内都有效。
返回值
如果成功则为 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 已弃用。有关详细信息,请参阅此网页

详细信息
参数
sync_fence_fd
sync_fence 文件描述符。
事件
新创建的对象;如果失败则为 NULL。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksEvent_free

android/NeuralNetworks.h 中声明
void ANeuralNetworksEvent_free(
  ANeuralNetworksEvent *event
)

销毁事件。

有关多线程使用的信息,请参阅 ANeuralNetworksExecution

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
事件
要销毁的事件对象。传递 NULL 是可以接受的,并且不会执行任何操作。

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_createFromSyncFenceFdANeuralNetworksExecution_startComputeWithDependencies,了解如何创建由 sync fence 支持的事件。

用户获得返回的 fd 的所有权,并且在不再需要时必须关闭返回的文件描述符。

自 NNAPI feature level 4 起可用。 已弃用。 NNAPI 已弃用。有关详细信息,请参阅此网页

详细信息
参数
事件
由 sync fence 支持的事件。
sync_fence_fd
sync_fence 文件描述符。如果发生错误,文件描述符将设置为 -1。
返回值
如果成功则为 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 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
事件
将在完成后收到信号的事件。
返回值
如果执行正常完成,则为 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 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
burst
在其上执行的 burst 对象。
执行
要调度和执行的执行。该执行必须与 burst 对象由同一 ANeuralNetworksCompilation 创建。
返回值
如果执行正常完成,则为 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 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
执行
要调度和执行的执行。
返回值
如果执行正常完成,则为 ANEURALNETWORKS_NO_ERROR。如果执行输入或输出内存无法正确映射,则为 ANEURALNETWORKS_UNMAPPABLE。

ANeuralNetworksExecution_create

android/NeuralNetworks.h 中声明
int ANeuralNetworksExecution_create(
  ANeuralNetworksCompilation *compilation,
  ANeuralNetworksExecution **execution
)

创建一个 ANeuralNetworksExecution 来应用给定的编译。

这只会创建对象。计算仅在调用 ANeuralNetworksExecution_burstComputeANeuralNetworksExecution_computeANeuralNetworksExecution_startComputeANeuralNetworksExecution_startComputeWithDependencies 后执行。

提供的编译对象的生命周期必须长于执行对象。

有关多线程使用的信息,请参阅 ANeuralNetworksExecution

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
compilation
执行
新创建的对象;如果失败则为 NULL。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR,如果编译无效则为 ANEURALNETWORKS_BAD_DATA

ANeuralNetworksExecution_enableInputAndOutputPadding

android/NeuralNetworks.h 中声明
int ANeuralNetworksExecution_enableInputAndOutputPadding(
  ANeuralNetworksExecution *execution,
  bool enable
)

指定 ANeuralNetworksExecution 是否能够接受带填充的输入和输出缓冲区及内存对象。

默认情况下,ANeuralNetworksExecution 的输入和输出缓冲区以及内存对象不允许填充。

将执行设置为接受带填充的输入和输出缓冲区以及内存对象,允许 ANeuralNetworksExecution_setInputANeuralNetworksExecution_setInputFromMemoryANeuralNetworksExecution_setOutputANeuralNetworksExecution_setOutputFromMemory 的 length 参数大于操作数的原始大小(即,元素大小乘以元素数量)。缓冲区或内存区域末尾的额外字节可由驱动程序用于以块为单位访问数据,以提高效率。

在调用 ANeuralNetworksExecution_setInputANeuralNetworksExecution_setInputFromMemoryANeuralNetworksExecution_setOutputANeuralNetworksExecution_setOutputFromMemory 之后,不得调用此方法。

有关多线程使用的信息,请参阅 ANeuralNetworksExecution

自 NNAPI 功能级别 5 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
执行
要修改的执行。
enable
如果执行能够接受带填充的输入和输出缓冲区以及内存对象,则为 'true';否则为 'false'。
返回值
成功时为 ANEURALNETWORKS_NO_ERROR。如果 execution 为 NULL,则为 ANEURALNETWORKS_UNEXPECTED_NULL。如果在执行上已经调用了 ANeuralNetworksExecution_setInputANeuralNetworksExecution_setInputFromMemoryANeuralNetworksExecution_setOutputANeuralNetworksExecution_setOutputFromMemory,则为 ANEURALNETWORKS_BAD_STATE。

ANeuralNetworksExecution_free

android/NeuralNetworks.h 中声明
void ANeuralNetworksExecution_free(
  ANeuralNetworksExecution *execution
)

销毁执行。

执行无需已通过调用 ANeuralNetworksExecution_burstComputeANeuralNetworksExecution_computeANeuralNetworksExecution_startComputeANeuralNetworksExecution_startComputeWithDependencies 调度;但如果已调度,则应用程序必须在执行完成(即 ANeuralNetworksExecution_burstComputeANeuralNetworksExecution_computeANeuralNetworksEvent_wait 已返回)之前不调用 ANeuralNetworksExecution_free

有关多线程使用的信息,请参阅 ANeuralNetworksExecution

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
执行
要销毁的执行。传递 NULL 是可以接受的,并且不会执行任何操作。

ANeuralNetworksExecution_getDuration

android/NeuralNetworks.h 中声明
int ANeuralNetworksExecution_getDuration(
  const ANeuralNetworksExecution *execution,
  int32_t durationCode,
  uint64_t *duration
)

获取在指定的 ANeuralNetworksExecution 上评估的最新计算所花费的时间(以纳秒为单位)。

此函数只能在执行处于完成状态时调用。

有关执行状态的信息,请参阅 ANeuralNetworksExecution

自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
执行
要查询的执行。
durationCode
要查询的测量值,由 DurationCode 指定。
持续时间
返回的持续时间。如果未通过 ANeuralNetworksExecution_setMeasureTiming 请求任何测量,如果设备的特征级别(由 ANeuralNetworksDevice_getFeatureLevel 报告)低于 ANEURALNETWORKS_FEATURE_LEVEL_3,或由于其他原因持续时间不可用,则返回 UINT64_MAX。特定设备不一定支持任何给定的测量。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksExecution_getOutputOperandDimensions

android/NeuralNetworks.h 中声明
int ANeuralNetworksExecution_getOutputOperandDimensions(
  ANeuralNetworksExecution *execution,
  int32_t index,
  uint32_t *dimensions
)

获取在 ANeuralNetworksExecution 上评估的最新计算中,模型的指定输出操作数的维度信息。

目标输出操作数不能是标量。

此函数只能在执行处于完成状态时调用。

有关执行状态的信息,请参阅 ANeuralNetworksExecution

自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
执行
要查询的执行。
index
我们要查询的输出参数的索引。它是传递给 ANeuralNetworksModel_identifyInputsAndOutputs 的列表中的索引。它不是与 ANeuralNetworksModel_addOperand 关联的索引。
维度
要填充的维度数组。数组的大小必须正好等于要在模型中查询的输出操作数的秩。
返回值
成功时为 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 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
执行
要查询的执行。
index
我们要查询的输出参数的索引。它是传递给 ANeuralNetworksModel_identifyInputsAndOutputs 的列表中的索引。它不是与 ANeuralNetworksModel_addOperand 关联的索引。
输出操作数的秩。
返回值
成功时为 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_getPreferredMemoryAlignmentForInputANeuralNetworksCompilation_getPreferredMemoryPaddingForInput

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
执行
要修改的执行。
index
我们要设置的输入参数的索引。它是传递给 ANeuralNetworksModel_identifyInputsAndOutputs 的列表中的索引。它不是与 ANeuralNetworksModel_addOperand 关联的索引。
类型
操作数的 ANeuralNetworksOperandType。除非省略输入,否则应使用此参数指定在将操作数添加到模型时未指定的维度。类型的所有其他属性必须与模型中指定的相同。如果类型与构建模型时指定的相同,则可以传递 NULL。ANeuralNetworksOperandType 及其指向的维度无需在对 ANeuralNetworksExecution_setInput 的调用完成后继续存在。
buffer
包含数据的缓冲区。
length
数据值的大小(以字节为单位)加上任何末尾填充。
返回值
成功时为 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_getPreferredMemoryAlignmentForInputANeuralNetworksCompilation_getPreferredMemoryPaddingForInput

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
执行
要修改的执行。
index
我们要设置的输入参数的索引。它是传递给 ANeuralNetworksModel_identifyInputsAndOutputs 的列表中的索引。它不是与 ANeuralNetworksModel_addOperand 关联的索引。
类型
操作数的 ANeuralNetworksOperandType。应使用此参数指定在将操作数添加到模型时未指定的维度。类型的所有其他属性必须与模型中指定的相同。如果类型与构建模型时指定的相同,则可以传递 NULL。ANeuralNetworksOperandType 及其指向的维度无需在对 ANeuralNetworksExecution_setInputFromMemory 的调用完成后继续存在。
memory
包含数据的内存。
offset
这指定了数据在内存中的位置。偏移量是从内存开始处的字节数。
length
数据值的大小(以字节为单位)加上任何末尾填充。
返回值
成功时为 ANEURALNETWORKS_NO_ERROR,如果名称无法识别或缓冲区对于输入来说太小,则为 ANEURALNETWORKS_BAD_DATA。

ANeuralNetworksExecution_setLoopTimeout

android/NeuralNetworks.h 中声明
int ANeuralNetworksExecution_setLoopTimeout(
  ANeuralNetworksExecution *execution,
  uint64_t duration
)

设置指定执行中 WHILE 循环的最大持续时间。

这是一个模糊的每循环超时,旨在防止无限循环。

如果 WHILE 循环条件模型未能在指定持续时间内输出 false,则执行将中止。

有关默认和最大超时值,请参阅 ANeuralNetworks_getDefaultLoopTimeoutANeuralNetworks_getMaximumLoopTimeout

此函数只能在执行处于准备状态时调用。

有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution

自 NNAPI feature level 4 起可用。 已弃用。 NNAPI 已弃用。有关详细信息,请参阅此网页

详细信息
参数
执行
要修改的执行。
持续时间
执行 WHILE 循环所需的最大时间量(以纳秒为单位)。如果指定的持续时间值超过了由 ANeuralNetworks_getMaximumLoopTimeout 生成的值,则会被该值覆盖。
返回值
成功时为 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 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
执行
要修改的执行。
measure
如果要测量持续时间,则为 'true';否则为 'false'。
返回值
如果成功则为 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_getPreferredMemoryAlignmentForOutputANeuralNetworksCompilation_getPreferredMemoryPaddingForOutput

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
执行
要修改的执行。
index
我们要设置的输出参数的索引。它是传递给 ANeuralNetworksModel_identifyInputsAndOutputs 的列表中的索引。它不是与 ANeuralNetworksModel_addOperand 关联的索引。
类型
操作数的 ANeuralNetworksOperandType。除非省略输出,否则应使用此参数指定在将操作数添加到模型时未指定的维度。类型的所有其他属性必须与模型中指定的相同。如果类型与构建模型时指定的相同,则可以传递 NULL。ANeuralNetworksOperandType 及其指向的维度无需在对 ANeuralNetworksExecution_setOutput 的调用完成后继续存在。自 NNAPI feature level 3 起,输出操作数可以具有未指定的维度或秩,以便在执行期间动态推导。但是,用户必须提供足够大的缓冲区。用户可以在执行后通过 ANeuralNetworksExecution_getOutputOperandRankANeuralNetworksExecution_getOutputOperandDimensions 检索输出维度信息。
buffer
要写入数据的缓冲区。
length
数据值的大小(以字节为单位)加上任何末尾填充。
返回值
成功时为 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_getPreferredMemoryAlignmentForOutputANeuralNetworksCompilation_getPreferredMemoryPaddingForOutput

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
执行
要修改的执行。
index
我们要设置的输出参数的索引。它是传递给 ANeuralNetworksModel_identifyInputsAndOutputs 的列表中的索引。它不是与 ANeuralNetworksModel_addOperand 关联的索引。
类型
操作数的 ANeuralNetworksOperandType。应使用此参数指定在将操作数添加到模型时未指定的维度。类型的所有其他属性必须与模型中指定的相同。如果类型与构建模型时指定的相同,则可以传递 NULL。ANeuralNetworksOperandType 及其指向的维度无需在对 ANeuralNetworksExecution_setOutputFromMemory 的调用完成后继续存在。自 NNAPI feature level 3 起,输出操作数可以具有未指定的维度或秩,以便在执行期间动态推导。但是,用户必须提供足够大的内存。用户可以在执行后通过 ANeuralNetworksExecution_getOutputOperandRankANeuralNetworksExecution_getOutputOperandDimensions 检索输出维度信息。
memory
要存储数据的内存。
offset
这指定了数据在内存中的位置。偏移量是从内存开始处的字节数。
length
数据值的大小(以字节为单位)加上任何末尾填充。
返回值
成功时为 ANEURALNETWORKS_NO_ERROR,如果名称无法识别或缓冲区对于输出来说太小,则为 ANEURALNETWORKS_BAD_DATA。

ANeuralNetworksExecution_setReusable

android/NeuralNetworks.h 中声明
int ANeuralNetworksExecution_setReusable(
  ANeuralNetworksExecution *execution,
  bool reusable
)

指定 ANeuralNetworksExecution 是否可重复用于多次计算。

默认情况下,ANeuralNetworksExecution 不可重用。

将执行设置为可重用,可以通过 ANeuralNetworksExecution_burstComputeANeuralNetworksExecution_computeANeuralNetworksExecution_startComputeANeuralNetworksExecution_startComputeWithDependencies 顺序调度和评估同一执行的多个计算:应用程序可以在可重用执行的完成状态下再次调度和评估计算。

此函数只能在执行处于准备状态时调用。

有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution

自 NNAPI 功能级别 5 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
执行
要修改的执行。
reusable
如果要将执行设置为可重用,则为 'true';否则为 'false'。
返回值
成功时为 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_setTimeout),执行的超时持续时间被视为无限。

ANeuralNetworksExecution 必须从一个 ANeuralNetworksCompilation 创建,该 ANeuralNetworksCompilation 又是由 numDevices = 1 的 ANeuralNetworksCompilation_createForDevices 创建的,否则此函数将以 ANEURALNETWORKS_BAD_DATA 失败。如果设备的特征级别(由 ANeuralNetworksDevice_getFeatureLevel 报告)低于 ANEURALNETWORKS_FEATURE_LEVEL_4,则超时持续时间提示将被忽略。

此函数只能在执行处于准备状态时调用。

有关执行状态和多线程使用的信息,请参阅 ANeuralNetworksExecution

自 NNAPI feature level 4 起可用。 已弃用。 NNAPI 已弃用。有关详细信息,请参阅此网页

详细信息
参数
执行
要修改的执行。
持续时间
预计执行模型所需的最大时间量(以纳秒为单位)。如果超过此持续时间,执行可能会中止。如果设置为 0,则超时持续时间被视为无限。
返回值
如果成功则为 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 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
执行
要调度和执行的执行。
事件
将在完成后收到信号的事件。如果出现错误,event 会设置为 NULL。
返回值
如果评估成功调度,则为 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_setTimeoutANeuralNetworksExecution_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 已弃用。有关详细信息,请参阅此网页

详细信息
参数
执行
要调度和执行的执行。
dependencies
一组依赖事件。实际评估将等到所有事件都收到信号后才会开始。
num_dependencies
dependencies 集合中的事件数量。
持续时间
所有依赖项收到信号后,预计执行模型所需的最大时间量(以纳秒为单位)。如果设置为 0,则超时持续时间被视为无限。
事件
将在完成后收到信号的事件。如果出现错误,event 会设置为 NULL。
返回值
如果评估成功调度,则为 ANEURALNETWORKS_NO_ERROR。

ANeuralNetworksMemoryDesc_addInputRole

android/NeuralNetworks.h 中声明
int ANeuralNetworksMemoryDesc_addInputRole(
  ANeuralNetworksMemoryDesc *desc,
  const ANeuralNetworksCompilation *compilation,
  uint32_t index,
  float frequency
)

指定内存对象将在从特定编译创建的执行中扮演输入角色。

编译和输入索引完整指定一个输入操作数。可以对同一个内存描述符多次调用此函数,指定不同的输入操作数,并且可以在多个内存描述符上指定同一个输入操作数。但是,在同一个内存描述符上多次指定同一个输入操作数将返回错误。

ANeuralNetworksMemoryDesc_addInputRoleANeuralNetworksMemoryDesc_addOutputRole 指定的所有角色的相应模型操作数的维度必须相互兼容。如果两个秩都被完全指定但值不同,或者至少有一个轴在两者中都被完全指定但值不同,则两个维度不兼容。

在调用 ANeuralNetworksMemoryDesc_finish 之前,必须至少调用一次 ANeuralNetworksMemoryDesc_addInputRoleANeuralNetworksMemoryDesc_addOutputRole 中的一个或多个函数来处理内存描述符。

在调用 ANeuralNetworksMemoryDesc_finish 后尝试修改内存描述符将返回错误。

有关多线程使用的信息,请参阅 ANeuralNetworksMemoryDesc

自 NNAPI 功能级别 4 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
desc
要修改的内存描述符。
compilation
编译对象。必须已通过调用 ANeuralNetworksCompilation_finish 完成,并且其生命周期必须长于内存描述符。
index
从编译中引用的输入参数的索引。它是传递给 ANeuralNetworksModel_identifyInputsAndOutputs 的 inputs 列表中的索引。它不是与 ANeuralNetworksModel_addOperand 关联的索引。
frequency
范围 (0.0, 1.0] 内的浮点值。描述内存在指定角色中使用的可能性。这作为提示提供,用于优化不同角色偏好不同内存位置或数据布局的情况。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksMemoryDesc_addOutputRole

android/NeuralNetworks.h 中声明
int ANeuralNetworksMemoryDesc_addOutputRole(
  ANeuralNetworksMemoryDesc *desc,
  const ANeuralNetworksCompilation *compilation,
  uint32_t index,
  float frequency
)

指定内存对象将在从特定编译创建的执行中扮演输出角色。

编译和输出索引完整指定一个输出操作数。可以对同一个内存描述符多次调用此函数,指定不同的输出操作数,并且可以在多个内存描述符对象上指定同一个输出操作数。但是,在同一个内存描述符对象上多次指定同一个输出操作数将返回错误。

ANeuralNetworksMemoryDesc_addInputRoleANeuralNetworksMemoryDesc_addOutputRole 指定的所有角色的相应模型操作数的维度必须相互兼容。如果两个秩都被完全指定但值不同,或者至少有一个轴在两者中都被完全指定但值不同,则两个维度不兼容。

在调用 ANeuralNetworksMemoryDesc_finish 之前,必须至少调用一次 ANeuralNetworksMemoryDesc_addInputRoleANeuralNetworksMemoryDesc_addOutputRole 中的一个或多个函数来处理内存描述符。

在调用 ANeuralNetworksMemoryDesc_finish 后尝试修改内存描述符将返回错误。

有关多线程使用的信息,请参阅 ANeuralNetworksMemoryDesc

自 NNAPI 功能级别 4 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
desc
要修改的内存描述符。
compilation
编译对象。必须已通过调用 ANeuralNetworksCompilation_finish 完成,并且其生命周期必须长于内存描述符。
index
从编译中引用的输出参数的索引。它是传递给 ANeuralNetworksModel_identifyInputsAndOutputs 的 outputs 列表中的索引。它不是与 ANeuralNetworksModel_addOperand 关联的索引。
frequency
范围 (0.0, 1.0] 内的浮点值。描述内存在指定角色中使用的可能性。这作为提示提供,用于优化多个角色偏好不同内存位置或数据布局的情况。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksMemoryDesc_create

android/NeuralNetworks.h 中声明
int ANeuralNetworksMemoryDesc_create(
  ANeuralNetworksMemoryDesc **desc
)

创建一个不带任何属性的 ANeuralNetworksMemoryDesc

这只会创建内存描述符。应通过调用 ANeuralNetworksMemoryDesc_addInputRoleANeuralNetworksMemoryDesc_addOutputRoleANeuralNetworksMemoryDesc_setDimensions 设置其属性。

设置所有属性后,必须调用一次 ANeuralNetworksMemoryDesc_finish

不再需要内存描述符时,必须调用 ANeuralNetworksMemoryDesc_free

自 NNAPI 功能级别 4 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
desc
要创建的 ANeuralNetworksMemoryDesc。如果不成功,则设置为 NULL。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksMemoryDesc_finish

android/NeuralNetworks.h 中声明
int ANeuralNetworksMemoryDesc_finish(
  ANeuralNetworksMemoryDesc *desc
)

表示我们已完成对内存描述符的修改。

在调用 ANeuralNetworksMemory_createFromDesc 之前是必需的。

对于给定的内存描述符,此函数只能调用一次。

有关多线程使用的信息,请参阅 ANeuralNetworksMemoryDesc

自 NNAPI 功能级别 4 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
desc
要完成的内存描述符。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksMemoryDesc_free

android/NeuralNetworks.h 中声明
void ANeuralNetworksMemoryDesc_free(
  ANeuralNetworksMemoryDesc *desc
)

销毁内存描述符。

内存描述符无需已通过调用 ANeuralNetworksMemoryDesc_finish 完成。

有关多线程使用的信息,请参阅 ANeuralNetworksMemoryDesc

自 NNAPI 功能级别 4 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
desc
要销毁的内存描述符。传递 NULL 是可以接受的,并且不会执行任何操作。

ANeuralNetworksMemoryDesc_setDimensions

android/NeuralNetworks.h 中声明
int ANeuralNetworksMemoryDesc_setDimensions(
  ANeuralNetworksMemoryDesc *desc,
  uint32_t rank,
  const uint32_t *dimensions
)

设置内存描述符的维度信息。

指定的维度必须与由 ANeuralNetworksMemoryDesc_addInputRoleANeuralNetworksMemoryDesc_addOutputRole 指定的所有角色的相应模型操作数的维度兼容。如果两个秩都被完全指定但值不同,或者至少有一个轴在两者中都被完全指定但值不同,则两个维度不兼容。

在调用 ANeuralNetworksMemoryDesc_finish 后尝试修改内存描述符将返回错误。

有关多线程使用的信息,请参阅 ANeuralNetworksMemoryDesc

自 NNAPI 功能级别 4 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
desc
要修改的内存描述符。
维度的数量。对于标量,必须为 0。
维度
维度数组。值为 0 的条目表示相应轴的大小未知。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksMemory_copy

android/NeuralNetworks.h 中声明
int ANeuralNetworksMemory_copy(
  const ANeuralNetworksMemory *src,
  const ANeuralNetworksMemory *dst
)

将数据从一个内存对象复制到另一个内存对象。

如果 src 和 dst 中至多有一个是由 ANeuralNetworksMemory_createFromDesc 创建的,则 src 和 dst 必须具有相同的逻辑大小。

如果 src 和 dst 都是由 ANeuralNetworksMemory_createFromDesc 创建的,则它们必须具有兼容的维度。如果两个秩都被完全指定但值不同,或者至少有一个轴在两者中都被完全指定但值不同,则两个维度不兼容。dst 可以具有未指定的维度或秩。在这种情况下,dst 的维度将根据 src 的维度更新。

在这两种情况下,如果 src 是由 ANeuralNetworksMemory_createFromDesc 创建的,则它必须已在成功的执行中用作输出,或在成功的 ANeuralNetworksMemory_copy 中用作目标内存。

src 和 dst 可以具有不同的数据布局,在这种情况下,数据复制将进行逻辑操作并进行数据布局转换。

自 NNAPI 功能级别 4 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
src
源内存对象。
dst
目标内存对象。
返回值
如果成功则为 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_setInputFromMemoryANeuralNetworksExecution_setOutputFromMemory 时,offset 和 length 都必须设置为零,并且整个内存区域将与指定的输入或输出操作数关联。不能保证任意 AHardwareBuffer_Format 和 AHardwareBuffer_UsageFlags 组合可以被任意设备使用。如果选择的设备集无法使用该缓冲区,执行将失败。

禁止使用 AHARDWAREBUFFER_FORMAT_BLOB 格式以外的 AHardwareBuffer 支持的共享内存调用 ANeuralNetworksModel_setOperandValueFromMemory

提供的 AHardwareBuffer 的生命周期必须长于 ANeuralNetworksMemory 对象。

自 NNAPI 功能级别 3 起可用。

另请参阅:AHardwareBuffer 已弃用。 NNAPI 已弃用。有关详细信息,请参阅此网页

详细信息
参数
ahwb
AHardwareBuffer 句柄。
memory
要创建的内存对象。如果不成功,则设置为 NULL。
返回值
如果请求正常完成,则为 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_addInputRoleANeuralNetworksMemoryDesc_addOutputRole 指定的所有角色的相应模型操作数的维度以及通过调用 ANeuralNetworksMemoryDesc_setDimensions 设置的维度(如果有)推导出来的。内存描述符可以具有未指定的维度或秩。在这种情况下,同一个内存对象可以在不同的执行中使用不同的输出形状。当内存用作输入时,输入形状必须与上一次使用此内存对象作为输出的执行或上一次使用此内存对象作为目标内存的 ANeuralNetworksMemory_copy 的输出形状相同。为具有未指定维度或秩的内存对象创建可能会因某些角色集而失败。

在与上述规则不兼容的角色或形状中使用内存将返回错误。

使用该内存对象调用 ANeuralNetworksExecution_setInputFromMemoryANeuralNetworksExecution_setOutputFromMemory 时,offset 和 length 都必须设置为零,并且整个内存区域将与指定的输入或输出操作数关联。

使用此函数创建的内存调用 ANeuralNetworksModel_setOperandValueFromMemory 将返回错误。

不再需要内存时,必须调用 ANeuralNetworksMemory_free

尝试从未完成的内存描述符创建内存将返回错误。

提供的 ANeuralNetworksMemoryDesc 不需要比 ANeuralNetworksMemory 对象生命周期长。

自 NNAPI 功能级别 4 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
desc
内存描述符。
memory
要创建的内存对象。如果不成功,则设置为 NULL。
返回值
成功时为 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 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
size
请求的大小(以字节为单位)。不得大于文件大小。
protect
映射所需的内存保护。它是 PROT_NONE 或以下一个或多个标志的按位或:PROT_READ、PROT_WRITE。
fd
请求的文件描述符。文件描述符必须可进行 mmap 操作。文件描述符将被复制。
offset
要映射区域相对于文件开头的偏移量。偏移量必须对齐到页面大小。
memory
要创建的内存对象。如果不成功,则设置为 NULL。
返回值
如果请求正常完成,则为 ANEURALNETWORKS_NO_ERROR。

ANeuralNetworksMemory_free

android/NeuralNetworks.h 中声明
void ANeuralNetworksMemory_free(
  ANeuralNetworksMemory *memory
)

删除内存对象。

销毁运行时用于跟踪内存的对象。如果没有其他代码打开对此内存的句柄,这将释放底层实际内存。

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
memory
要释放的内存对象。传递 NULL 是可以接受的,并且不会执行任何操作。

ANeuralNetworksModel_addOperand

android/NeuralNetworks.h 中声明
int ANeuralNetworksModel_addOperand(
  ANeuralNetworksModel *model,
  const ANeuralNetworksOperandType *type
)

向模型添加操作数。

操作数添加的顺序非常重要。第一个添加到模型的操作数将具有索引值 0,第二个为 1,依此类推。这些索引在 ANeuralNetworksModel_addOperationANeuralNetworksModel_identifyInputsAndOutputsANeuralNetworksModel_setOperandValueANeuralNetworksModel_setOperandValueFromMemoryANeuralNetworksExecution_setInputANeuralNetworksExecution_setInputFromMemoryANeuralNetworksExecution_setOutputANeuralNetworksExecution_setOutputFromMemory 中用作操作符标识符。

每个操作数必须恰好通过以下方式之一引用:

被标识为模型输入或常量的操作数不得同时被 ANeuralNetworksModel_identifyInputsAndOutputs 标识为模型输出。

要构建一个能够适应不同大小输入的模型(例如 CNN),请将运行时会变化的维度留空。如果这样做,请在调用 ANeuralNetworksExecution_setInputANeuralNetworksExecution_setInputFromMemory 时完整指定维度。

在调用 ANeuralNetworksModel_finish 后尝试修改模型将返回错误。

有关多线程使用的信息,请参阅 ANeuralNetworksModel

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
model
要修改的模型。
类型
描述操作数形状的 ANeuralNetworksOperandType。无论 ANeuralNetworksOperandType 还是其指向的维度,都不需要在对 ANeuralNetworksModel_addOperand 的调用完成后继续存在。
返回值
如果成功则为 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 事先添加。

详细信息
参数
model
要修改的模型。
类型
inputCount
inputs 数组中的条目数。
inputs
识别每个操作数的索引数组。
outputCount
outputs 数组中的条目数。
outputs
识别每个操作数的索引数组。

在调用 ANeuralNetworksModel_finish 后尝试修改模型将返回错误。

有关多线程使用的信息,请参阅 ANeuralNetworksModel

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksModel_create

android/NeuralNetworks.h 中声明
int ANeuralNetworksModel_create(
  ANeuralNetworksModel **model
)

创建一个空的 ANeuralNetworksModel

这只会创建对象。计算仅在调用 ANeuralNetworksExecution_burstComputeANeuralNetworksExecution_computeANeuralNetworksExecution_startComputeANeuralNetworksExecution_startComputeWithDependencies 后执行。

应通过调用 ANeuralNetworksModel_addOperationANeuralNetworksModel_addOperand 构建模型。

模型完全构建后,应调用 ANeuralNetworksModel_finish

不再需要模型时,应调用 ANeuralNetworksModel_free

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
model
要创建的 ANeuralNetworksModel。如果不成功,则设置为 NULL。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksModel_finish

android/NeuralNetworks.h 中声明
int ANeuralNetworksModel_finish(
  ANeuralNetworksModel *model
)

表示我们已完成对模型的修改。

在调用 ANeuralNetworksCompilation_createANeuralNetworksCompilation_createForDevices 之前是必需的。

应用程序必须确保在同一时间没有其他线程使用该模型。

对于给定的模型,此函数只能调用一次。

有关多线程使用的信息,请参阅 ANeuralNetworksModel

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
model
要完成的模型。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworksModel_free

android/NeuralNetworks.h 中声明
void ANeuralNetworksModel_free(
  ANeuralNetworksModel *model
)

销毁模型。

模型无需已通过调用 ANeuralNetworksModel_finish 完成。

有关多线程使用的信息,请参阅 ANeuralNetworksModel

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
model
要销毁的模型。传递 NULL 是可以接受的,并且不会执行任何操作。

ANeuralNetworksModel_getSupportedOperationsForDevices

android/NeuralNetworks.h 中声明
int ANeuralNetworksModel_getSupportedOperationsForDevices(
  const ANeuralNetworksModel *model,
  const ANeuralNetworksDevice *const *devices,
  uint32_t numDevices,
  bool *supportedOps
)

获取指定设备集支持的操作。

如果选择了多个设备,则支持的操作列表是所有选定设备支持的操作的并集。

自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
model
要查询的模型。
devices
设备集。不得包含重复项。
numDevices
设备集中的设备数量。
supportedOps
要填充的布尔数组。True 表示支持。布尔数组的大小必须至少与模型中的操作数量相同。supportedOps 数组中元素的顺序与相应操作添加到模型的顺序一致。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

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 事先添加。

详细信息
参数
model
要修改的模型。
inputCount
inputs 数组中的条目数。
inputs
标识输入操作数的索引数组。
outputCount
outputs 数组中的条目数。
outputs
标识输出操作数的索引数组。

在调用 ANeuralNetworksModel_finish 后尝试修改模型将返回错误。

有关多线程使用的信息,请参阅 ANeuralNetworksModel

自 NNAPI 功能级别 1 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

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 后尝试修改模型将返回错误。

详细信息
参数
model
要修改的模型。
allow
'true' 表示 ANEURALNETWORKS_TENSOR_FLOAT32 的计算可以使用低至 IEEE 754 16 位浮点格式的范围和/或精度。'false' 表示 ANEURALNETWORKS_TENSOR_FLOAT32 的计算必须至少使用 IEEE 754 32 位浮点格式的范围和精度。

自 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 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
model
要修改的模型。
index
我们要设置的模型操作数的索引。
channelQuant
操作数的每通道量化参数。此结构中的内存无需在调用此函数后继续存在。
返回值
如果成功则为 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 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
model
要修改的模型。
index
我们要设置的模型操作数的索引。
buffer
要使用的数据的指针。
length
数据值的大小(以字节为单位)。
返回值
如果成功则为 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 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
model
要修改的模型。
index
我们要设置的模型操作数的索引。
memory
包含数据的内存。
offset
这指定了数据在内存中的位置。偏移量是从内存开始处的字节数。
length
数据值的大小(以字节为单位)。
返回值
如果成功则为 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 起可用。

已废弃。 NNAPI 已废弃。请参阅 此网页 了解详情。

详细信息
参数
model
要修改的模型。
index
我们要设置的模型操作数的索引。
要引用的模型。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworks_getDefaultLoopTimeout

android/NeuralNetworks.h 中声明
uint64_t ANeuralNetworks_getDefaultLoopTimeout()

获取 WHILE 循环的默认超时值。

自 NNAPI feature level 4 起可用。 已弃用。 NNAPI 已弃用。有关详细信息,请参阅此网页

详细信息
返回值
默认超时值(以纳秒为单位)。

ANeuralNetworks_getDevice

android/NeuralNetworks.h 中声明
int ANeuralNetworks_getDevice(
  uint32_t devIndex,
  ANeuralNetworksDevice **device
)

获取指定设备的表示形式。

自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
devIndex
指定设备的索引。必须小于可用设备的数量。
设备
指定设备的表示。对于指定的设备,将始终返回相同的表示。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworks_getDeviceCount

android/NeuralNetworks.h 中声明
int ANeuralNetworks_getDeviceCount(
  uint32_t *numDevices
)

获取可用设备的数量。

自 NNAPI 功能级别 3 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页

详细信息
参数
numDevices
用于返回设备数量。
返回值
如果成功则为 ANEURALNETWORKS_NO_ERROR

ANeuralNetworks_getMaximumLoopTimeout

android/NeuralNetworks.h 中声明
uint64_t ANeuralNetworks_getMaximumLoopTimeout()

获取 WHILE 循环的最大超时值。

自 NNAPI feature level 4 起可用。 已弃用。 NNAPI 已弃用。有关详细信息,请参阅此网页

详细信息
返回值
最大超时值(以纳秒为单位)。

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 级别。

自 NNAPI 功能级别 5 起可用。 已弃用。 NNAPI 已弃用。有关更多详细信息,请参阅此网页