目录

什么是深度神经网络?

下一步


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

本系列的以下部分将指导您创建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开发。您将需要的软件可用于所有三个平台:

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

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

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

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

对于Windows,Linux和maxOS:pip3 install tensorflow-gpu

  • Tensorflow_addons
    pip3 install tensorflow_addons

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

如果您的计算机具有受支持的图形适配器,则还可以安装具有GPU支持的TensorFlow版本。在撰写本文时,NVIDIA支持CUDA的GPU是受支持的图形卡系列。如果您有兼容的视频卡并想要使用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 tfprint(tf.__version__)#This is the training data
training_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 trained
layer0 = tf.keras.layers.Dense(units=1, input_shape=[1])
model = tf.keras.Sequential([layer0])#Compiling the network
model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(1))#Training
history=model.fit(training_x, training_y, epochs=1000, verbose=False)#Show the network weights
weights = layer0.get_weights()
print('weight: {} bias: {}'.format(weights[0], weights[1]))#Try prediction
print(model.predict([7]))

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

python3 regression.py

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

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

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

下一步

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

设置Android AI开发环境相关推荐

  1. 使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  2. 使用Android Studio搭建Android集成开发环境

    一.Android Studio简单介绍 2013年GoogleI/O大会首次发布了Android Studio IDE(Android平台集成开发环境).它基于Intellij IDEA开发环境,旨 ...

  3. 在Eclipse上搭建Android C开发环境

    1.需要准备的工具和软件 JDK eclipse indigo(我下载的是indigo的C/C++开发版) ADT12.0(当然下最新的ADT了,免得有太多的麻烦.) Android SDK Andr ...

  4. 使用Android Studio搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  5. 图文详解如何搭建Windows的Android C++开发环境

    原地址:http://www.apkbus.com/android-18595-1-1.html //================================================= ...

  6. Android Studio 使用艺术 - Android Windows 开发环境配置

    为什么80%的码农都做不了架构师?>>>    Android Windows 开发环境配置 配置JDK 下载JDK8 下载地址:http://www.oracle.com/tech ...

  7. 安卓安装之离线搭建Android Studio开发环境

    离线搭建Android Studio开发环境 前言: Android Studio开发环境,有两种方式进行安装. ①:在线安装,需要下载大量的文件,最好电脑进行翻墙,否则下载速度相当的慢. ②:离线安 ...

  8. 搭建Windows下Android应用开发环境——Eclipse/Android/ADT

    搭建Windows下Android应用开发环境--Eclipse/Android/ADT 田海立@CSDN 2011/07/18 Window下Android的应用开发环境,很早以前就在我的机器上搭建 ...

  9. android studio开发环境搭建,国内服务器代理下载android sdk

    android studio开发环境搭建 1,百度android studio,下载安装: 2,启动Fetching Android SDK component information http:// ...

最新文章

  1. 如何用fiddler抓取HTTPS的详细教程(附fiddler安装教学)
  2. C#数据本地存储方案之SQLite
  3. 优化matlab作业,现代设计优化算法MATLAB实现
  4. 学习笔记4 :opencv 、PIL、matplotlib.image打开、保存图片
  5. 百度SEO站群织梦dedecms自定义多条件筛选插件源码
  6. Oracle中查看所有表和字段
  7. 使用 ADB LogCat 查看在Android真机上 Unity debug.log 输出日志
  8. python3 协程 返回值_python asyncio 获取协程返回值和使用callback
  9. Wooden Signs Gym - 101128E (DP)
  10. 【计算机网络】常用网络命令
  11. (二)C语言开发工具
  12. mysql设计用户标签库_针对Tag/标签的数据库设计思考 | 学步园
  13. 计算机ppt里怎么应用背景图,如何在PowerPoint2013中为幻灯片设置背景图片 -电脑资料...
  14. 利用α-β搜索的博弈树算法编写一字棋游戏 python
  15. 2021年中国鸡尾酒杯市场趋势报告、技术动态创新及2027年市场预测
  16. Processor 处理器
  17. GEditor女蜗设计器3.0发布
  18. javascript 过滤_javascript地图过滤器减少说明
  19. css实现波浪球效果图,用css实现圆形波浪效果图
  20. 如何判断List 集合和Map 集合是否为空

热门文章

  1. c语言400行小游戏,400行代码编C语言控制台界版2048游戏,编写疯子一样的C语言代码...
  2. java 工程文件改名后显示绿色加号_Gradle学习记录018 构建java JVM工程 part1
  3. _java等领域_测试、集成等领域最好的Java工具
  4. 电商C4D素材,玩转立体作品不是问题
  5. pandas打印某一列_Pandas数据分析教程
  6. Python GUI 截图小工具 实例Demo
  7. 虚拟机控制数据结构 (VMCS)状态转换
  8. DPDK如何释放大页内存(巨页内存hugepage)
  9. PHP导出成word文档
  10. C语言编写汇编的编译器,用c编写一个asm的编译器