From 17855c3408bdc6c8786b06e12be4fa37eca6b42e Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Wed, 23 Dec 2020 23:25:27 +0800 Subject: [PATCH] 2020-12-23 23:25:27 --- new/begin-app-dev-tf-keras/2.md | 2 +- new/begin-app-dev-tf-keras/4.md | 16 ++++++++-------- new/handson-dl-img-tf/1.md | 6 +++--- new/handson-rl-py/00.md | 2 +- new/handson-rl-py/02.md | 4 ++-- new/intel-proj-py/00.md | 2 +- new/intel-proj-py/04.md | 2 +- new/whats-new-tf2/0.md | 10 +++++----- new/whats-new-tf2/1.md | 14 +++++++------- new/whats-new-tf2/2.md | 18 +++++++++--------- new/whats-new-tf2/3.md | 22 +++++++++++----------- new/whats-new-tf2/4.md | 14 +++++++------- new/whats-new-tf2/5.md | 6 +++--- 13 files changed, 59 insertions(+), 59 deletions(-) diff --git a/new/begin-app-dev-tf-keras/2.md b/new/begin-app-dev-tf-keras/2.md index e229e4b2..19c66d0b 100644 --- a/new/begin-app-dev-tf-keras/2.md +++ b/new/begin-app-dev-tf-keras/2.md @@ -203,7 +203,7 @@ $ jupyter notebook ![Activity 3 – Exploring the Bitcoin Dataset and Preparing Data for Model](img/image02_18.jpg) -图 6:启动 Jupyter 笔记本实例后的终端映像。 导航到浏览器中显示的 URL,您应该能够看到 Jupyter 笔记本登陆页面。 +图 6:启动 Jupyter 笔记本实例后的终端镜像。 导航到浏览器中显示的 URL,您应该能够看到 Jupyter 笔记本登陆页面。 现在,导航至目录,然后单击文件`Activity_3_Exploring_Bitcoin_Dataset.ipynb`。 这是一个 Jupyter 笔记本文件,将在新的浏览器选项卡中打开。 该应用程序将自动为您启动一个新的 Python 交互式会话。 diff --git a/new/begin-app-dev-tf-keras/4.md b/new/begin-app-dev-tf-keras/4.md index 7ff6303e..8135eb00 100644 --- a/new/begin-app-dev-tf-keras/4.md +++ b/new/begin-app-dev-tf-keras/4.md @@ -304,9 +304,9 @@ M.train(model_data[i*7:7*(40 + i) + 7]) ###### 部署和使用加密 -`cryptonic`是作为 Docker 化应用程序开发的。 用 Docker 术语来说,意味着可以将应用程序构建为 Docker 映像,然后在开发或生产环境中将其部署为 Docker 容器。 +`cryptonic`是作为 Docker 化应用程序开发的。 用 Docker 术语来说,意味着可以将应用程序构建为 Docker 镜像,然后在开发或生产环境中将其部署为 Docker 容器。 -Docker 使用名为`Dockerfile`的文件来描述如何构建映像的规则以及将该映像作为容器部署时会发生什么。 以下代码提供了 Cryptonic 的 Dockerfile: +Docker 使用名为`Dockerfile`的文件来描述如何构建镜像的规则以及将该镜像作为容器部署时会发生什么。 以下代码提供了 Cryptonic 的 Dockerfile: ```py FROM python:3.6 @@ -317,17 +317,17 @@ Docker 使用名为`Dockerfile`的文件来描述如何构建映像的规则以 CMD ["python", "run.py"] ``` -> “代码段 7”:用于在本地构建 Docker 映像的 Docker 命令 +> “代码段 7”:用于在本地构建 Docker 镜像的 Docker 命令 -可以使用 Dockerfile 通过以下命令构建 Docker 映像: +可以使用 Dockerfile 通过以下命令构建 Docker 镜像: ```py $ docker build --tag cryptonic:latest ``` -此命令将使映像`cryptonic:latest`可以部署为容器。 可以在生产服务器上重复构建过程,也可以直接部署映像,然后将其作为容器运行。 +此命令将使镜像`cryptonic:latest`可以部署为容器。 可以在生产服务器上重复构建过程,也可以直接部署镜像,然后将其作为容器运行。 -生成映像并可用后,可以使用命令`docker run`运行加密应用程序,如以下代码所示: +生成镜像并可用后,可以使用命令`docker run`运行加密应用程序,如以下代码所示: ```py $ docker run --publish 5000:5000 \ @@ -414,14 +414,14 @@ $ docker-compose up -d 可以从[以下网站](https://www.docker.com/)下载上述两个组件并将其安装在所有主要系统中。 这些对于完成此活动至关重要。 继续前进之前,请确保这些在系统中可用。 -1. 在您的终端上,浏览至加密目录并为所有必需的组件构建 docker 映像: +1. 在您的终端上,浏览至加密目录并为所有必需的组件构建 docker 镜像: ```py $ docker build --tag cryptonic:latest . $ docker build --tag cryptonic-cache:latest ./ cryptonic-cache/ ``` -2. 这两个命令构建了我们将在此应用程序中使用的两个映像:密码(包含 Flask 应用程序)和密码缓存(包含 Redis 缓存)。 +2. 这两个命令构建了我们将在此应用程序中使用的两个镜像:密码(包含 Flask 应用程序)和密码缓存(包含 Redis 缓存)。 3. 生成图像后,识别`docker-compose.yml`文件并在文本编辑器中将其打开。 将参数`BITCOIN_START_DATE` 更改为 2017 年 1 月 1 日以外的日期: ```py diff --git a/new/handson-dl-img-tf/1.md b/new/handson-dl-img-tf/1.md index 39d26f44..f9fc6882 100644 --- a/new/handson-dl-img-tf/1.md +++ b/new/handson-dl-img-tf/1.md @@ -41,7 +41,7 @@ GPU 状态 # 机器学习 Docker 文件 -现在,让我们开始准备准备机器学习的 Docker 文件。 在本节中,我们将研究克隆源文件,Docker 所需的基本映像,安装其他必需的软件包,公开一个卷以便您可以共享您的工作以及公开端口以便您能够 看 Jupyter 笔记本,这是我们将用来探索机器学习的工具。 +现在,让我们开始准备准备机器学习的 Docker 文件。 在本节中,我们将研究克隆源文件,Docker 所需的基本镜像,安装其他必需的软件包,公开一个卷以便您可以共享您的工作以及公开端口以便您能够 看 Jupyter 笔记本,这是我们将用来探索机器学习的工具。 现在,您需要获取这些部分附带的源代码。 前往[这里](https://github.com/wballard/kerasvideo/tree/2018),您可以在其中快速克隆存储库。 在这里,我们只是使用 GitHub for Windows 作为一种相对快速的方法来克隆该存储库,但是您可以以自己喜欢的任何方式使用 Git。 将这些文件放在哪个目录中都没有关系。 我们只是将它们下载到本地工作目录中。 然后,我们将使用此位置作为开始构建实际 Docker 容器的位置。 @@ -51,7 +51,7 @@ GPU 状态 Docker 文件代码 -这就是我们将用来创建环境的东西。 我们从具有 CUDA 和 cuDNN 驱动程序的基本 NVIDIA 映像开始,它将在将来支持 GPU。 现在,在下一部分中,我们将更新容器上的软件包管理器,以确保我们具有`git`和`wget`更新的图形软件包,以便能够在笔记本中绘制图表: +这就是我们将用来创建环境的东西。 我们从具有 CUDA 和 cuDNN 驱动程序的基本 NVIDIA 镜像开始,它将在将来支持 GPU。 现在,在下一部分中,我们将更新容器上的软件包管理器,以确保我们具有`git`和`wget`更新的图形软件包,以便能够在笔记本中绘制图表: ![](img/0c02cde9-a2be-466f-9bca-41c7743b5636.png) @@ -71,7 +71,7 @@ Anaconda 是一种方便的 Python 发行版,可用于机器学习和数据科 Docker 文件代码 -当我们运行笔记本时,它们将以该用户身份运行,因此您将始终知道谁拥有文件。 并非一定要创建特定用户来设置容器,但是可以确保设置一致,这很方便。 随着将这些技术更多地与 Docker 结合使用,您可能会探索不同的基础映像,并且在这些映像上设置的那些用户目录可能与您期望的不完全相同。 例如,您可能使用其他外壳程序或具有其他主目录路径。 自行设置可保持一致。 +当我们运行笔记本时,它们将以该用户身份运行,因此您将始终知道谁拥有文件。 并非一定要创建特定用户来设置容器,但是可以确保设置一致,这很方便。 随着将这些技术更多地与 Docker 结合使用,您可能会探索不同的基础镜像,并且在这些镜像上设置的那些用户目录可能与您期望的不完全相同。 例如,您可能使用其他外壳程序或具有其他主目录路径。 自行设置可保持一致。 现在,我们实际上将在我们的环境中安装`conda`: diff --git a/new/handson-rl-py/00.md b/new/handson-rl-py/00.md index dc239de0..baa64789 100644 --- a/new/handson-rl-py/00.md +++ b/new/handson-rl-py/00.md @@ -72,7 +72,7 @@ 本书中使用了许多文本约定。 -`CodeInText`:指示文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字。 这是一个示例:“将下载的`WebStorm-10*.dmg`磁盘映像文件安装为系统中的另一个磁盘。” +`CodeInText`:指示文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字。 这是一个示例:“将下载的`WebStorm-10*.dmg`磁盘镜像文件安装为系统中的另一个磁盘。” 代码块设置如下: diff --git a/new/handson-rl-py/02.md b/new/handson-rl-py/02.md index a435177f..756b318c 100644 --- a/new/handson-rl-py/02.md +++ b/new/handson-rl-py/02.md @@ -194,13 +194,13 @@ pip install -e . 如前所述,Open AI Universe 需要 Docker,因为大多数 Universe 环境都在 Docker 容器中运行。 -因此,让我们构建一个 Docker 映像并将其命名为`universe`: +因此,让我们构建一个 Docker 镜像并将其命名为`universe`: ```py docker build -t universe . ``` -构建 Docker 映像后,我们运行以下命令,该命令从 Docker 映像启动容器: +构建 Docker 镜像后,我们运行以下命令,该命令从 Docker 镜像启动容器: ```py docker run --privileged --rm -it -p 12345:12345 -p 5900:5900 -e DOCKER_NET_HOST=172.17.0.1 universe /bin/bash diff --git a/new/intel-proj-py/00.md b/new/intel-proj-py/00.md index 85f7ee75..0de25e84 100644 --- a/new/intel-proj-py/00.md +++ b/new/intel-proj-py/00.md @@ -65,7 +65,7 @@ 本书中使用了许多文本约定。 -`CodeInText`:指示文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字。 这是一个示例:“将下载的`WebStorm-10*.dmg`磁盘映像文件安装为系统中的另一个磁盘。” +`CodeInText`:指示文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字。 这是一个示例:“将下载的`WebStorm-10*.dmg`磁盘镜像文件安装为系统中的另一个磁盘。” 代码块设置如下: diff --git a/new/intel-proj-py/04.md b/new/intel-proj-py/04.md index 10d843ed..cfd6fe88 100644 --- a/new/intel-proj-py/04.md +++ b/new/intel-proj-py/04.md @@ -51,7 +51,7 @@ L2 范数下的重建损失可以表示为: ![](img/549bd16c-1bd7-4f76-b4c1-6179369f92c7.png) -结合`(3)`和`(4)`,我们可以获得将映像从域`A`映射到域`A`的总生成器成本`C_G[AB]`域`B`,如下所示: +结合`(3)`和`(4)`,我们可以获得将镜像从域`A`映射到域`A`的总生成器成本`C_G[AB]`域`B`,如下所示: ![](img/581b9be4-661a-41e9-a9f3-597d1116c2c7.png) ![](img/7d74f982-9649-4c22-a18e-d20e9b27d51c.png) diff --git a/new/whats-new-tf2/0.md b/new/whats-new-tf2/0.md index f632cb2d..2e2f743b 100644 --- a/new/whats-new-tf2/0.md +++ b/new/whats-new-tf2/0.md @@ -2,7 +2,7 @@ TensorFlow 是最受欢迎的机器学习框架之一,其新版本 TensorFlow 2.0 改善了其简单性和易用性。 本书将帮助您了解和利用最新的 TensorFlow 功能。 -《TensorFlow 2.0 的新增功能》首先关注高级概念,例如新的 TensorFlow Keras API,渴望执行和高效的分发策略,这些策略可帮助您在多个 GPU 和 TPU 上运行机器学习模型。 本书随后将引导您完成构建数据摄取和培训管道的过程,并提供建议和最佳实践,以将数据提供给使用新`tf.keras` API 创建的模型。 您将探索使用 TensorFlow Serving 和其他多平台部署构建推理管道的过程,然后再继续探索新发布的 AIY(本质上是自己动手的 AI)。 本书深入研究了核心 API,可帮助您构建统一的卷积层和循环层,并使用 TensorBoard 通过假设分析来可视化深度学习模型。 +《TensorFlow 2.0 的新增功能》首先关注高级概念,例如新的 TensorFlow Keras API,渴望执行和高效的分发策略,这些策略可帮助您在多个 GPU 和 TPU 上运行机器学习模型。 本书随后将引导您完成构建数据摄取和培训管道的过程,并提供建议和最佳实践,以将数据提供给使用新`tf.keras` API 创建的模型。 您将探索使用 TensorFlow 服务和其他多平台部署构建推理管道的过程,然后再继续探索新发布的 AIY(本质上是自己动手的 AI)。 本书深入研究了核心 API,可帮助您构建统一的卷积层和循环层,并使用 TensorBoard 通过假设分析来可视化深度学习模型。 到这本书的结尾,您将了解 TensorFlow 2.0 和 TensorFlow 1.x 之间的兼容性,并将能够平稳地迁移到 TensorFlow 2.0。 @@ -27,9 +27,9 @@ TensorFlow 是最受欢迎的机器学习框架之一,其新版本 TensorFlow 下载文件后,请确保使用以下最新版本解压缩或解压缩文件夹: -* Windows 的 WinRAR / 7-Zip -* Mac 版 Zipeg / iZip / UnRarX -* 适用于 Linux 的 7-Zip / PeaZip +* Windows 的 WinRAR/7-Zip +* Mac 版 Zipeg/iZip/UnRarX +* 适用于 Linux 的 7-Zip/PeaZip 本书的代码包也托管在 [GitHub](https://github.com/PacktPublishing/What-s-New-in-TensorFlow-2.0) 上。 @@ -41,7 +41,7 @@ TensorFlow 是最受欢迎的机器学习框架之一,其新版本 TensorFlow 本书中使用了许多文本约定。 -`CodeInText`:指示文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字。 这是一个示例:“将下载的`WebStorm-10*.dmg`磁盘映像文件安装为系统中的另一个磁盘。” +`CodeInText`:指示文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字。 这是一个示例:“将下载的`WebStorm-10*.dmg`磁盘镜像文件安装为系统中的另一个磁盘。” 代码块设置如下: diff --git a/new/whats-new-tf2/1.md b/new/whats-new-tf2/1.md index 82e5cf26..12f26a09 100644 --- a/new/whats-new-tf2/1.md +++ b/new/whats-new-tf2/1.md @@ -35,7 +35,7 @@ TF 2.0 的另一个主要变化是没有更多的全局变量。 在 TF 1.x 中 本节介绍了使用不同方法和不同系统配置在系统上安装 TF 2.0 所需的步骤。 建议入门级用户从基于`pip`和`virtualenv`的方法开始。 对于 GPU 版本的用户,推荐使用`docker`。 -# 安装和使用 pip +# 安装和使用 PIP 对于初学者来说,`pip`是 Python 社区中流行的软件包管理系统。 如果您的系统上未安装此软件,请先安装它,然后再继续进行。 在许多 Linux 安装中,默认情况下安装了 Python 和`pip`。 您可以通过键入以下命令来检查是否已安装`pip`: @@ -75,13 +75,13 @@ python3 -c "import tensorflow as tf; a = tf.constant(1); print(tf.math.add(a, a) # 使用 Docker -如果您想将 TensorFlow 安装与系统的其余部分隔离开来,则可能要考虑使用 Docker 映像进行安装。 这将要求您在系统上安装 Docker。 可在[这个页面](https://docs.docker.com/install/)上获得安装说明。 +如果您想将 TensorFlow 安装与系统的其余部分隔离开来,则可能要考虑使用 Docker 镜像进行安装。 这将要求您在系统上安装 Docker。 可在[这个页面](https://docs.docker.com/install/)上获得安装说明。 为了在 Linux 系统上使用不带`sudo`的 Docker,[请执行以下安装后步骤](https://docs.docker.com/install/linux/linux-postinstall/)。 -TensorFlow 团队正式支持 Docker 映像作为安装方式。 对于用户而言,这意味着可以在[这里](https://hub.docker.com/r/tensorflow/tensorflow/)下载更新的 Docker 映像。 +TensorFlow 团队正式支持 Docker 镜像作为安装方式。 对于用户而言,这意味着可以在[这里](https://hub.docker.com/r/tensorflow/tensorflow/)下载更新的 Docker 镜像。 -使用以下命令在本地下载 Docker 映像:... +使用以下命令在本地下载 Docker 镜像:... # GPU 安装 @@ -100,7 +100,7 @@ TensorFlow 的 GPU 版本的安装与 CPU 版本的过程稍有不同。 可以 1. 测试 GPU 是否可用:... -# 使用 pip 安装 +# 使用 PIP 安装 如果您想将 TensorFlow 与 NVIDIA GPU 一起使用,则需要在系统上安装以下其他软件。 共享的链接中提供了详细的安装说明: @@ -144,13 +144,13 @@ TF 2.0 可以通过两种主要方式使用-使用低级 API 和使用高级 API 丰富的扩展功能是 TensorFlow 中引入的一组功能,可提高用户的工作效率并扩展功能。 在本节中,我们将介绍参差不齐的张量以及如何使用它们,并且还将介绍 TF 2.0 中引入的新模块。 -# 衣衫 agged 的张量 +# 参差不齐的张量 当训练和服务于机器学习模型时,可变大小的数据很常见。 在不同的基础媒体类型和模型架构中,此问题始终存在。 当代的解决方案是使用最大记录的大小,对较小的记录使用填充。 这不仅效率低下,不仅在内存或存储方面,而且在计算效率方面也是如此; 例如,当处理循环模型的输入时。 参差不齐的张量有助于解决此问题。 在非常高的水平上,参差不齐的张量可以被认为是变长链表的 TensorFlow 模拟。 这里要注意的一个重要事实是,这种可变性也可以存在于嵌套尺寸中。 这意味着有可能... -# 真正的衣衫 Ten 张量是什么? +# 真正的参差不齐的张量是什么? 参差不齐的张量也可以定义为具有一个或多个参差不齐的尺寸的张量。 换句话说,具有可变长度切片的尺寸。 由于最常见的用例涉及处理有限数量的记录,因此参差不齐的张量要求最外面的维度是统一的,换句话说,该维度的所有切片都应具有相同的长度。 最外部尺寸之前的尺寸可以既参差不齐,也可以统一。 总结一下这些要点,我们可以指出,参差不齐的张量的形状目前仅限于以下形式: diff --git a/new/whats-new-tf2/2.md b/new/whats-new-tf2/2.md index 2c72e8c3..d60b9c2f 100644 --- a/new/whats-new-tf2/2.md +++ b/new/whats-new-tf2/2.md @@ -1,6 +1,6 @@ # Keras 默认集成和急切执行 -本章涵盖了两个高级 **TensorFlow 2.0**(**TF 2.0**)API,即 Keras 和 Estimators。 本章重点关注惰性评估和渴望执行的概念,重点介绍如何在 **TensorFlow 1.x**(**TF 1.x**)和 TF 2.0 中评估基础计算图之间的差异 。 本章还提供了有关使用诸如 Keras 之类的高级 API 构建自定义模型(使用自定义低级操作)的详细指南。 +本章涵盖了两个高级 **TensorFlow 2.0**(**TF 2.0**)API,即 Keras 和估计器。 本章重点关注惰性评估和渴望执行的概念,重点介绍如何在 **TensorFlow 1.x**(**TF 1.x**)和 TF 2.0 中评估基础计算图之间的差异 。 本章还提供了有关使用诸如 Keras 之类的高级 API 构建自定义模型(使用自定义低级操作)的详细指南。 本章将涵盖以下主题: @@ -230,7 +230,7 @@ replica_my_model.set_weights(my_model_weights) # Define layer chain input_layer = tf.keras.layers.Input(shape=(5,)) hidden_layer = tf.keras.layers.Dense(10)(input_layer) -output_layer = tf.keras.layers.Dense(5, activation=‘softmax')(hidden_layer) +output_layer = tf.keras.layers.Dense(5, activation='softmax')(hidden_layer) # Define Model my_model = tf.keras.Model(inputs=input_layer, outputs=output_layer) @@ -262,7 +262,7 @@ my_model_replica.set_weights( ) ``` -如您所见,我们已经使用 save API 成功创建了源模型的副本。 此外,我们已经通过使用前面介绍的加载 API 将其重新加载到单独的对象内存中进行了测试。 换句话说,我们已经使用 load 和 save API 创建了模型的副本。 +如您所见,我们已经使用`save` API 成功创建了源模型的副本。 此外,我们已经通过使用前面介绍的加载 API 将其重新加载到单独的对象内存中进行了测试。 换句话说,我们已经使用`load`和`save` API 创建了模型的副本。 # 保存和加载整个模型 @@ -284,7 +284,7 @@ my_model_replica.set_weights( 使用`Sequential`或`functional` API 创建的 Keras 模型可以直接保存到磁盘。 使用 Keras 的本机 HDF5 文件格式保存文件。 实现此目的的代码的一般形式如下: ```py -model.save(‘file_name.h5') +model.save('file_name.h5') ``` 可以使用简单的 Python 单一代码将该模型重新加载到内存中。 通用格式如下: @@ -329,7 +329,7 @@ loaded_model = tf.keras.models.load_model( 每个... -# keras.datasets 模块 +# `keras.datasets`模块 `keras.datasets`模块包括自动化功能,可以从文件中解析某些流行数据集的数据。 如果本地没有这些文件,它还包括自动通过互联网下载这些文件的功能。 这使用户可以更轻松,更快捷地试验和评估不同的模型。 对于某些用例,此模块可以代替整个数据处理阶段! Keras 随附的各种数据集模块包括以下内容: @@ -415,7 +415,7 @@ b = tf.constant(32) # Define add operation c = a + b -print(f”Value outside session: {c}”) +print(f"Value outside session: {c}”) ``` @@ -430,7 +430,7 @@ Outside session: Tensor("add_1:0", shape=(), dtype=int32) ```py # Create a session and run graph in it with tf.Session() as sess: - print(f“Value inside Session: {c}”) + print(f"Value inside Session: {c}”) ``` 您将看到以下输出: @@ -450,7 +450,7 @@ b = tf.constant(32) #Define add operation c = a + b -print(f”Value outside session: {c}”) +print(f"Value outside session: {c}") ``` 结果输出如下: @@ -459,7 +459,7 @@ print(f”Value outside session: {c}”) Value outside session: 42 ``` -如我们所见,此阶段的输出在 TensorFlow 2.0+和<2.0 版本之间有所不同。 在这种情况下,`c`变量已经包含加法运算的值。 无需程序员评估任何计算图即可进行计算。 换句话说,加法操作急切地执行。 这是 2.0 及更高版本与旧版本之间的主要区别。 +如我们所见,此阶段的输出在 TensorFlow 2.0+ 和 <2.0 版本之间有所不同。 在这种情况下,`c`变量已经包含加法运算的值。 无需程序员评估任何计算图即可进行计算。 换句话说,加法操作急切地执行。 这是 2.0 及更高版本与旧版本之间的主要区别。 TF 2.0 与 Python 编程语言紧密集成。 急切的执行使张量可以无缝用作本机 Python 对象,而不必担心评估计算图以及管理会话或基础硬件。 好处不止于此。 急切的执行使程序员能够利用宿主编程语言的强大控制流结构。 TensorFlow 代码现在与平台的其余部分更加直观地集成,这为开发人员带来了巨大的价值,因为它不再需要特殊的流控制结构。 这也为实验,调试和笔记本环境增加了重要价值。 diff --git a/new/whats-new-tf2/3.md b/new/whats-new-tf2/3.md index 3daec239..04d2fc9d 100644 --- a/new/whats-new-tf2/3.md +++ b/new/whats-new-tf2/3.md @@ -39,15 +39,15 @@ TFRecords 的创建是输入数据管道的核心,因此您可以创建`tf.dat * `TFRecord`格式,用于存储二进制记录或数据序列。 * [协议缓冲区](https://developers.google.com/protocol-buffers/)是跨平台的,并且具有跨语言库,用于以协议消息的形式对结构化数据进行有效的序列化。 * 协议消息是信息的小型逻辑记录,其中包含一系列名称/值对。 -* `tf.Example`是一种灵活的协议消息(也称为`protobuf`),旨在与 TensorFlow 一起使用。 **TensorFlow 扩展**(**TFX**)是 TF 2.0 中的另一个重要功能,用于部署生产级 ML 管道,我们将在第 5 章中进行学习,[ “模型推理管道–多平台部署”。 +* `tf.Example`是一种灵活的协议消息(也称为`protobuf`),旨在与 TensorFlow 一起使用。 **TensorFlow 扩展**(**TFX**)是 TF 2.0 中的另一个重要功能,用于部署生产级 ML 管道,我们将在第 5 章,“模型推理管道–多平台部署”中进行学习。 请注意,在 TF 2.0 中,`tf.Examples`已在诸如 [TFX](https://www.tensorflow.org/tfx/) 的所有 TensorFlow 高级 API 中使用。。 现在,让我们看看如何将数据存储在`TFRecords`中。 如前所述,任何转换为​​`TFRecords`格式的数据都存储为二进制字符串序列。 您可能会猜到,必须先指定数据结构,然后才能从`tfrecord`文件读取或写入数据。 为了读取和写入`tfrecords`文件,我们需要使用`tf.Example`协议消息。 请注意,数据中包含的每条小信息都必须使用`Etf.Example`进行存储。 此外,为了将信息写入磁盘,使用了`tf.io.TFRecordWriter`。 要从磁盘读回信息,您可以使用`tf.io.TFRecordReader`。 -# TensorFlow 协议消息-tf.Example +# TensorFlow 协议消息 - `tf.Example` -`tf.Example`是`{‘string':tf.train.Feature}`映射(Python 词典),其中`'string'`可以是任何名称; 例如`'image'`,`'features'`或`'label'`。 +`tf.Example`是`{'string':tf.train.Feature}`映射(Python 词典),其中`'string'`可以是任何名称; 例如`'image'`,`'features'`或`'label'`。 `tf.train.Feature`可以是以下三种类型之一: @@ -59,7 +59,7 @@ TFRecords 的创建是输入数据管道的核心,因此您可以创建`tf.dat 以下代码块中的函数可用于将值转换为... -# tf.data 数据集对象创建 +# `tf.data`数据集对象创建 如我们前面提到的,`tf.data` API 集提供了从原始数据构建复杂而有效的输入数据管道的工具。 例如,输入管道可以从分布式文件系统的图像文件构建。 如果您使用的是**自然语言处理**(**NLP**)模块,也可以从原始文本数据构建它。 下图显示了`tf.dataset`对象创建的流程: @@ -184,7 +184,7 @@ train_dataset = line_dataset.map(train_decode_line) * 使用图像: -最常见的输入数据管道之一是图像,可以是.jpeg 或.png 格式。 您的数据集中可能有成千上万的图像。 由于硬件内存(CPU 内存或 GPU 内存)的限制,我们无法将所有图像存储到内存中。 `tf.data.Dataset`提供了构建此管道的有效方法。 +最常见的输入数据管道之一是图像,可以是`.jpeg`或`.png`格式。 您的数据集中可能有成千上万的图像。 由于硬件内存(CPU 内存或 GPU 内存)的限制,我们无法将所有图像存储到内存中。 `tf.data.Dataset`提供了构建此管道的有效方法。 在以下示例中,我们有几个`.jpeg`/`.jpg`文件,我们将使用它们全部创建`tf.data.Dataset`。 您可以在[这个页面](https://github.com/PacktPublishing/What-s-New-in-TensorFlow-2.0/blob/master/Chapter03/datasets/create_dataset_from_images.ipynb)中找到更多详细信息: @@ -224,7 +224,7 @@ image_dataset = image_path_dataset.map(preprocess_image) 一些最重要的转换如下: * **数据重排**:选择部分数据而不是获取整个数据集可能需要这些。 它们对于使用数据子集进行实验很有用。 -* **数据清除**:这些非常重要。 就像清除日期格式(例如从 YYYY / MM / DD 到 MM-DD-YYYY)或删除具有缺失值或错误数字的数据一样简单。 ...的其他例子 +* **数据清除**:这些非常重要。 就像清除日期格式(例如从`YYYY/MM/DD`到`MM-DD-YYYY`)或删除具有缺失值或错误数字的数据一样简单。 # 地图功能 @@ -252,7 +252,7 @@ def map_func(input): ds=ds.map(map_func) ``` -# flat_map 函数 +# `flat_map`函数 此转换将`map_func`输入映射到输入数据集并展平结果。 这用于确保数据集的顺序保持不变。 `map_func`必须在此处返回数据集: @@ -260,7 +260,7 @@ ds=ds.map(map_func) a = Dataset.from_tensor_slices([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ])a.flat_map(lambda x: Dataset.from_tensor_slices(x + 1)) # ==># [ 2, 3, 4, 5, 6, 7, 8, 9, 10 ] ``` -# 拉链功能 +# `zip`函数 该 API 与 Python 的内置`zip(...)`函数相似。 Python 的`zip(...)`函数和`tf.data.Dataset.zip(...)`函数之间的区别在于,后者可以采用数据集的嵌套结构: @@ -343,7 +343,7 @@ ds = tf.data.Dataset.from_tensor_slices([1, 2, 3]) ds = ds.filter(lambda x: x > 3) # ==> [1, 2] ``` -# 改组和重复使用 tf.data.Dataset +# 改组和重复使用`tf.data.Dataset` 机器学习模型必须从训练,验证和测试步骤的总体分布中合理地表示数据。 通常,原始数据可以按特定顺序存储,例如相对于每个类一起存储,或者数据可以一起存储在特定源中。 必须对原始数据进行混洗,以确保训练,验证和测试数据分布在整个数据分布中。 另外,建议在每个时期之后对数据进行混洗。 下图显示了改组和重复使用`tf.data.Dataset`的流程: @@ -423,7 +423,7 @@ TF 2.0 中创建输入数据管道的一个主要区别在于其简单性。 TF `data_batch_*`文件包含训练数据,而`test_batch`文件包含测试数据。 这些文件为 Python `pickle`格式。 在此端到端示例中,我们将从 pickle 文件中创建`tfrecords`。 完整的代码文件以及`README.md`文件可在本书的 GitHub 存储库中找到,两者均可在[这里](https://github.com/PacktPublishing/What-s-New-in-TensorFlow-2.0/blob/master/Chapter03/cifar10/README.md)找到。 -# 使用泡菜文件创建 tfrecords +# 使用 Pickle 文件创建 TFRecords 出于说明目的,我们将使用`data_batch_*`文件之一作为验证数据。 我们将其余的用于培训。 例如,如果我们选择`data_batch_4`作为验证数据,则`data_batch_1`,`data_batch_2`,`data_batch_3`和`data_batch_5`将用作训练数据。 @@ -445,7 +445,7 @@ def create_tfrecords(cifar10_data_folder, validation_data_idx): """ function to dataset = dataset.shuffle(count).repeat().batch(batch_size).prefetch(buffer_size) ``` -* 强烈建议通过启用`num_parallel_calls`参数来并行化 map API。 +* 强烈建议通过启用`num_parallel_calls`参数来并行化映射 API。 * 对于远程存储的数据集,建议使用`interleave(...)`转换来并行读取来自不同文件的数据。 # TF 2.0 中的内置数据集 diff --git a/new/whats-new-tf2/4.md b/new/whats-new-tf2/4.md index 8f29548a..476effc3 100644 --- a/new/whats-new-tf2/4.md +++ b/new/whats-new-tf2/4.md @@ -19,15 +19,15 @@ TensorFlow 1.x 版本强烈支持低级和中级 API,以构建机器学习模 假定本章和本书的读者都知道机器学习,神经网络和深度神经网络的基础知识。 另外,作为前提条件,假设读者知道 TensorFlow 1.x API。 此外,还需要对深度神经网络中的卷积层,递归层和前馈层有基本的了解。 -# 比较 Hard 和 tf。Hard +# 比较 Keras 和`tf.keras` `tf.keras`是 TensorFlow 对 Keras API 规范的实现。 这是用于构建和训练模型的高级 API,其中包括对 TensorFlow 特定功能的一流支持,例如急切执行,`tf.data`管道和估计器。 `tf.keras`使 TensorFlow 易于使用,而不会牺牲灵活性和性能。 Keras(定义 Keras API 标准的原始网站)是一个开源项目,由于其简单和强大而受到 ML 工程师和数据科学家的极大关注。 最初,Keras 的默认后端引擎(请记住,Keras 是一组 API)是 Theano; 但是,最近它发生了变化,现在 TensorFlow 作为其默认后端引擎。 您还可以将默认后端引擎设置为 MXNet,CNTK 等。 Keras API 非常易于使用,模块化且可组合。 此外,还可以轻松扩展您的特定需求。 TensorFlow 采用了 Keras API 标准,从那时起,使用 TensorFlow 核心功能的`tf.keras`开发就如火如荼地进行。 现在,随着 TF 2.0 的发布,TF 开发团队为`tf.keras`高级 API 提供了紧密而有效的支持。 另外,值得一提的是 Keras 和`tf.keras`是两个完全不同的软件包,作为 TF 2.0 的一部分,应使用`tf.keras`。 在版本方面,在 TensorFlow 2.0 中,TensorFlow 和`tf.keras`的版本号仍然存在差异,您可以尝试使用`tf.__version__`和`tf.keras.__version__`查看此版本。 -# 比较估算器和 tf.keras +# 比较估算器和`tf.keras` -TensorFlow 1.x 已建议为其高级 API 集使用`tf.estimator` API,该 API 集具有内置模型(例如`LinearRegressor`和`DNNClassifier`)可用的预制估算器。 此外,对于更细化和定制的模型,TF 1.x 具有定制的估计器。 从 TF 2.0 开始,建议仅使用与线性分类器,DNN 分类器,组合 DNN 线性分类器和 Gradient Boosted Trees 打包在一起的丰富的预制估算器 API 集。 这些模型已准备就绪,可以广泛使用。 对于任何自定义模型,建议直接使用`tf.keras`而不是`tf.estimator` API。 另外,值得注意的是,与`tf.keras, ...`有更好的协同作用 +TensorFlow 1.x 已建议为其高级 API 集使用`tf.estimator` API,该 API 集具有内置模型(例如`LinearRegressor`和`DNNClassifier`)可用的预制估算器。 此外,对于更细化和定制的模型,TF 1.x 具有定制的估计器。 从 TF 2.0 开始,建议仅使用与线性分类器,DNN 分类器,组合 DNN 线性分类器和梯度提升树打包在一起的丰富的预制估算器 API 集。 这些模型已准备就绪,可以广泛使用。 对于任何自定义模型,建议直接使用`tf.keras`而不是`tf.estimator` API。 另外,值得注意的是,与`tf.keras, ...`有更好的协同作用 # 机器学习分类法和 TF 支持的快速回顾 @@ -197,7 +197,7 @@ self.num_filters = 32 神经网络对复杂的非线性函数建模,例如`sin(x)`,`x ** 2`和`x ** 3`,仅举几个简单的函数, 由层的网络(堆栈)组成。 这些层可以是卷积层,循环层或简单的前馈层的混合。 每层由神经元组成。 神经元有两种模型化非线性的成分:前一层的加权总和,然后是激活函数。 神经网络试图以迭代方式学习给定训练数据的分布。 一旦通过指定激活函数以层栈的形式构建了神经网络,就需要定义一个目标函数(也称为损失函数)以使用适当的模型来改善模型权重。 -# compile()API +# `compile()`API `tf.keras.Model.compile(...)` API 有助于定义`loss`函数和优化器,如下所示: @@ -218,7 +218,7 @@ model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.1), metrics=[tf.keras.metrics.Accuracy()]) ``` -# fit()API +# `fit()`API `tf.keras.Model.fit(...)`是训练模型的主要 API。 它以输入训练数据以及(可选)批量大小,回调等作为输入: @@ -564,7 +564,7 @@ for num_units in HP_NUM_UNITS.domain.values: ![](img/360da61e-9b3a-4d8a-b54a-74a79d9bec0a.png) -仪表板的左窗格允许用户按超参数过滤日志,以方便访问和使用。 超参数仪表板具有三个视图-表视图,并行坐标视图和“散点图矩阵视图”-每个视图都提供了一种不同的方式来可视化结果。 TABLE VIEW 列出运行和超参数并显示指标。 并行坐标视图将每个运行显示为一条穿过每个超参数和指标的轴的线,可用于查看哪个超参数更重要。 SCATTER PLOT MATRIX VIEW 显示比较每个超参数和度量的图,并有助于识别相关性。 +仪表板的左窗格允许用户按超参数过滤日志,以方便访问和使用。 超参数仪表板具有三个视图-表视图,并行坐标视图和“散点图矩阵视图”-每个视图都提供了一种不同的方式来可视化结果。 `TABLE VIEW`列出运行和超参数并显示指标。 并行坐标视图将每个运行显示为一条穿过每个超参数和指标的轴的线,可用于查看哪个超参数更重要。 `SCATTER PLOT MATRIX VIEW`显示比较每个超参数和度量的图,并有助于识别相关性。 该工具可轻松调整超参数和详细的日志,并在 TensorBoard 中直观显示结果。 @@ -594,7 +594,7 @@ WIT 的某些功能是可以将具有相同工作流程的多个模型进行比 **我应何时使用`tf.keras`顺序和函数式 API? 为什么需要模型子类化?** -通常,对于更简单的模型,应使用`tf.keras`顺序。 大部分模型可以使用顺序 API 编写。 但是,对于那些需要多个输入和输出以及某些特定连接(例如剩余功能)的模型,应使用 Functional API。 对于真正定制的模型,可以使用模型子类化。 +通常,对于更简单的模型,应使用`tf.keras`顺序。 大部分模型可以使用顺序 API 编写。 但是,对于那些需要多个输入和输出以及某些特定连接(例如剩余功能)的模型,应使用函数式 API。 对于真正定制的模型,可以使用模型子类化。 # 进一步阅读 diff --git a/new/whats-new-tf2/5.md b/new/whats-new-tf2/5.md index 54933ba8..93864664 100644 --- a/new/whats-new-tf2/5.md +++ b/new/whats-new-tf2/5.md @@ -256,13 +256,13 @@ Result for output key output_0: 与 TensorFlow 平台的大多数其他组件一样,TensorFlow Serving 也可以通过多种方式安装。 这里推荐通过 Docker 镜像使用它,因为它相对简单。 -如果容器映像对您不起作用,请在[这个页面](https://www.tensorflow.org/tfx/serving/setup)上获取其他安装 TensorFlow Serving 方法的摘要。 +如果容器镜像对您不起作用,请在[这个页面](https://www.tensorflow.org/tfx/serving/setup)上获取其他安装 TensorFlow Serving 方法的摘要。 -使用 Docker 设置 TensorFlow 服务涉及一个简单的步骤。 但是,此步骤需要将 Docker 安装在主机上。 有关设置 Docker 的说明,请参阅第 1 章, “TensorFlow 2.0 入门”或本章的“技术要求”部分。 您需要做的就是拉相关的 Docker 映像以... +使用 Docker 设置 TensorFlow 服务涉及一个简单的步骤。 但是,此步骤需要将 Docker 安装在主机上。 有关设置 Docker 的说明,请参阅第 1 章, “TensorFlow 2.0 入门”或本章的“技术要求”部分。 您需要做的就是拉相关的 Docker 镜像以... # 设置并运行推理服务器 -现在我们已经设置了 TensorFlow Serving,让我们使用它来执行一些实际任务。 我们可以看看如何设置后端服务器以服务于前面几节中构建的`SavedModel`格式。 我们可以使用上一节中下载的 Docker 映像来运行`SavedModel`格式。 为此,我们需要做两件事: +现在我们已经设置了 TensorFlow Serving,让我们使用它来执行一些实际任务。 我们可以看看如何设置后端服务器以服务于前面几节中构建的`SavedModel`格式。 我们可以使用上一节中下载的 Docker 镜像来运行`SavedModel`格式。 为此,我们需要做两件事: * 将本地主机上包含模型的位置绑定到容器内的目录(`/models/`) * 绑定网络端口 TensorFlow Serving 正在侦听主机上的网络端口 -- GitLab