博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设置Android AI开发环境
阅读量:3526 次
发布时间:2019-05-20

本文共 3656 字,大约阅读时间需要 12 分钟。

目录


在第一部分中,建立了开发环境。

本系列的以下部分将指导您创建Android应用程序,准备在TensorFlow Lite中使用的预训练神经网络,改进性能的注意事项以及训练自己的视觉识别器所需的步骤。

什么是深度神经网络?

深度神经网络(DNN)在图像分类和其他类型的自动分类方面非常出色。十年前花了数百万美元在研究和计算能力上的成果,现在只要GPU还算不错,任何人都可以得到。但是,尝试在移动设备上运行DNN可能会遇到不利的一面。当使用常规代码实现时,DNN在移动设备上可能会占用大量处理器资源并且运行缓慢。幸运的是,TensorFlow Lite提供了缩小的DNN规模的解决方案,使其可以在移动设备上更平稳地运行。

DNN是实现人工智能的多种方式之一。神经网络是基于仿生的AI方法之一(基于生物实体设计技术和过程)。DNN基于神经元。生物神经元相互连接,可以响应来自环境或其他神经元的外部刺激而激活,并刺激与其连接的其他神经元。软件神经元类似,它们的外部刺激来自保存的数据或来自摄像头和麦克风等传感设备。

简而言之,单个软件神经元(或节点)具有许多接受某个数值的输入,并且对于每个输入,该值都乘以某个数字并为其添加基值。所有这些输入的结果加在一起,并通过激活函数来决定神经元将输出什么值。这些不同的神经元连接在一起,以彼此传递信息。这些神经元的集体配置被称为模型。对于单个神经元,涉及许多数学运算。对于完整的神经网络模型,可能涉及成千上万个相互连接的神经元。

典型的计算机处理器可以快速执行顺序操作。但是,即使是多核CPU,与GPU相比,它可以执行的并行操作的数量也极为有限。GPU旨在一次对向量组执行数学运算。这对于高性能3D渲染和训练神经网络都是必需的。CPU速度极快,但不是3D渲染或训练神经网络所需的正确工具。

GPU旨在执行大量的并行操作,因此它们可以快速处理和显示构成视觉场景的形状和像素。但是,GPU并不在乎它们处理的数据的最终目的,并且发现它们也可以用于更通用的计算。现在,某些GPU也可以使用本机API来执行通用计算。在移动设备上,巧妙地使用GPU可以显着加快神经网络的处理速度。除了GPU,现在还有一些移动设备,其硬件专门用于处理神经网络。使用TensorFlow lite,您的代码可以利用可用的硬件加速功能。

在进入Android上的神经网络之前,您需要设置一个开发环境。您可以从WindowsmacOSLinux开发。您将需要的软件可用于所有三个平台:

  • 对于手机开发和部署,您将需要
  • 为了训练和转换网络,您将需要
  • 虽然不是绝对必要的,但有时在您需要可视化检查保存的神经网络模型时会很有用。

一旦安装了所有这些,就可以开始进行配置。由于将从命令行使用Python,因此您需要将其安装位置添加到PATH变量中,这样您就无需键入其完整路径即可使用它。

另外,还需要将其他Python库安装到您的环境中。这些库可以使用PIP实用程序从命令行轻松安装。您将要安装的库包括以下内容:

  • NumPy——用于数组,线性代数等的数值计算库。
    pip3 install numpy
  • ONNX-TF——用于从开放式神经网络交换格式转换网络模型。
    pip3 install git+https://github.com/onnx/onnx-tensorflow.git
  • TensorFlow——用于创建或使用神经网络模型。
    对于具有GPU支持的WindowsLinuxpip3 install tensorflow 

       对于WindowsLinuxmaxOSpip3 install tensorflow-gpu

  • Tensorflow_addons
    pip3 install tensorflow_addons

对于Tensorflow,有多个安装选项。默认情况下,将安装兼容版本的tensorflow。兼容版本虽然不是最快的版本,但可以在最广泛的硬件上运行。如果您的计算机具有支持某些矢量操作指令的处理器,则TensorFlow将打印一条消息,通知您该计算机支持可用于提高性能的选件。

如果您的计算机具有受支持的图形适配器,则还可以安装具有GPU支持的TensorFlow版本。在撰写本文时,是受支持的图形卡系列。如果您有兼容的视频卡并想要使用TensorFlowGPU加速版本,则可以使用以下命令进行安装:

pip3 install tensorflow-cpu

还必须将Android Studio配置为使用NDK执行本机代码编译。您无需自己编写任何本机代码,但是TensorFlow Lite Android库依赖于此。要安装NDK,请打开工具菜单,然后选择SDK管理器。在SDK工具选项卡下是一个标签为NDK(并排)的项目。选择此选项将导致安装NDK的最新版本。TensorFlow Lite经常更新。要安装我使用的版本(21.0.6113669),请选择右下角的显示软件包详细信息复选框。选择后,展开NDK(并排)以查看NDK版本。

选择SDK版本并单击确定Android Studio将下载并安装组件。下载完成后,通过创建一个新的Android项目并向其添加TensorFlow引用来测试是否存在正确版本的NDK。在Android Studio中,打开文件菜单,然后选择新建项目。选择清空活动并接受该项目的默认设置。点击完成

在依赖项部分的项目的build.gradle文件中,添加以下行:

implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly'

然后构建项目。如果一切顺利,则将编译该项目。如果NDK要求已更改,您应该收到一条错误消息,指出未找到所需的NDK版本,该版本还提供了所需的版本。如果遇到这种情况,请打开SDK管理器,然后选择错误所标识的NDK版本。

为了测试PythonTensorFlow的安装,让我们快速制作一个使用TensorFlow的应用程序。对于此应用程序,TensorFlow将获得数字和相关输出的列表,并且必须弄清楚它们之间的关系。对于此测试,数字之间将具有线性关系。输入值将是

251012243266100

输出值将是

51429357195197299

这样发现数字集之间的关系称为线性回归。这些值之间的关系可以用等式y = 3 * x-1表示。在此代码中,创建了一个简单的网络来学习关系,然后从测试值7计算输出:

import tensorflow as tf  print(tf.__version__)#This is the training datatraining_x = [2, 5, 10, 12, 24, 32, 66, 100]training_y = [5, 14, 29, 35, 71, 95, 197, 299]#Building the network that will be trainedlayer0 = tf.keras.layers.Dense(units=1, input_shape=[1])model = tf.keras.Sequential([layer0])#Compiling the networkmodel.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(1))#Traininghistory=model.fit(training_x, training_y, epochs=1000, verbose=False)#Show the network weightsweights = layer0.get_weights()print('weight: {} bias: {}'.format(weights[0], weights[1]))#Try predictionprint(model.predict([7]))

将该程序保存在名为gression.py的文件中。要运行该程序,请从终端运行以下命令。

python3 regression.py

运行此命令时,TensorFlow将运行其训练周期,然后将输出打印为输入值为7的输出。

weight: [[3.]] bias: [-1.000001][[20.]]

如果代码运行并输出类似于上述内容的输出,则说明您的TensorFlow环境正常。线性回归是常用的数据分析和预测工具。但是我们想通过视觉识别来做一些更复杂的事情。

下一步

现在我们已经准备就绪,可以进行AndroidTensorFlow开发了。在中,我们将学习如何采取预训练神经网络,并使其适用于在TensorFlow精简版使用。

转载地址:http://ipwhj.baihongyu.com/

你可能感兴趣的文章
N13-sqli盲注 基于时间型
查看>>
N1 技术心得 2019-6-26
查看>>
N1-环境配置
查看>>
N2-审计方法与步骤
查看>>
N3-常见的INI配置
查看>>
代码审计 N4 常见危险函数和特殊函数(一)
查看>>
MySQL笔记
查看>>
计算机运算方法之(原码 补码 反码 移码)
查看>>
计算机组成原理之(二进制与十进制互相转换,数的定点表示与浮点数表示)例题:设浮点数字长16位,其中阶码5位(含有1位阶符),尾数11位(含有1位数符)
查看>>
冒泡排序及其优化
查看>>
选择排序(java代码实现)
查看>>
插入排序
查看>>
哈夫曼树java代码实现
查看>>
快速排序
查看>>
vue路由高亮的两种方式
查看>>
vue router 报错: Uncaught (in promise) NavigationDuplicated {_name:""NavigationDuplicated"... 的解决方法
查看>>
vue跳转页面的两种方式
查看>>
存储器题目解析(持续更新中....)
查看>>
存储器知识要点
查看>>
Cache模拟器的实现
查看>>