diff --git a/new/intel-mobi-proj-tf/11.md b/new/intel-mobi-proj-tf/11.md index bcb9aeecb310b85ec65cabb64d70c81f0d0996d1..7277f7903d7657298985bf9a51398b10b1933f10 100644 --- a/new/intel-mobi-proj-tf/11.md +++ b/new/intel-mobi-proj-tf/11.md @@ -25,13 +25,13 @@ -TensorFlow Lite( [https://www.tensorflow.org/mobile/tflite](https://www.tensorflow.org/mobile/tflite) )是一种轻量级解决方案,可在移动和嵌入式设备上运行深度学习模型。 如果可以将 TensorFlow 或 Keras 内置的模型成功转换为 TensorFlow Lite 格式,请基于 FlatBuffers( [https://google.github.io/flatbuffers](https://google.github.io/flatbuffers) ),与 ProtoBuffers ProtoBuffers 类似,但 相似,但速度更快,并且大小要小得多。 *检测对象及其位置* 和,然后可以期望模型以低延迟和较小的二进制大小运行。 在您的移动应用程序中使用 TensorFlow Lite 的基本工作流程如下: +[TensorFlow Lite](https://www.tensorflow.org/mobile/tflite) 是一种轻量级解决方案,可在移动和嵌入式设备上运行深度学习模型。 如果可以将 TensorFlow 或 Keras 内置的模型成功转换为 TensorFlow Lite 格式,请基于 [FlatBuffers](https://google.github.io/flatbuffers),与 ProtoBuffers ProtoBuffers 类似,但速度更快,并且大小要小得多。 *检测对象及其位置* 和,然后可以期望模型以低延迟和较小的二进制大小运行。 在您的移动应用程序中使用 TensorFlow Lite 的基本工作流程如下: 1. 使用 TensorFlow 或 Keras 以 TensorFlow 作为后端来构建和训练(或重新训练)TensorFlow 模型,例如我们在前几章中训练的模型。 You can also pick a prebuilt TensorFlow Lite model, such as the MobileNet models available at [https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md](https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md), which we used for retraining in [Chapter 2](../Text/02.html), *Classifying Images with Transfer Learning*. Each of the MobileNet model `tgz` files that you can download there contains a converted TensorFlow Lite model. For example, the `MobileNet_v1_1.0_224.tgz` file contains a `mobilenet_v1_1.0_224.tflite` file that you can use directly on mobile. If you use such a prebuilt TensorFlow Lite model, you can skip steps 2 and 3. -2. 构建 TensorFlow Lite 转换器工具。 如果您从 [https://github.com/tensorflow/tensorflow/releases](https://github.com/tensorflow/tensorflow/releases) 下载 TensorFlow 1.5 或 1.6 版本,则可以从 TensorFlow 源根目录在终端上运行`bazel build tensorflow/contrib/lite/toco:toco`。 如果您使用更高版本或获取最新的 TensorFlow 仓库,您应该可以使用此`build`命令来执行此操作,但如果没有,请查看该新版本的文档。 +2. 构建 TensorFlow Lite 转换器工具。 如果您从[这里](https://github.com/tensorflow/tensorflow/releases)下载 TensorFlow 1.5 或 1.6 版本,则可以从 TensorFlow 源根目录在终端上运行`bazel build tensorflow/contrib/lite/toco:toco`。 如果您使用更高版本或获取最新的 TensorFlow 仓库,您应该可以使用此`build`命令来执行此操作,但如果没有,请查看该新版本的文档。 3. 使用 TensorFlow Lite 转换器工具将 TensorFlow 模型转换为 TensorFlow Lite 模型。 在下一节中,您将看到一个详细的示例。 4. 在 iOS 或 Android 上部署 TensorFlow Lite 模型-对于 iOS,使用 C ++ API 加载和运行模型; 对于 Android,请使用 Java API(围绕 C ++ API 的包装器)加载和运行模型。 与我们之前在 TensorFlow Mobile 项目中使用的`Session`类不同,C ++和 Java API 均使用 TensorFlow-lite 特定的`Interpreter`类来推断模型。 在接下来的两个部分中,我们将向您展示 iOS C ++代码和 Android Java 代码以使用`Interpreter`。 @@ -58,7 +58,7 @@ If you run a TensorFlow Lite model on Android, and if the Android device is Andr -有两个用于 iOS 的 TensorFlow Lite 示例应用程序,名为[simple and camera]的,类似于 TensorFlow Mobile iOS 应用程序 simple 和 camera,但在 TensorFlow 1.5-1.8 的官方版本中的 TensorFlow Lite API 中实现 [https://github.com/tensorflow/tensorflow/releases](https://github.com/tensorflow/tensorflow/releases) ,并且可能也在最新的 TensorFlow 仓库中。 您可以运行以下命令来准备和运行这两个应用,类似地在[的“ iOS 演示应用”下进行了记录:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite) : +有两个用于 iOS 的 TensorFlow Lite 示例应用程序,名为[simple and camera]的,类似于 TensorFlow Mobile iOS 应用程序 simple 和 camera,[但在 TensorFlow 1.5-1.8 的官方版本中的 TensorFlow Lite API 中实现](https://github.com/tensorflow/tensorflow/releases),并且可能也在最新的 TensorFlow 仓库中。 您可以运行以下命令来准备和运行这两个应用,类似地在[“iOS 演示应用”](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite)下进行了记录: ```py cd tensorflow/contrib/lite/examples/ios @@ -213,7 +213,7 @@ bazel-bin/tensorflow/contrib/lite/toco/toco \ --output_array=final_result --input_shape=1,224,224,3 ``` -我们必须使用`--input_array`和`--output_array`指定输入节点名称和输出节点名称。 有关转换器工具的详细命令行参数,请参阅。 [https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/toco/g3doc/cmdline_examples。 md](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/toco/g3doc/cmdline_examples.md) 。 +我们必须使用`--input_array`和`--output_array`指定输入节点名称和输出节点名称。 有关转换器工具的详细命令行参数,请参阅[这里](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/toco/g3doc/cmdline_examples.md)。 添加转换后的`dog_retrained_mobilenet10_224_not_quantized.tflite` TensorFlow Lite 模型文件,以及相同的`dog_retrained_labels.txt` 标签文件 `HelloTensorFlow`到 Xcode 项目,只需将步骤 4 中的行从 `NSString* graph = @"mobilenet_v1_1.0_224";` 更改为 `NSString* graph = @"dog_retrained_mobilenet10_224_not_quantized";` 和 `const int output_size = 1000;` 更改为 `const int output_size = 121;` (回想一下 MobileNet 模型对 1,000 个对象进行分类,而我们的训练后的狗模型则对 121 个犬种进行了分类),然后使用 TensorFlow Lite 格式的训练后的模型再次运行该应用。 结果将大致相同。 @@ -290,7 +290,7 @@ bazel-bin/tensorflow/contrib/lite/toco/toco \ -为简单起见,我们将仅演示如何在新的 Android 应用程序中将 TensorFlow Lite 与预构建的 TensorFlow Lite MobileNet 模型一起添加,并在此过程中发现一些有用的技巧。 有一个使用 TensorFlow Lite 的示例 Android 应用程序,您可能希望首先在具有 API 级别的 Android 设备上与 Android Studio 一起运行( [https://www.tensorflow.org/mobile/tflite/demo_android](https://www.tensorflow.org/mobile/tflite/demo_android) ) 在执行以下步骤在新的 Android 应用中使用 TensorFlow Lite 之前,至少需要 15 个(版本至少为 4.0.3)。 如果您成功构建并运行了演示应用程序,则在 Android 设备上移动时,应该能够通过设备摄像头和 TensorFlow Lite MobileNet 模型看到识别出的对象。 +为简单起见,我们将仅演示如何在新的 Android 应用程序中将 TensorFlow Lite 与预构建的 TensorFlow Lite MobileNet 模型一起添加,并在此过程中发现一些有用的技巧。 有一个使用 TensorFlow Lite 的示例 Android 应用程序,[您可能希望首先在具有 API 级别的 Android 设备上与 Android Studio 一起运行](https://www.tensorflow.org/mobile/tflite/demo_android)。在执行以下步骤在新的 Android 应用中使用 TensorFlow Lite 之前,至少需要 15 个(版本至少为 4.0.3)。 如果您成功构建并运行了演示应用程序,则在 Android 设备上移动时,应该能够通过设备摄像头和 TensorFlow Lite MobileNet 模型看到识别出的对象。 现在执行以下步骤来创建一个新的 Android 应用程序,并添加 TensorFlow Lite 支持以对图像进行分类,就像我们在[第 2 章](../Text/02.html)和*通过转印学习*对图像进行分类中的 HelloTensorFlow Android 应用程序一样。 ]: @@ -409,13 +409,13 @@ private MappedByteBuffer loadModelFile(Activity activity) throws IOException { -苹果的 Core ML 框架( [https://developer.apple.com/documentation/coreml](https://developer.apple.com/documentation/coreml) )使 iOS 开发人员可以轻松地在运行 iOS 11 或更高版本的 iOS 应用中使用经过训练的机器学习模型,并构建 Xcode 9 或更高版本。 您可以下载并使用 Apple 已在 [https://developer.apple.com/machine-learning](https://developer.apple.com/machine-learning) 提供的 Core ML 格式的经过预先训练的模型,也可以使用称为 coremltools 的 Python 工具 [https://apple.github.io/coremltools](https://apple.github.io/coremltools) 上的 Core ML 社区工具可将其他机器学习和深度学习模型转换为 Core ML 格式。 +苹果的 [Core ML 框架](https://developer.apple.com/documentation/coreml)使 iOS 开发人员可以轻松地在运行 iOS 11 或更高版本的 iOS 应用中使用经过训练的机器学习模型,并构建 Xcode 9 或更高版本。 您可以下载并使用 Apple 已在[这里](https://developer.apple.com/machine-learning)提供的 Core ML 格式的经过预先训练的模型,也可以使用称为 coremltools 的 Python 工具,[Core ML 社区工具](https://apple.github.io/coremltools)来将其他机器学习和深度学习模型转换为 Core ML 格式。 -Core ML 格式的预训练模型包括流行的 MobileNet 和 Inception V3 模型,以及更新的 ResNet50 模型(我们在[第 10 章](../Text/10.html)和*中简要讨论了残留网络) 就像手机游戏应用*一样)。 可以转换为 Core ML 格式的模型包括使用 Caffe 或 Keras 构建的深度学习模型,以及传统的机器学习模型,例如线性回归,支持向量机和通过 Scikit Learn 构建的决策树( [http:// /scikit-learn.org](http://scikit-learn.org) ),这是一个非常流行的 Python 机器学习库。 +Core ML 格式的预训练模型包括流行的 MobileNet 和 Inception V3 模型,以及更新的 ResNet50 模型(我们在[第 10 章](../Text/10.html)和*中简要讨论了残留网络) 就像手机游戏应用*一样)。 可以转换为 Core ML 格式的模型包括使用 Caffe 或 Keras 构建的深度学习模型,以及传统的机器学习模型,例如线性回归,支持向量机和通过 [Scikit Learn](http://scikit-learn.org) 构建的决策树,这是一个非常流行的 Python 机器学习库。 因此,如果您想在 iOS 中使用传统的机器学习模型,那么 Scikit Learn 和 Core ML 绝对是必经之路。 尽管这是一本有关移动 TensorFlow 的书,但构建智能应用程序有时不需要深度学习。 在某些用例中,经典机器学习完全有意义。 此外,Core ML 对 Scikit Learn 模型的支持是如此流畅,以至于我们不能拒绝快速浏览,因此您将在必要时知道何时短暂使用移动 TensorFlow 技能。 -如果要使用 Apple 预先训练的 MobileNet Core ML 模型,请在 [https:// developer 上查看 Apple 不错的示例代码项目*使用 Vision 和 Core ML* 对图像进行分类。 apple.com/documentation/vision/classifying_images_with_vision_and_core_ml](https://developer.apple.com/documentation/vision/classifying_images_with_vision_and_core_ml) ,还观看 [https://developer.apple.com/machine-learning](https://developer.apple.com/machine-learning) 上列出的有关核心 ML 的 WWDC 2017 视频。 +如果要使用 Apple 预先训练的 MobileNet Core ML 模型,请在[这个页面](https://developer.apple.com/documentation/vision/classifying_images_with_vision_and_core_ml)上查看 Apple 不错的示例代码项目,它使用 Vision 和 Core ML 对图像进行分类,还观看[这个页面](https://developer.apple.com/machine-learning)上列出的有关核心 ML 的 WWDC 2017 视频。 在接下来的两个部分中,我们将向您展示两个教程,该教程以 TensorFlow 为后端,在 Keras 中如何转换和使用 Scikit Learn 模型和股票预测 RNN 模型,它们是在[第 8 章](../Text/08.html), *使用 RNN* 预测股票价格。 您将在 Objective-C 和 Swift 中看到使用源代码从头开始构建的完整 iOS 应用程序,以使用转换后的 Core ML 模型。 如果短语“从头开始”使您兴奋并使您想起 AlphaZero,则您可能喜欢上一章[第 10 章](../Text/10.html)和*构建类似 AlphaZero 的移动游戏应用程序*。 @@ -437,7 +437,7 @@ Core ML 格式的预训练模型包括流行的 MobileNet 和 Inception V3 模 -首先,让我们获取房价数据集,该数据集可从 [https://wiki.csc.calpoly.edu/datasets/wiki/Houses](http://wiki.csc.calpoly.edu/datasets/attachment/wiki/Houses/RealEstate.csv?format=raw) 下载。 下载的 `RealEstate.csv`文件如下所示: +首先,让我们获取房价数据集,该数据集可从[这里](http://wiki.csc.calpoly.edu/datasets/attachment/wiki/Houses/RealEstate.csv?format=raw)下载。 下载的 `RealEstate.csv`文件如下所示: ```py MLS,Location,Price,Bedrooms,Bathrooms,Size,Price/SQ.Ft,Status @@ -447,7 +447,7 @@ MLS,Location,Price,Bedrooms,Bathrooms,Size,Price/SQ.Ft,Status ... ``` -我们将使用流行的开源 Python 数据分析库 Pandas( [https://pandas.pydata.org](https://pandas.pydata.org) )来解析 csv 文件。 要安装 Scikit Learn 和 Pandas,只需运行以下命令,最好从您之前创建的 TensorFlow 和 Keras 虚拟环境中运行以下命令: +我们将使用流行的开源 Python 数据分析库 [Pandas](https://pandas.pydata.org) 来解析 csv 文件。 要安装 Scikit Learn 和 Pandas,只需运行以下命令,最好从您之前创建的 TensorFlow 和 Keras 虚拟环境中运行以下命令: ```py pip install scikit-learn @@ -498,7 +498,7 @@ print(svm.predict(X_new)) 这将使用支持向量机模型作为`[298014.41462535 320991.94354092 404822.78465954]`输出预测的房价。 我们不会讨论哪种模型更好,如何使线性回归或支持向量机模型更好地工作,或者如何在 Scikit Learn 支持的所有算法中选择更好的模型-有很多不错的书籍和在线资源介绍了这些内容。 话题。 -要将两个 Scikit Learn 模型`lr`和`svm`转换为可在您的 iOS 应用中使用的 Core ML 格式,您需要首先安装 Core ML 工具( [https://github.com / apple / coremltools](https://github.com/apple/coremltools) )。 我们建议您在我们在[第 8 章](../Text/08.html),*用 RNN* 预测股价和[第 10 章](../Text/10.html)预测并创建的 TensorFlow 和 Keras 虚拟环境中使用`pip install -U coremltools`安装这些软件 ],*构建支持 AlphaZero 的手机游戏应用程序*,因为我们还将在下一部分中使用它来转换 Keras 模型。 +要将两个 Scikit Learn 模型`lr`和`svm`转换为可在您的 iOS 应用中使用的 Core ML 格式,您需要首先安装 [Core ML 工具](https://github.com/apple/coremltools)。 我们建议您在我们在[第 8 章](../Text/08.html),*用 RNN* 预测股价和[第 10 章](../Text/10.html)预测并创建的 TensorFlow 和 Keras 虚拟环境中使用`pip install -U coremltools`安装这些软件 ],*构建支持 AlphaZero 的手机游戏应用程序*,因为我们还将在下一部分中使用它来转换 Keras 模型。 现在,只需运行以下代码即可将两个 Scikit Learn 模型转换为 Core ML 格式: @@ -511,7 +511,7 @@ coreml_model = coremltools.converters.sklearn.convert(svm, ["Bedrooms", "Bathroo coreml_model.save("HouseSVM.mlmodel") ``` -有关转换器工具的更多详细信息,请参见其在线文档,网址为 [https://apple.github.io/coremltools/coremltools.converters.html](https://apple.github.io/coremltools/coremltools.converters.html) 。 现在,我们可以将这两个模型添加到 Objective-C 或 Swift iOS 应用程序中,但是我们仅在此处显示 Swift 示例。 您将在下一节中看到使用从 Keras 和 TensorFlow 模型转换而来的股票预测 Core ML 模型得到的 Objective-C 和 Swift 示例。 +有关转换器工具的更多详细信息,请参见其[在线文档](https://apple.github.io/coremltools/coremltools.converters.html)。 现在,我们可以将这两个模型添加到 Objective-C 或 Swift iOS 应用程序中,但是我们仅在此处显示 Swift 示例。 您将在下一节中看到使用从 Keras 和 TensorFlow 模型转换而来的股票预测 Core ML 模型得到的 Objective-C 和 Swift 示例。 @@ -567,7 +567,7 @@ override func viewDidLoad() { -coremltools 工具还正式支持转换使用 Keras 构建的模型(请参见 [https://apple.github.io/coremltools/coremltools.converters.html](https://apple.github.io/coremltools/coremltools.converters.html) 上的 keras.convert 链接)。 截至 2018 年 3 月,最新版本的 coremltools 0.8 的版本可与 TensorFlow 1.4 和 Keras 2.1.5 配合使用,我们在[第 8 章](../Text/08.html)和*预测中使用了 Keras 股票预测模型 RNN* 的股票价格。 您可以使用两种方法使用 coremltools 生成模型的 Core ML 格式。 首先是在训练模型后,直接在 Python Keras 代码中调用 coremltools 的`convert`和`save`方法。 例如,将下面的最后三行代码添加到`model.fit`之后的`ch8/python/keras/train.py`文件中: +coremltools 工具还正式支持转换使用 Keras 构建的模型(请参见[`keras.convert`链接](https://apple.github.io/coremltools/coremltools.converters.html))。 截至 2018 年 3 月,最新版本的 coremltools 0.8 的版本可与 TensorFlow 1.4 和 Keras 2.1.5 配合使用,我们在[第 8 章](../Text/08.html)和*预测中使用了 Keras 股票预测模型 RNN* 的股票价格。 您可以使用两种方法使用 coremltools 生成模型的 Core ML 格式。 首先是在训练模型后,直接在 Python Keras 代码中调用 coremltools 的`convert`和`save`方法。 例如,将下面的最后三行代码添加到`model.fit`之后的`ch8/python/keras/train.py`文件中: ```py model.fit( @@ -694,7 +694,7 @@ class ViewController: UIViewController { 请注意,就像使用 TensorFlow Mobile iOS 应用程序一样,我们使用`bidirectional_1_input`和`activation_1_Identity`来设置输入并获取输出。 -如果尝试转换在[第 10 章](../Text/10.html),*构建类似 AlphaZero 的移动游戏应用程序*中在 Keras 中构建和训练的 AlphaZero 模型,则会收到错误消息`ValueError: Unknown loss function:softmax_cross_entropy_with_logits`。 如果您尝试转换我们在本书中构建的其他 TensorFlow 模型,则可以使用的最佳非官方工具是`https://github.com/tf-coreml/tf-coreml`上的 TensorFlow 到核心 ML 转换器。 不幸的是,类似于 TensorFlow Lite,它仅支持有限的 TensorFlow 操作集,其中一些原因是 Core ML 的限制,另一些原因是 tf-coreml 转换器的限制。 我们不会详细介绍将 TensorFlow 模型转换为 Core ML 模型的细节。 但是至少您已经了解了如何转换和使用 Scikit Learn 构建的传统机器学习模型以及基于 Keras 的 RNN 模型,该模型有望为您提供构建和使用 Core ML 模型的良好基础。 当然,如果您喜欢 Core ML,则应留意其将来的改进版本,以及 coremltools 和 tf-coreml 转换器的将来版本。 关于 Core ML,我们还没有涉及很多内容-要了解其确切功能,请参阅 [https://developer.apple.com/documentation/coreml/core_ml_api](https://developer.apple.com/documentation/coreml/core_ml_api) 上完整的 API 文档。 +如果尝试转换在[第 10 章](../Text/10.html),*构建类似 AlphaZero 的移动游戏应用程序*中在 Keras 中构建和训练的 AlphaZero 模型,则会收到错误消息`ValueError: Unknown loss function:softmax_cross_entropy_with_logits`。 如果您尝试转换我们在本书中构建的其他 TensorFlow 模型,则可以使用的最佳非官方工具是`https://github.com/tf-coreml/tf-coreml`上的 TensorFlow 到核心 ML 转换器。 不幸的是,类似于 TensorFlow Lite,它仅支持有限的 TensorFlow 操作集,其中一些原因是 Core ML 的限制,另一些原因是 tf-coreml 转换器的限制。 我们不会详细介绍将 TensorFlow 模型转换为 Core ML 模型的细节。 但是至少您已经了解了如何转换和使用 Scikit Learn 构建的传统机器学习模型以及基于 Keras 的 RNN 模型,该模型有望为您提供构建和使用 Core ML 模型的良好基础。 当然,如果您喜欢 Core ML,则应留意其将来的改进版本,以及 coremltools 和 tf-coreml 转换器的将来版本。 关于 Core ML,我们还没有涉及很多内容-要了解其确切功能,请参阅[完整的 API 文档](https://developer.apple.com/documentation/coreml/core_ml_api)。 diff --git a/new/intel-mobi-proj-tf/12.md b/new/intel-mobi-proj-tf/12.md index f74e30f21846cc2e660998b7b0474d365e38b58a..ecdf59c1cfb011282b7b9beb26af0eccb06eb3eb 100644 --- a/new/intel-mobi-proj-tf/12.md +++ b/new/intel-mobi-proj-tf/12.md @@ -4,9 +4,9 @@ -根据 Wikipedia 的说法,“ Raspberry Pi 是 Raspberry Pi 基金会在英国开发的一系列小型单板计算机,旨在促进学校和发展中国家的基础计算机科学教学。” Raspberry Pi 的官方网站( [https://www.raspberrypi.org](https://www.raspberrypi.org) )将其描述为“一种小型且价格合理的计算机,可以用来学习编程。” 如果您以前从未听说过或使用过 Raspberry Pi,请访问其网站,然后您很快就会爱上这个很棒的小东西。 几乎没有什么功能-实际上,TensorFlow 的开发人员从 2016 年中期开始在早期版本的 Raspberry Pi 上提供了 TensorFlow,因此我们可以在微型计算机上运行复杂的 TensorFlow 模型,您只需花费 35 美元即可购买到。 这可能超出了“基础计算机科学的教学”或“学习编程”的范围,但另一方面,如果我们考虑过去几年中移动设备的所有飞速发展,那么看到这一点我们就不会感到惊讶 如何在越来越小的设备中实现越来越多的功能。 +根据 Wikipedia 的说法,“ Raspberry Pi 是 Raspberry Pi 基金会在英国开发的一系列小型单板计算机,旨在促进学校和发展中国家的基础计算机科学教学。” [Raspberry Pi 的官方网站](https://www.raspberrypi.org)将其描述为“一种小型且价格合理的计算机,可以用来学习编程。” 如果您以前从未听说过或使用过 Raspberry Pi,请访问其网站,然后您很快就会爱上这个很棒的小东西。 几乎没有什么功能-实际上,TensorFlow 的开发人员从 2016 年中期开始在早期版本的 Raspberry Pi 上提供了 TensorFlow,因此我们可以在微型计算机上运行复杂的 TensorFlow 模型,您只需花费 35 美元即可购买到。 这可能超出了“基础计算机科学的教学”或“学习编程”的范围,但另一方面,如果我们考虑过去几年中移动设备的所有飞速发展,那么看到这一点我们就不会感到惊讶 如何在越来越小的设备中实现越来越多的功能。 -在本章中,我们将进入 Raspberry Pi 的有趣世界,Raspberry Pi 是 TensorFlow 正式支持的最小设备。 我们将首先介绍如何获取和设置新的 Raspberry Pi 3 B 板,包括本章中使用的所有必要配件,以使其能够看,听和说。 然后,我们将介绍如何使用 GoPiGo 机器人基础套件( [https://www.dexterindustries.com/shop/gopigo3-robot-base-kit](https://www.dexterindustries.com/shop/gopigo3-robot-base-kit) )将 Raspberry Pi 板变成一个机器人 可以移动。 之后,我们将提供最简单的工作步骤,以便在 Raspberry Pi 上设置 TensorFlow 1.6 并构建其示例 Raspberry Pi 应用程序。 我们还将讨论如何集成图像分类,这是我们在[第 2 章](../Text/02.html),*通过转移学习*对图像进行分类时使用的模型,并通过文字转语音功能使机器人告诉我们它可以识别的内容 以及如何集成音频识别,这是我们在[第 5 章](../Text/05.html),*了解简单语音命令*中使用的模型以及 GoPiGo API,可让您使用语音命令来控制机器人的运动 。 +在本章中,我们将进入 Raspberry Pi 的有趣世界,Raspberry Pi 是 TensorFlow 正式支持的最小设备。 我们将首先介绍如何获取和设置新的 Raspberry Pi 3 B 板,包括本章中使用的所有必要配件,以使其能够看,听和说。 然后,我们将介绍如何使用 [GoPiGo 机器人基础套件](https://www.dexterindustries.com/shop/gopigo3-robot-base-kit),将 Raspberry Pi 板变成一个可以移动的机器人。 之后,我们将提供最简单的工作步骤,以便在 Raspberry Pi 上设置 TensorFlow 1.6 并构建其示例 Raspberry Pi 应用程序。 我们还将讨论如何集成图像分类,这是我们在[第 2 章](../Text/02.html),*通过转移学习*对图像进行分类时使用的模型,并通过文字转语音功能使机器人告诉我们它可以识别的内容 以及如何集成音频识别,这是我们在[第 5 章](../Text/05.html),*了解简单语音命令*中使用的模型以及 GoPiGo API,可让您使用语音命令来控制机器人的运动 。 最后,我们将向您展示如何使用 TensorFlow 和 OpenAI Gym,这是一个用于开发和比较强化学习算法的 Python 工具包,如何在模拟环境中实现强大的强化学习算法,以使我们的机器人能够在真实的身体中移动和平衡 环境。 @@ -28,16 +28,16 @@ -小型单板 Raspberry Pi 计算机系列包括 Raspberry Pi 3 B +,3 B,2B,1 B +,1 A +,零和零 W(有关详细信息,请参见 [https:// /www.raspberrypi.org/products/#buy-now-modal](https://www.raspberrypi.org/products/#buy-now-modal) )。 我们将在此处使用 Pi 3 B 主板,您可以从前面的链接或在 Amazon( [https://www.amazon.com/gp/product/B01CD5VC92](https://www.amazon.com/gp/product/B01CD5VC92) )上以$ 35 的价格购买。 我们在主板上使用并测试过的配件及其价格如下: +小型单板 Raspberry Pi 计算机系列包括 Raspberry Pi 3B+,3B,2B,1B+,1A+,0 和 0W(有关详细信息,请参见[这里](https://www.raspberrypi.org/products/#buy-now-modal))。 我们将在此处使用 Pi 3B 主板,您可以从前面的链接或在 [Amazon](https://www.amazon.com/gp/product/B01CD5VC92) 上以 35 美元的价格购买。 我们在主板上使用并测试过的配件及其价格如下: -* CanaKit 5V 2.5A Raspberry Pi 电源约 10 美元( [https://www.amazon.com/gp/product/B00MARDJZ4](https://www.amazon.com/gp/product/B00MARDJZ4) ),可在开发期间使用。 -* Kinobo-大约 4 美元的( [https://www.amazon.com/gp/product/B00IR8R7WQ](https://www.amazon.com/gp/product/B00IR8R7WQ) )可以记录您的语音命令的 USB 2.0 微型麦克风。 -* USHONK USB 微型扬声器约合 12 美元( [https://www.amazon.com/gp/product/B075M7FHM1](https://www.amazon.com/gp/product/B075M7FHM1) ),可以播放合成声音。 -* Arducam 5 Megapixels 1080p 传感器 OV5647 微型相机约合$ 14 ( [https://www.amazon.com/gp/product/B012V1HEP4](https://www.amazon.com/gp/product/B012V1HEP4) ),以支持图像分类。 +* [CanaKit 5V 2.5A Raspberry Pi 电源](https://www.amazon.com/gp/product/B00MARDJZ4)约 10 美元,可在开发期间使用。 +* [Kinobo](https://www.amazon.com/gp/product/B00IR8R7WQ) - 大约 4 美元的可以记录您的语音命令的 USB 2.0 微型麦克风。 +* [USHONK USB 微型扬声器](https://www.amazon.com/gp/product/B075M7FHM1)约合 12 美元,可以播放合成声音。 +* [Arducam 5 Megapixels 1080p 传感器 OV5647 微型相机](https://www.amazon.com/gp/product/B012V1HEP4)约合 14 美元,以支持图像分类。 -* 16 GB MicroSD 和适配器,价格约为 10 美元( [https://www.amazon.com/gp/product/B00TDBLTWK](https://www.amazon.com/gp/product/B00TDBLTWK) ),用于存储 Raspbian(Raspberry Pi 的官方操作系统)的安装文件,并用作 安装后的硬盘驱动器。 -* 一个 USB 磁盘,例如 SanDisk 32GB USB Drive,售价 9 美元( [https://www.amazon.com/gp/product/B008AF380Q](https://www.amazon.com/gp/product/B008AF380Q) ),将用作交换分区(有关详细信息,请参阅下一节) 因此我们可以手动构建 TensorFlow 库,这是构建和运行 TensorFlow C ++代码所必需的。 -* 售价 110 美元的 GoPiGo 机器人基础套件( [https://www.amazon.com/gp/product/B00NYB3J0A](https://www.amazon.com/gp/product/B00NYB3J0A) 或官方网站 [https://www.dexterindustries.com/shop](https://www.dexterindustries.com/shop) ),将 Raspberry Pi 板变成可以移动的机器人。 +* [16 GB MicroSD 和适配器](https://www.amazon.com/gp/product/B00TDBLTWK),价格约为 10 美元,用于存储 Raspbian(Raspberry Pi 的官方操作系统)的安装文件,并用作 安装后的硬盘驱动器。 +* 一个 USB 磁盘,例如 [SanDisk 32GB USB Drive](https://www.amazon.com/gp/product/B008AF380Q),售价 9 美元,将用作交换分区(有关详细信息,请参阅下一节) 因此我们可以手动构建 TensorFlow 库,这是构建和运行 TensorFlow C ++代码所必需的。 +* 售价 110 美元的 [GoPiGo 机器人基础套件](https://www.amazon.com/gp/product/B00NYB3J0A)或[官方网站](https://www.dexterindustries.com/shop),将 Raspberry Pi 板变成可以移动的机器人。 您还需要 HDMI 电缆将 Raspberry Pi 板连接到计算机显示器,USB 键盘和 USB 鼠标。 总共要花 200 美元,包括 110 美元的 GoPiGo,来构建一个可以移动,看,听,说的 Raspberry Pi 机器人。 尽管与功能强大的 Raspberry Pi 计算机相比,GoPiGo 套件似乎有点昂贵,但是如果没有它,那么一动不动的 Raspberry Pi 可能会失去很多吸引力。 @@ -53,12 +53,12 @@ There's an older blog, *How to build a robot that “sees” with $100 and Tenso -最简单的方法是遵循 Raspbian 软件安装指南,网址为 [https://www.raspberrypi.org/learning/software-guide/quickstart](https://www.raspberrypi.org/learning/software-guide/quickstart) ,总而言之,这是一个简单的三步过程: +最简单的方法是遵循 [Raspbian 软件安装指南](https://www.raspberrypi.org/learning/software-guide/quickstart),总而言之,这是一个简单的三步过程: -1. 为 Windows 或 Mac 下载并安装 SD 格式化程序( [https://www.sdcard.org/downloads/formatter_4/index.html](https://www.sdcard.org/downloads/formatter_4/index.html) )。 +1. 为 Windows 或 Mac 下载并安装 [SD 格式化程序](https://www.sdcard.org/downloads/formatter_4/index.html)。 2. 使用 SD 格式化程序格式化 MicroSD 卡。 -3. 在 [https://www.raspberrypi.org/downloads/noobs](https://www.raspberrypi.org/downloads/noobs) 上下载 Raspbian 的官方简易安装程序 New Out Of Box Software(NOOBS)的离线 ZIP 版本,将其解压缩,然后拖动并 将提取的`NOOBS`文件夹中的所有文件拖放到格式化的 MicroSD 卡中。 +3. 在[这个页面](https://www.raspberrypi.org/downloads/noobs)上下载 Raspbian 的官方简易安装程序 New Out Of Box Software(NOOBS)的离线 ZIP 版本,将其解压缩,然后拖动并 将提取的`NOOBS`文件夹中的所有文件拖放到格式化的 MicroSD 卡中。 现在弹出 MicroSD 卡并将其插入 Raspberry Pi 板上。 将显示器的 HDMI 电缆以及 USB 键盘和鼠标连接到开发板上。 用电源为开发板供电,然后按照屏幕上的步骤完成 Raspbian 的安装,包括设置 Wifi 网络。 整个安装过程不到一个小时即可完成。 完成后,您可以打开一个终端并输入`ifconfig`来查找电路板的 IP 地址,然后从您的计算中使用`ssh pi@`来访问它,正如我们稍后将要看到的,这确实很方便并且需要 在移动中测试控制 Raspberry Pi 机器人-当移动时,您不想或不能将键盘,鼠标和显示器与板子一起使用。 @@ -148,13 +148,13 @@ Occasionally, after the Pi board reboots, the card number for the USB speaker ge -GoPiGo 是一个流行的工具包,可将您的 Raspberry Pi 板变成移动的机器人。 购买并收到我们之前提到的 GoPiGo 机器人基础套件后,请按照 [https://www.dexterindustries.com/GoPiGo/get-started-with-the-gopigo3-raspberry- pi-robot / 1-assemble-gopigo3](https://www.dexterindustries.com/GoPiGo/get-started-with-the-gopigo3-raspberry-pi-robot/1-assemble-gopigo3) 将其与您的 Pi 板组装在一起。 根据您是同时观看 March March Madness 还是 NBA 季后赛比赛,这大约需要一两个小时。 +GoPiGo 是一个流行的工具包,可将您的 Raspberry Pi 板变成移动的机器人。 购买并收到我们之前提到的 GoPiGo 机器人基础套件后,请按照[这里](https://www.dexterindustries.com/GoPiGo/get-started-with-the-gopigo3-raspberry-pi-robot/1-assemble-gopigo3)将其与您的 Pi 板组装在一起。 根据您是同时观看 March March Madness 还是 NBA 季后赛比赛,这大约需要一两个小时。 完成后,您的 Raspberry Pi 机器人以及我们之前列出的所有附件应如下所示: ![](img/a745c220-8c27-4b70-bef4-bc8dcbc518d8.png)Figure 12\. 1 Raspberry Pi robot with GoPiGo Kit and camera, USB speaker, and USB microphone -现在,使用 Raspberry Pi 电源打开 Pi 机器人,并在启动后使用`ssh pi@`连接到它。 要安装 GoPiGo Python 库,以便我们可以使用 GoPiGo 的 Python API( [http://gopigo3.readthedocs.io/en/master/api-basic.html](http://gopigo3.readthedocs.io/en/master/api-basic.html) )控制机器人,请运行以下命令 ,它将执行一个 shell 脚本,该脚本创建一个新的`/home/pi/Dexter`目录并在其中安装所有库和固件文件: +现在,使用 Raspberry Pi 电源打开 Pi 机器人,并在启动后使用`ssh pi@`连接到它。 要安装 GoPiGo Python 库,以便我们可以使用 [GoPiGo 的 Python API](http://gopigo3.readthedocs.io/en/master/api-basic.html) 控制机器人,请运行以下命令 ,它将执行一个 shell 脚本,该脚本创建一个新的`/home/pi/Dexter`目录并在其中安装所有库和固件文件: ```py sudo sh -c "curl -kL dexterindustries.com/update_gopigo3 | bash" @@ -190,7 +190,7 @@ gpg3_obj.drive_cm(5, False) gpg3_obj.turn_degrees(30, False) ``` -您还可以使用`forward`,`backward`和许多其他 API 调用(如 [http://gopigo3.readthedocs.io/en/master/api-basic.html](http://gopigo3.readthedocs.io/en/master/api-basic.html) 中所述)来控制 机器人的运动,但是在本章中,我们仅使用`drive_cm`和`turn_degrees`。 +您还可以使用`forward`,`backward`和[许多其他 API 调用](http://gopigo3.readthedocs.io/en/master/api-basic.html)来控制机器人的运动,但是在本章中,我们仅使用`drive_cm`和`turn_degrees`。 我们现在准备使用 TensorFlow 向机器人添加更多智能。 @@ -202,15 +202,15 @@ gpg3_obj.turn_degrees(30, False) -要在 Python 中使用 TensorFlow,就像我们稍后在*音频识别*和*强化学习*部分中所做的那样,我们可以在 TensorFlow Jenkins 持续集成站点上为 Pi 安装每晚 TensorFlow 1.6 版本 ( [http://ci.tensorflow.org/view/Nightly/job/nightly-pi/223/artifact/output-artifacts](http://ci.tensorflow.org/view/Nightly/job/nightly-pi/223/artifact/output-artifacts) ): +要在 Python 中使用 TensorFlow,就像我们稍后在*音频识别*和*强化学习*部分中所做的那样,我们可以在 TensorFlow Jenkins 持续集成站点上为 Pi 安装[每晚 TensorFlow 1.6 版本](http://ci.tensorflow.org/view/Nightly/job/nightly-pi/223/artifact/output-artifacts): ```py sudo pip install http://ci.tensorflow.org/view/Nightly/job/nightly-pi/lastSuccessfulBuild/artifact/output-artifacts/tensorflow-1.6.0-cp27-none-any.whl ``` -此方法更为常见,并在一个不错的博客条目*中为 Raspberry Pi 交叉编译 TensorFlow* ( [https://petewarden.com/2017/08/20/cross-compiling](https://petewarden.com/2017/08/20/cross-compiling-tensorflow-for-the-raspberry-pi) ,,作者是 *Pete Warden* 。 +此方法更为常见,并在一个不错的博客条目中描述,[《为 Raspberry Pi 交叉编译 TensorFlow》](https://petewarden.com/2017/08/20/cross-compiling-tensorflow-for-the-raspberry-pi),作者是 *Pete Warden*。 -一种更复杂的方法是使用`makefile`,这在您需要构建和使用 TensorFlow 库时是必需的。 TensorFlow 官方 makefile 文档( [https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/makefile](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/makefile) )的 Raspberry Pi 部分包含构建 TensorFlow 库的详细步骤,但是它 可能不适用于每个版本的 TensorFlow。 此处的步骤与 TensorFlow 的早期版本(0.10)完美配合,但是在 TensorFlow 1.6 中会导致许多“未定义对`google::protobuf`的引用”错误。 +一种更复杂的方法是使用`makefile`,这在您需要构建和使用 TensorFlow 库时是必需的。 [TensorFlow 官方 makefile 文档](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/makefile)的 Raspberry Pi 部分包含构建 TensorFlow 库的详细步骤,但是它 可能不适用于每个版本的 TensorFlow。 此处的步骤与 TensorFlow 的早期版本(0.10)完美配合,但是在 TensorFlow 1.6 中会导致许多“未定义对`google::protobuf`的引用”错误。 TensorFlow 1.6 版本已经测试了以下步骤,可从[下载 https://github.com/tensorflow/tensorflow/releases/tag/v1.6.0](https://github.com/tensorflow/tensorflow/releases/tag/v1.6.0) ; 您当然可以在 TensorFlow 发行页面中尝试使用较新的版本,或者通过`git clone https://github.com/tensorflow/tensorflow`克隆最新的 TensorFlow 源,并修复所有可能的问题。