Skip to content

Latest commit

 

History

History
164 lines (72 loc) · 16.3 KB

File metadata and controls

164 lines (72 loc) · 16.3 KB

零、前言

人工智能AI),是计算机中人类智能的模拟,历史悠久。 自 1956 年正式诞生以来,人工智能经历了数次兴衰。 持续不断的 AI 复兴或新的 AI 革命始于深度学习的突破。深度学习是机器学习的一个分支,由于深度学习,机器学习的分支现已成为 AI 最热门的分支。 深度卷积神经网络(DCNN)赢得了 ImageNet 大规模视觉识别挑战赛,其错误率仅为 16.4%,相比之下,第二好的非 DCNN 模型错误率为 26.2%。 自 2012 年以来,基于 DCNN 的改进条目每年都赢得了 ImageNet 挑战,并且深度学习技术已应用于计算机视觉以外的许多硬 AI 问题,例如语音识别,机器翻译和围棋游戏,从而取得了接连而至的突破。 2016 年 3 月,谷歌 DeepMind 的 AlphaGo 通过深度强化学习构建,击败了 18 届人类世界围棋冠军 Lee Sedol 4:1。 在 2017 年 Google I/O 大会上,Google 宣布他们正从移动优先转变为 AI 优先。 其他领先的公司,例如亚马逊,苹果,Facebook 和微软,都对 AI 进行了大量投资,并推出了许多基于 AI 的产品。

TensorFlow 是 Google 的开放源代码框架,用于构建机器学习 AI 应用。 自 2015 年 11 月首次发布以来,TensorFlow 已经有数个流行的开源深度学习框架,在不到两年的时间内,它已迅速成为最受欢迎的开源深度学习框架。 每周都会构建新的 TensorFlow 模型,以解决需要人类甚至是超人类智能的所有任务。 关于 TensorFlow 的数十本书已经出版。 TensorFlow 上的更多在线博客,教程,课程和视频已可用。 很明显,AI 和 TensorFlow 很热门,但为什么还要再加上一本书标题中带有“ TensorFlow”一词呢?

这是一本独特的书,也是第一本将 TensorFlow 驱动的 AI 与移动设备相结合的书,将最光明的未来与现在最繁荣的世界联系在一起。 在过去的十年中,我们都见证并经历了 iOS 和 Android 智能手机的革命,而我们刚刚开始的 AI 革命将对我们周围的世界产生更深远的影响。 还有什么比将两个世界的精华融合在一起的主题更好,这本书展示了如何在随时随地的移动设备上构建 TensorFlow AI 应用?

的确,您可以使用许多现有的云 AI API 来构建 AI 应用,有时这很有意义。 但是,在移动设备上完全运行 AI 应用的好处是,即使没有可用的网络连接,无法承受往返云服务器的费用或用户不想发送云服务时,您也可以运行应用,将手机上的数据发送给其他任何人。

确实,在 TensorFlow 开源项目中已经有一些 TensorFlow iOS 和 Android 应用示例,可以帮助您开始使用移动 TensorFlow。 但是,如果您曾经尝试在 iOS 或 Android 设备上运行令您惊讶的酷 TensorFlow 模型,则很可能会遇到很多麻烦,然后才能在手机上成功看到运行的模型。

本书向您展示了如何解决在移动平台上运行 TensorFlow 模型时可能遇到的所有常见问题,从而可以节省大量时间和精力。 您会在一书中看到超过 10 个完整的从零开始构建的 TensorFlow iOS 和 Android 应用,它们运行着各种凉爽的 TensorFlow 模型,包括最新和最酷的生成对抗网络GAN)和类似 AlphaZero 的模型。

这本书是给谁的

如果您是 iOS 和/或 Android 开发人员,对构建和重新训练他人的酷 TensorFlow 模型并在移动应用中运行它们感兴趣,或者您是 TensorFlow 开发人员,并且想要在移动设备上运行新的惊人的 TensorFlow 模型, 这本书是给你的。 如果您对 Raspberry Pi 上的 TensorFlow Lite,Core ML 或 TensorFlow 感兴趣,您也将从本书中受益。

本书涵盖的内容

第 1 章,“移动 TensorFlow 入门”,讨论如何在 Mac 和 Ubuntu 上设置 TensorFlow 以及在 Ubuntu 上设置 NVIDIA GPU,以及如何设置 Xcode 和 Android 工作室。 我们还将讨论 TensorFlow Mobile 和 TensorFlow Lite 之间的区别以及何时使用它们。 最后,我们将向您展示如何运行示例 TensorFlow iOS 和 Android 应用。

第 2 章,“通过迁移学习对图像进行分类” ,介绍了什么是迁移学习以及为什么要使用迁移学习,如何使用它来重新训练 Inception v3 和 MobileNet 模型,以更准确,更快地识别犬种,以及如何在示例 iOS 和 Android 应用中使用经过重新训练的模型。 然后,我们将向您展示如何在 Tensor-C 和 Swift 中将 TensorFlow 添加到自己的 iOS 应用中,以及如何将自己的 Android 应用添加到狗品种识别中。

第 3 章,“检测对象及其位置”,快速概述了对象检测,然后向您展示如何设置 TensorFlow 对象检测 API 并使用它来重新训练 SSD-MobileNet 和 Faster RCNN 模型。 我们还将通过手动构建 TensorFlow iOS 库以支持非默认 TensorFlow 操作的方式,向您展示如何在 iOS 或 Android 示例 TensorFlow 应用中使用模型。 最后,我们将向您展示如何训练 YOLO2(另一个流行的对象检测模型),该模型也在示例 TensorFlow Android 应用中使用,以及如何在 iOS 应用中使用它。

第 4 章,“变换具有惊人艺术风格的图片” 首先概述了神经样式迁移在过去几年中的快速发展。 然后,它向您展示了如何训练快速的神经样式迁移模型,以及如何在 iOS 和 Android 应用中使用它们。 之后,我们将介绍如何在您自己的 iOS 和 Android 应用中使用 TensorFlow Magenta 多样式模型轻松创建令人惊叹的艺术风格。

第 5 章,“了解简单语音命令”概述了语音识别,并向您展示了如何训练简单语音命令识别模型。 然后,我们将向您展示如何使用 Objective-C 和 Swift 在 Android 和 iOS 中使用该模型。 我们还将介绍有关如何解决移动设备上可能出现的模型加载和运行错误的更多提示。

第 6 章,“用自然语言描述图像”,介绍了图像字幕的工作原理,然后介绍了如何训练和冻结图像字幕模型 TensorFlow。 我们将进一步讨论如何转换和优化复杂的模型,以使其可以在移动设备上运行。 最后,我们将使用该模型提供完整的 iOS 和 Android 应用,以生成图像的自然语言描述。

第 7 章,“使用 CNN 和 LSTM 识别绘画”,解释了绘画分类的工作原理,并讨论了如何训练,预测和准备模型。 然后,我们将向您展示如何构建另一个自定义 TensorFlow iOS 库,以在有趣的 iOS 涂鸦应用中使用该模型。 最后,我们将向您展示如何构建自定义的 TensorFlow Android 库来修复新的模型加载错误,然后在您自己的 Android 应用中使用该模型。

第 8 章,“使用 RNN 预测股票价格”带领您完成 RNN 以及如何使用它预测股票价格。 然后,我们将向您介绍如何使用 TensorFlow API 构建 RNN 模型以预测股价,以及如何使用易于使用的 Keras API 构建 RNN LSTM 模型以实现相同的目标。 我们将测试并查看此类模型是否可以击败随机购买或出售策略。 最后,我们将向您展示如何在 iOS 和 Android 应用中运行 TensorFlow 和 Keras 模型。

第 9 章,“使用 GAN 生成和增强图像”,概述了 GAN 是什么以及为什么它具有如此大的潜力。 然后,它将探讨如何构建和训练可用于生成类似人的手写数字的基本 GAN 模型以及可以将低分辨率图像增强为高分辨率图像的更高级模型。 最后,我们将介绍如何在 iOS 和 Android 应用中使用两种 GAN 模型。

第 10 章,“构建类似 AlphaZero 的手机游戏应用”,从最新和最酷的 AlphaZero 的工作原理以及如何在 TensorFlow 作为后端的 Keras 中,训练和测试 AlphaZero 的模型,开始玩一个简单但有趣的游戏,名为 Connect4。 然后,我们将向您展示完整的 iOS 和 Android 应用,以使用该模型并在您的移动设备上玩 Connect4 游戏。

第 11 章,“在移动设备上使用 TensorFlow Lite 和 Core ML”演示 TensorFlow Lite,然后向您展示如何使用预先构建的 TensorFlow 模型(经过重新训练) TensorFlow Lite 的 TensorFlow 模型以及 iOS 中的自定义 TensorFlow Lite 模型。 我们还将向您展示如何在 Android 中使用 TensorFlow Lite。 之后,我们将概述 Apple 的 Core ML,并向您展示如何在使用 Scikit-Learn 的标准机器学习中使用 Core ML。 最后,我们将介绍如何在 TensorFlow 和 Keras 中使用 Core ML。

第 12 章,“在 Raspberry Pi 上开发 TensorFlow 应用”,首先介绍如何设置 Raspberry Pi 并使其移动以及如何设置 Raspberry Pi 上的 TensorFlow。 然后,我们将介绍如何使用 TensorFlow 图像识别和音频识别模型,以及文本到语音和机器人移动 API,来构建可以移动,看,听和说的 Raspberry Pi 机器人。 最后,我们将详细讨论如何使用 OpenAI Gym 和 TensorFlow 在模拟环境中从头开始构建和训练强大的基于神经网络的强化学习策略模型,以使机器人学会保持平衡。

充分利用这本书

我们建议您先按顺序阅读前四章,然后运行这里。 这将帮助您确保已为 TensorFlow 移动应用开发设置了全部开发环境,并且知道如何将 TensorFlow 集成到自己的 iOS 和/或 Android 应用中。 如果您是 iOS 开发人员,还将学习如何在 TensorFlow 中使用 Objective-C 或 Swift,以及何时以及如何使用 TensorFlow pod 或手动 TensorFlow iOS 库。

然后,如果您需要构建自定义的 TensorFlow Android 库,请转到第 7 章,“使用 CNN 和 LSTM 识别绘画”,以及如果您想学习如何在您的移动应用中使用 Keras 模型,请查看第 8 章,“使用 RNN 预测股价”,和第 10 章, “构建类似 AlphaZero 的手机游戏应用” 。

如果您对 TensorFlow Lite 或 Core ML 更感兴趣,请阅读第 11 章,“在移动设备上使用 TensorFlow Lite 和 Core ML”,以及您对 Raspberry Pi 上的 TensorFlow 或 TensorFlow 中的强化学习最感兴趣,请跳至第 12 章,“在 Raspberry Pi 上开发 TensorFlow 应用”。

除此之外,您可以阅读第 5 至 10 章,以了解如何训练不同类型的 CNN,RNN,LSTM,GAN 和 AlphaZero 模型以及如何在移动设备上使用它们,也许是运行 iOS 和/ 或每章的 Android 应用程式,然后再研究详细的实作。 另外,您可以直接跳到最感兴趣的模型的任何章节。 请注意,稍后的章节可能会参考较早的章节以获取一些重复的细节,例如将 TensorFlow 自定义 iOS 库添加到 iOS 应用中的步骤,或通过构建 TensorFlow 自定义库来修复某些模型加载或运行错误的步骤。 但是,请放心,您不会迷路,或者至少我们已尽力提供了用户友好的分步教程,并偶尔参考了先前教程的某些步骤,以帮助您避免在构建移动 TensorFlow 应用时可能会遇到的一切陷阱,同时也避免了重复自己。

什么时候看这本书

人工智能,或其最热门的分支机器学习,或其最热门的分支深度学习,近年来发展迅速。 由 Google 支持并在所有开源机器学习框架中最受欢迎的开发人员社区的 TensorFlow 新版本也以更快的速度发布。 当我们于 2017 年 12 月开始写书时,最新的 TensorFlow 版本为 1.4.0,于 2017 年 11 月 2 日发布,之后的 1.5.0 是 2018 年 1 月 26 日发布的,而 1.6.0 是 2018 年 2 月 28 日发布的,1.7 2018 年 3 月 29 日为.0,2018 年 4 月 27 日为 1.8.0。本书中所有的 iOS,Android 和 Python 代码均已使用所有这些 TensorFlow 版本进行了测试。 不过,到您阅读本书时,最新的 TensorFlow 版本可能会晚于 1.8.0。

事实证明,您无需太担心 TensorFlow 的新版本。 本书中的代码很可能将在最新的 TensorFlow 版本上无缝运行。 在我们的测试中,在 TensorFlow 1.4、1.5、1.6、1.7 和 1.8 上运行应用时,我们根本没有进行任何代码更改。 可能是在更高版本中,默认情况下将支持更多 TensorFlow 操作,因此您无需构建自定义 TensorFlow 库,也可以以更简单的方式构建自定义 TensorFlow 库。

当然,我们不能保证所有代码在将来的所有 TensorFlow 版本中都不会更改而运行,但是无论书本是在什么时候阅读,无论现在还是几个月后,本书中都包含了所有详细的教程和故障排除技巧,您应该使用 TensorFlow 1.4-1.8 或更高版本,可以使阅读本书和在本书中运行应用的过程顺利进行。

由于我们必须在某些时候停止使用特定的 TensorFlow 版本才能出版该书,因此我们将继续在每个新的主要 TensorFlow 版本中测试运行该书中的所有代码,并相应地在源代码存储库中更新该书的代码和测试结果。 如果您对代码或书籍有任何疑问,也可以直接在存储库中发布问题。

另一个问题是 TensorFlow Mobile 和 TensorFlow Lite 之间的选择。 该书在大多数章节(1 至 10)中介绍了 TensorFlow Mobile。 TensorFlow Lite 可能是在移动设备上运行 TensorFlow 的未来,它在 Google I/O 2018 上仍处于开发人员预览版中,这就是 Google 希望您“使用 TensorFlow Mobile 覆盖生产案例”的原因。 即使在 TensorFlow Lite 正式发布后,根据 Google 的说法,“ TensorFlow Mobile 不会很快消失”-实际上,在本书出版之前我们测试了最新的 TensorFlow 1.8.0 版本,我们发现使用 TensorFlow Mobile 变得更加简单。

如果 TensorFlow Lite 在所有用例中完全取代 TensorFlow Mobile 的那一天(具有 Lite 更好的性能和更小的大小)终于到了,那么您从书本中学到的技能将只会为您做好准备。 同时,在那个不可预见的未来到来之前,您可以阅读这本书并了解如何使用 TensorFlow Mobile 这样的老大哥在您的移动应用中运行所有这些功能强大的 TensorFlow 模型。

下载示例代码文件

您可以从 www.packtpub.com 的帐户中下载本书的示例代码文件。 如果您在其他地方购买了此书,则可以访问 www.packtpub.com/support 并注册以将文件直接通过电子邮件发送给您。

您可以按照以下步骤下载代码文件:

  1. 登录或登录 www.packtpub.com

  2. 选择支持标签。

  3. 单击代码下载&勘误表。

  4. 在搜索框中输入书籍的名称,然后按照屏幕上的说明进行操作。

下载文件后,请确保使用以下最新版本解压缩或解压缩文件夹:

  • Windows 的 WinRAR / 7-Zip
  • Mac 版 Zipeg / iZip / UnRarX
  • 适用于 Linux 的 7-Zip / PeaZip

本书的代码包也托管在 Packt GitHub 帐户上。 如果代码有更新,它将在现有的 GitHub 存储库中进行更新。

这个页面 中,我们还提供了丰富的图书和视频目录中的其他代码包。 去看一下!

使用约定

本书中使用了许多文本约定。

CodeInText:表示文本中的词,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,伪 URL,用户输入和 Twitter 句柄。 示例:“ 安装 matplotlibpillowlxmljupyter 库。在 Ubuntu 或 Mac 上,您可以运行。

代码块设置如下:

syntax = "proto2";
package object_detection.protos;
message StringIntLabelMapItem {
  optional string name = 1;
  optional int32 id = 2;
  optional string display_name = 3;
};

message StringIntLabelMap {
  repeated StringIntLabelMapItem item = 1;
};

任何命令行输入或输出的编写方式如下:

sudo pip install pillow
sudo pip install lxml
sudo pip install jupyter
sudo pip install matplotlib

粗体:表示您在屏幕上看到的新术语,重要单词或顺序。 例如,菜单或对话框中的单词会出现在这样的文本中。 这是一个示例:“现在,我们选择 Enhance Image 选项,您将看到结果 ”

警告或重要提示显示如下,提示和技巧显示如下。