要使用NNAPI执行计算,首先需要构造一个有向图来定义要执行的计算。这个计算图与您的输入数据(例如,从机器学习框架传递下来的权重和偏差)相结合,形成了NNAPI运行时评估的模型。
- 模型:是一个含操作符的数学运算图。包括了输入的数据和从训练好的模型得到的常量值(weight)。这些操作是特定于神经网络的。它们包括二维(2D)卷积,logistic(sigmoid)激励函数,整流线性(ReLU)激励函数等等。创建模型是一个同步操作,但是一旦成功创建,就可以在线程和编译之间重用。在NNAPI中,模型被表示为ANeuralNetworksModel实例。
- 编译:表示将NNAPI model 编译为low-level代码的配置。创建一个编译是一个同步操作,但一旦成功创建,它可以在线程和执行之间重用。在NNAPI中,每个编译都被表示为一个ANeuralNetworksCompilation实例。
- 内存:表示共享内存,内存映射文件和类似的内存缓冲区。使用内存缓冲区可让NNAPI运行时更有效地将数据传输到驱动程序。应用程序通常会创建一个共享内存缓冲区,其中包含定义模型所需的每个张量。也可以使用内存缓冲区来存储执行实例的输入和输出。在NNAPI中,每个内存缓冲区都表示为一个ANeuralNetworksMemory实例。
- 执行:将NNAPI模型应用于一组输入并收集结果的接口。执行是一个异步操作。多个线程可以等待相同的执行。执行完成后,所有的线程将被释放。在NNAPI中,每个执行都表示为一个ANeuralNetworksExecution实例。
NNAPI 编程模型如下图
![](https://developer.android.com/ndk/images/nnapi/nnapi_flow.png)