本文共 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上的神经网络之前,您需要设置一个开发环境。您可以从Windows,macOS或Linux开发。您将需要的软件可用于所有三个平台:
一旦安装了所有这些,就可以开始进行配置。由于将从命令行使用Python,因此您需要将其安装位置添加到PATH变量中,这样您就无需键入其完整路径即可使用它。
另外,还需要将其他Python库安装到您的环境中。这些库可以使用PIP实用程序从命令行轻松安装。您将要安装的库包括以下内容:
对于Windows,Linux和maxOS:pip3 install tensorflow-gpu
对于Tensorflow,有多个安装选项。默认情况下,将安装兼容版本的tensorflow。兼容版本虽然不是最快的版本,但可以在最广泛的硬件上运行。如果您的计算机具有支持某些矢量操作指令的处理器,则TensorFlow将打印一条消息,通知您该计算机支持可用于提高性能的选件。
如果您的计算机具有受支持的图形适配器,则还可以安装具有GPU支持的TensorFlow版本。在撰写本文时,是受支持的图形卡系列。如果您有兼容的视频卡并想要使用TensorFlow的GPU加速版本,则可以使用以下命令进行安装:
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版本。
为了测试Python和TensorFlow的安装,让我们快速制作一个使用TensorFlow的应用程序。对于此应用程序,TensorFlow将获得数字和相关输出的列表,并且必须弄清楚它们之间的关系。对于此测试,数字之间将具有线性关系。输入值将是
2,5,10,12,24,32,66,100
输出值将是
5、14、29、35、71、95、197、299
这样发现数字集之间的关系称为线性回归。这些值之间的关系可以用等式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环境正常。线性回归是常用的数据分析和预测工具。但是我们想通过视觉识别来做一些更复杂的事情。
现在我们已经准备就绪,可以进行Android和TensorFlow开发了。在中,我们将学习如何采取预训练神经网络,并使其适用于在TensorFlow精简版使用。
转载地址:http://ipwhj.baihongyu.com/