From 3246749c2f8d20ba5e4c19ff8a24c008410ea873 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Sat, 12 Sep 2020 23:56:53 +0800 Subject: [PATCH] 2020-09-12 23:56:53 --- docs/get-start-tf/ch00.md | 2 +- docs/get-start-tf/ch01.md | 14 +++++++------- docs/get-start-tf/ch02.md | 6 +++--- docs/get-start-tf/ch03.md | 18 +++++++++--------- docs/get-start-tf/ch04.md | 18 +++++++++--------- docs/get-start-tf/ch05.md | 18 +++++++++--------- docs/get-start-tf/ch06.md | 8 ++++---- 7 files changed, 42 insertions(+), 42 deletions(-) diff --git a/docs/get-start-tf/ch00.md b/docs/get-start-tf/ch00.md index e7aa5c3a..2dc2dd69 100644 --- a/docs/get-start-tf/ch00.md +++ b/docs/get-start-tf/ch00.md @@ -48,7 +48,7 @@ TensorFlow 是一个开源软件库,用于实现机器学习和深度学习系 # 这本书是给谁的 -读者应该具有编程和数学概念的基础知识,并且同时希望向您介绍机器和深度学习的主题。 阅读本书后,您将能够掌握 TensorFlow 的功能以构建功能强大的应用程序。 +读者应该具有编程和数学概念的基础知识,并且同时希望向您介绍机器和深度学习的主题。 阅读本书后,您将能够掌握 TensorFlow 的功能以构建功能强大的应用。 # 约定 diff --git a/docs/get-start-tf/ch01.md b/docs/get-start-tf/ch01.md index f4a43d39..f5a441ec 100644 --- a/docs/get-start-tf/ch01.md +++ b/docs/get-start-tf/ch01.md @@ -17,7 +17,7 @@ “学习”一词直观地表明,基于机器学习的系统可能会基于对先前处理的数据的观察,*改善*的知识,以便在将来实现*更好的结果* ,或为特定系统提供输出,使其更接近。 -由于*过去的经验*,基于机器学习的程序或系统提高其在特定任务中的性能的能力与*识别数据*的能力紧密相关。 。 因此,这个主题称为*模式识别*,在人工智能领域具有至关重要的意义,并且引起了越来越多的关注。 它是所有机器学习技术的基础。 +由于*过去的经验*,基于机器学习的程序或系统提高其在特定任务中的表现的能力与*识别数据*的能力紧密相关。 。 因此,这个主题称为*模式识别*,在人工智能领域具有至关重要的意义,并且引起了越来越多的关注。 它是所有机器学习技术的基础。 机器学习系统的培训可以通过不同的方式完成: @@ -48,7 +48,7 @@ ### 深度学习 -深度学习技术代表了近几十年来机器学习所迈出的重要一步,它提供了许多应用程序从未见过的结果,例如图像和语音识别或**自然语言处理**(**NLP**)。 导致深度学习发展的原因有很多,仅在最近几十年中它才被置于机器学习领域的中心。 原因之一,也许是主要原因,可以肯定地以硬件的进步为代表,并且随着新处理器的出现,例如**图形处理单元**(**GPU**),它们大大减少了使用所需的数据训练网络的时间,将它们降低了 10 或 20 倍。另一个原因当然是训练系统所需的数据集越来越多,训练一定深度并具有高维度输入数据的架构所需的数据集。 +深度学习技术代表了近几十年来机器学习所迈出的重要一步,它提供了许多应用从未见过的结果,例如图像和语音识别或**自然语言处理**(**NLP**)。 导致深度学习发展的原因有很多,仅在最近几十年中它才被置于机器学习领域的中心。 原因之一,也许是主要原因,可以肯定地以硬件的进步为代表,并且随着新处理器的出现,例如**图形处理单元**(**GPU**),它们大大减少了使用所需的数据训练网络的时间,将它们降低了 10 或 20 倍。另一个原因当然是训练系统所需的数据集越来越多,训练一定深度并具有高维度输入数据的架构所需的数据集。 ![Deep learning](img/image_01_003.jpg) @@ -403,7 +403,7 @@ TensorFlow Python API 支持 Python 2.7 和 Python 3.3+。 GPU 版本(仅 Linu ## 在 Windows 上安装 -如果无法获得基于 Linux 的系统,则可以在虚拟机上安装 Ubuntu。 只需使用名为 VirtualBox 的免费应用程序,即可在 Windows 上创建虚拟 PC 并在后者中安装 Ubuntu。 因此,您可以尝试操作系统,而无需创建分区或处理繁琐的过程。 +如果无法获得基于 Linux 的系统,则可以在虚拟机上安装 Ubuntu。 只需使用名为 VirtualBox 的免费应用,即可在 Windows 上创建虚拟 PC 并在后者中安装 Ubuntu。 因此,您可以尝试操作系统,而无需创建分区或处理繁琐的过程。 ### 注意 @@ -589,7 +589,7 @@ with tf.Session() as session: # 数据流图 -机器学习应用程序是重复计算复杂数学表达式的结果。 在 TensorFlow 中,使用数据流图描述了计算,其中图中的每个*节点*代表数学运算的实例(`multiply`,`add`等), 每个*边*是执行操作的多维数据集(*张量*)。 +机器学习应用是重复计算复杂数学表达式的结果。 在 TensorFlow 中,使用数据流图描述了计算,其中图中的每个*节点*代表数学运算的实例(`multiply`,`add`等), 每个*边*是执行操作的多维数据集(*张量*)。 TensorFlow 支持这些构造和这些运算符。 让我们详细看看 TensorFlow 如何管理节点和边: @@ -757,8 +757,8 @@ TensorBoard 中的节点符号 在这个庞大的科学研究和实际应用领域中,我们可以牢固地放置 **TensorFlow** 软件库,该库由 Google 人工智能研究小组(Google Brain Project)开发,并于 2015 年 11 月 9 日作为开源软件发布 。 -在选择 **Python** 编程语言作为示例和应用程序的开发工具之后,我们了解了如何安装和编译该库,然后进行了第一个工作会话。 这使我们可以介绍 TensorFlow 和**数据流图**的执行模型。 它引导我们定义了我们的编程模型。 +在选择 **Python** 编程语言作为示例和应用的开发工具之后,我们了解了如何安装和编译该库,然后进行了第一个工作会话。 这使我们可以介绍 TensorFlow 和**数据流图**的执行模型。 它引导我们定义了我们的编程模型。 -本章以如何使用重要工具调试机器学习应用程序的示例结尾: **TensorBoard**。 +本章以如何使用重要工具调试机器学习应用的示例结尾: **TensorBoard**。 -在下一章中,我们将继续进入 TensorFlow 库,以展示其多功能性。 从基本概念张量开始,我们将看到如何将库用于纯数学应用程序。 \ No newline at end of file +在下一章中,我们将继续进入 TensorFlow 库,以展示其多功能性。 从基本概念张量开始,我们将看到如何将库用于纯数学应用。 \ No newline at end of file diff --git a/docs/get-start-tf/ch02.md b/docs/get-start-tf/ch02.md index 3634ea39..8014fb18 100644 --- a/docs/get-start-tf/ch02.md +++ b/docs/get-start-tf/ch02.md @@ -739,7 +739,7 @@ TensorFlow 具有解决其他更复杂任务的功能。 例如,我们将使 # 随机数 -随机数的生成对于机器学习和训练算法至关重要。 当计算机生成随机数时,它们是由**伪随机数生成器**(**PRNG**)生成的。 术语“伪”来自这样一个事实,即计算机是仅能模拟随机性的指令的染色逻辑编程运行。 尽管存在逻辑限制,但计算机在生成随机数方面非常有效。 TensorFlow 为操作员提供了创建具有不同分布的随机张量的方法。 +随机数的生成对于机器学习和训练算法至关重要。 当计算机生成随机数时,它们是由**伪随机数生成器**(**PRNG**)生成的。 术语“伪”来自这样一个事实,即计算机是仅能模拟随机性的指令的染色逻辑编程运行。 尽管存在逻辑限制,但计算机在生成随机数方面非常有效。 TensorFlow 为开发者提供了创建具有不同分布的随机张量的方法。 ## 均匀分布 @@ -772,7 +772,7 @@ sess = tf.Session() ``` -在我们的会话中,我们使用`eval ()`运算符评估张量均匀性: +在我们的会话中,我们使用`eval ()`运算符求值均匀的张量: ```py with tf.Session() as session: @@ -821,7 +821,7 @@ uniform_without_seed = tf.random_uniform([1]) ``` -在第一个均匀分布中,我们从种子`= 1`开始。这意味着重复评估两个分布,第一个均匀分布将始终生成值相同的序列: +在第一个均匀分布中,我们从种子`= 1`开始。这意味着重复求值两个分布,第一个均匀分布将始终生成值相同的序列: ```py print("First Run") diff --git a/docs/get-start-tf/ch03.md b/docs/get-start-tf/ch03.md index 1bae328e..bd833cce 100644 --- a/docs/get-start-tf/ch03.md +++ b/docs/get-start-tf/ch03.md @@ -123,7 +123,7 @@ cost_function = tf.reduce_mean(tf.square(y - y_point)) 为了使`cost_function`最小化,我们使用*梯度下降*的优化算法。 给定几个变量的数学函数,梯度下降允许找到该函数的局部最小值。 该技术如下: -* **在函数域的任意第一个点评估函数本身及其梯度**。 梯度表示函数趋向于最小的方向。 +* **在函数域的任意第一个点求值函数本身及其梯度**。 梯度表示函数趋向于最小的方向。 * **在梯度指示的方向上选择第二个点**。 如果此第二点的函数的值小于在第一点计算的值,则下降可以继续。 您可以参考下图来直观地了解算法: @@ -145,7 +145,7 @@ optimizer = tf.train.GradientDescentOptimizer(0.5) 学习速度决定了我们朝着最佳权重发展的速度是多快还是多慢。 如果太大,则跳过最佳解决方案;如果太大,则需要太多迭代才能收敛到最佳值。 -提供了一个中间值(`0.5`),但是必须对其进行调整,以提高整个过程的性能。 +提供了一个中间值(`0.5`),但是必须对其进行调整,以提高整个过程的表现。 我们通过其`minimize`函数将`train`定义为`cost_function`(`optimizer`)应用的结果: @@ -163,7 +163,7 @@ model = tf.initialize_all_variables() ``` -因此,我们构建了迭代(20 个计算步骤),使我们能够确定`A`和`b`的最佳值,它们定义最适合数据模型的线。 实例化评估图: +因此,我们构建了迭代(20 个计算步骤),使我们能够确定`A`和`b`的最佳值,它们定义最适合数据模型的线。 实例化求值图: ```py with tf.Session() as session: @@ -350,7 +350,7 @@ MNIST 的数字八 1. 构建培训示例,以表示完成分类的实际环境和应用。 2. 选择分类器和相应的算法实现。 3. 在训练集上训练算法,并通过验证设置任何控制参数。 -4. 通过应用一组新实例(测试集)评估分类器的准确性和性能。 +4. 通过应用一组新实例(测试集)评估分类器的准确性和表现。 ## 最近邻算法 @@ -466,7 +466,7 @@ with tf.Session() as sess: ``` -然后,我们使用前面定义的`pred`函数评估最近的邻居索引: +然后,我们使用前面定义的`pred`函数求值最近的邻居索引: ```py nn_index = sess.run(pred,\ @@ -486,7 +486,7 @@ nn_index = sess.run(pred,\ ``` -然后,我们评估并报告分类器的准确性: +然后,我们求值并报告分类器的准确性: ```py accuracy += 1./len(test_pixels) @@ -494,7 +494,7 @@ nn_index = sess.run(pred,\ ``` -如我们所见,训练集的每个元素均已正确分类。 仿真结果显示了预测类和真实类,最后报告了仿真的总价值: +如我们所见,训练集的每个元素均已正确分类。 仿真结果显示了预测类和真实类,最后报告了仿真的总值: ```py >>> @@ -721,7 +721,7 @@ expanded_centroids = tf.expand_dims(centroids, 1) ``` -此函数允许您标准化两个张量的形状,以便通过`tf.sub`方法评估差异: +此函数允许您标准化两个张量的形状,以便通过`tf.sub`方法求值差异: ```py vectors_subtration = tf.sub(expanded_vectors,expanded_centroids) @@ -761,7 +761,7 @@ update_centroids = tf.concat(0, \ ### 测试和算法评估 -现在是测试和评估算法的时候了。 第一个过程是初始化所有变量并实例化评估图: +现在是测试和评估算法的时候了。 第一个过程是初始化所有变量并实例化求值图: ```py init_op = tf.initialize_all_variables() diff --git a/docs/get-start-tf/ch04.md b/docs/get-start-tf/ch04.md index c5dc79ba..415f1b8d 100644 --- a/docs/get-start-tf/ch04.md +++ b/docs/get-start-tf/ch04.md @@ -11,7 +11,7 @@ # 什么是人工神经网络? -**人工神经网络**(**ANN**)是一种信息处理系统,其运行机制受生物神经电路的启发。 由于它们的特性,神经网络是机器学习系统(尤其是在人工智能环境中)真正革命的主角。 根据各种体系结构,人工神经网络拥有许多相互连接的简单处理单元。 如果我们看一下稍后报告的 ANN 的架构,可以看到*隐藏单元*在输入和输出中与外部层通信,而*输入*和*输出单元*仅与网络的*隐藏层*通信。 +**人工神经网络**(**ANN**)是一种信息处理系统,其运行机制受生物神经电路的启发。 由于它们的特性,神经网络是机器学习系统(尤其是在人工智能环境中)真正革命的主角。 根据各种架构,人工神经网络拥有许多相互连接的简单处理单元。 如果我们看一下稍后报告的 ANN 的架构,可以看到*隐藏单元*在输入和输出中与外部层通信,而*输入*和*输出单元*仅与网络的*隐藏层*通信。 每个单元或节点都模拟神经元在生物神经网络中的作用。 每个节点,即*人工神经元*,都具有非常简单的操作:如果其接收到的信号总量超过其激活阈值(由所谓的激活函数定义),它将变为活动状态。 如果节点*变为活动*,它会发射信号,该信号沿着传输通道传输到与其连接的另一个单元。 每个连接点都充当过滤器,将消息转换为抑制性信号或兴奋性信号,根据其各自的特征来增加或减少强度。 连接点模拟生物突触,并具有通过将传输信号乘以权重(其值取决于连接本身)来权衡传输信号强度的基本功能。 @@ -56,7 +56,7 @@ Rosemblatt 的感知机架构 乙状结肠功能 -如我们所见,因变量的取值严格在`0`和`1`之间,这正是为我们服务的内容。 对于*逻辑回归*,我们希望我们的函数告诉我们属于我们班级某个特定元素的*概率*是多少。 我们再次记得,通过神经网络对*监督*学习被配置为权重优化的*迭代过程*; 然后根据训练集的网络性能对它们进行修改。 实际上,其目标是使*损失函数*最小化,该函数表明网络行为偏离所需行为的程度。 然后,在*测试集*上验证网络的性能,该测试集由除受过训练的图像以外的其他图像组成。 +如我们所见,因变量的取值严格在`0`和`1`之间,这正是为我们服务的内容。 对于*逻辑回归*,我们希望我们的函数告诉我们属于我们班级某个特定元素的*概率*是多少。 我们再次记得,通过神经网络对*监督*学习被配置为权重优化的*迭代过程*; 然后根据训练集的网络表现对它们进行修改。 实际上,其目标是使*损失函数*最小化,该函数表明网络行为偏离所需行为的程度。 然后,在*测试集*上验证网络的表现,该测试集由除受过训练的图像以外的其他图像组成。 我们将要实施的培训的基本步骤如下: @@ -113,7 +113,7 @@ x = tf.placeholder("float", [None, 784]) ``` -我们回想起我们的问题是为每种可能的隶属度类别(从 0 到 9 的数字)分配一个概率值。 在计算的最后,我们将使用概率分布,该分布为我们提供了对我们的预测充满信心的价值。 +我们回想起我们的问题是为每种可能的隶属度类别(从 0 到 9 的数字)分配一个概率值。 在计算的最后,我们将使用概率分布,该分布为我们提供了对我们的预测的置信值。 因此,我们要获得的输出将是一个具有`10`概率的输出张量,每个张量都对应一个数字(当然,概率之和必须为 1): @@ -129,14 +129,14 @@ y = tf.placeholder("float", [None, 10]) * 计算*证据*,即某个图像属于特定类别 * 将证据转换为属于 10 个可能类别中的每个类别的*概率* -为了评估证据,我们首先将权重输入张量定义为`W`: +为了求值证据,我们首先将权重输入张量定义为`W`: ```py W = tf.Variable(tf.zeros([784, 10])) ``` -对于给定的图像,我们可以通过简单地将张量`W`与输入张量`x`相乘来评估每个类别`i`的证据。 使用 TensorFlow,我们应该具有以下内容: +对于给定的图像,我们可以通过简单地将张量`W`与输入张量`x`相乘来求值每个类别`i`的证据。 使用 TensorFlow,我们应该具有以下内容: ```py evidence = tf.matmul(x, W) @@ -431,7 +431,7 @@ with tf.Session() as sess: # 多层感知机 -更复杂和有效的体系结构是**多层感知机**(**MLP**)。 它基本上由多层感知机组成,因此至少存在*隐藏的层*,即**未连接到网络的输入或输出**: +更复杂和有效的架构是**多层感知机**(**MLP**)。 它基本上由多层感知机组成,因此至少存在*隐藏的层*,即**未连接到网络的输入或输出**: ![Multi Layer Perceptron](img/B05474_04_05.jpg) @@ -517,9 +517,9 @@ n_classes = 10 ``` -因此,应该注意的是,尽管对于给定的应用程序,输入和输出大小是完美定义的,但是对于如何定义隐藏层的数量和每层神经元的数量,没有严格的标准。 +因此,应该注意的是,尽管对于给定的应用,输入和输出大小是完美定义的,但是对于如何定义隐藏层的数量和每层神经元的数量,没有严格的标准。 -每个选择都必须基于类似应用程序的经验,例如: +每个选择都必须基于类似应用的经验,例如: * 当增加隐藏层的数量时,我们还应该在学习阶段增加必要的训练集的大小,并增加要更新的连接数。 这导致训练时间*增加*。 * 另外,如果隐藏层中的神经元太多,不仅有更多的权重需要更新,而且网络还倾向于从训练示例集中学习太多,从而导致*泛化能力很差*。 但是,如果隐藏的神经元太少,即使使用训练集,网络*也无法学习*。 @@ -999,7 +999,7 @@ tf.nn.l2_loss(model - Y) ### 启动会话 -让我们建立评估图: +让我们建立求值图: ```py sess = tf.Session() diff --git a/docs/get-start-tf/ch05.md b/docs/get-start-tf/ch05.md index aa53ed8f..edc2f178 100644 --- a/docs/get-start-tf/ch05.md +++ b/docs/get-start-tf/ch05.md @@ -52,7 +52,7 @@ character --> word --> word group --> clause --> sentence --> story 实际上,CNN 被设计为处理以多个阵列形式表示的数据,例如*彩色图像*,可通过包含像素颜色强度的三个二维阵列表示。 CNN 与普通神经网络之间的实质区别在于,前者*在图像上直接操作*,而后者在*从图像中提取的特征上*。 因此,与普通神经网络不同,CNN 的输入将是*二维*,特征将是输入图像的像素。 -CNN 是几乎所有识别问题的主要方法。 这种类型的网络所提供的出色性能实际上已经促使诸如 Google 和 Facebook 之类的最大的技术公司投资于此类网络的研发项目,并开发和分发基于 CNN 的产品图像识别。 +CNN 是几乎所有识别问题的主要方法。 这种类型的网络所提供的出色表现实际上已经促使诸如 Google 和 Facebook 之类的最大的技术公司投资于此类网络的研发项目,并开发和分发基于 CNN 的产品图像识别。 ### CNN 架构 @@ -70,7 +70,7 @@ CNN 背后的概念之一是*本地连接*。 实际上,CNN 利用输入数据 从输入到隐藏的神经元 -*隐藏的神经元*当然只会处理其接受区域内的输入数据,而不会实现其外部的变化。 但是,很容易看到,根据深度的基本原理,通过叠加多层本地连接的层,升级后,与输入相比,您将拥有处理越来越多的*全局数据*的学习单元,以使性能达到不断增长的抽象水平。 +*隐藏的神经元*当然只会处理其接受区域内的输入数据,而不会实现其外部的变化。 但是,很容易看到,根据深度的基本原理,通过叠加多层本地连接的层,升级后,与输入相比,您将拥有处理越来越多的*全局数据*的学习单元,以使表现达到不断增长的抽象水平。 ### 注意 @@ -389,7 +389,7 @@ init = tf.initialize_all_variables() ``` -建立评估图: +建立求值图: ```py with tf.Session() as sess: @@ -624,7 +624,7 @@ RNN 架构架构 但是,这种类型的网络的训练会遇到所谓的梯度*消失/爆炸*问题; 计算得出的梯度和向后传播的梯度在每个时间点倾向于使*增大*或*减小*,然后在一定时间间隔后,*趋于无穷大*或*收敛为零*。 -现在让我们检查 RNN 的工作方式。`X[t]`; 是时间`t`上的网络输入,例如可以是代表句子的单词,而`S[t]`的向量。 是网络的*状态向量*。 可以认为是系统的一种*记忆*,其中包含有关输入序列的所有先前元素的信息。 从*当前输入*(时间`t`)开始评估`t`时刻的状态向量,并通过`U`和`W`参数的先前时刻(时间`t-1`)*评估*状态: +现在让我们检查 RNN 的工作方式。`X[t]`; 是时间`t`上的网络输入,例如可以是代表句子的单词,而`S[t]`的向量。 是网络的*状态向量*。 可以认为是系统的一种*记忆*,其中包含有关输入序列的所有先前元素的信息。 从*当前输入*(时间`t`)开始求值`t`时刻的状态向量,并通过`U`和`W`参数的先前时刻(时间`t-1`)求值状态: ```py S[t] = f([U] * X[t] + [W] * S[t-1]) @@ -636,7 +636,7 @@ S[t] = f([U] * X[t] + [W] * S[t-1]) ### LSTM 网络 -**长短期记忆**(**LSTM**)网络是 RNN 体系结构基本模型的扩展。 主要思想是改进网络,为其提供显式内存。 实际上,尽管 LSTM 网络与 RNN 并没有本质上的不同,但它们配备了特殊的隐藏单元,称为存储单元,其行为是长时间记住以前的输入。 +**长短期记忆**(**LSTM**)网络是 RNN 架构基本模型的扩展。 主要思想是改进网络,为其提供显式内存。 实际上,尽管 LSTM 网络与 RNN 并没有本质上的不同,但它们配备了特殊的隐藏单元,称为存储单元,其行为是长时间记住以前的输入。 ![LSTM networks](img/B05474_05_14.jpg) @@ -655,7 +655,7 @@ LSTM 块包含确定输入是否足够重要以进行保存的门。 该块由 ### 使用 TensorFlow 的 NLP -RNN 已被证明在诸如预测文本中的下一个字符或类似地预测句子中的下一个顺序词等问题上具有出色的性能。 但是,它们也用于更复杂的问题,例如**机器翻译**。 在这种情况下,网络将输入源语言中的单词序列,而您想要输出语言*目标*中的相应单词序列。 最后,RNN 被广泛使用的另一个非常重要的应用是*语音识别*。 在下文中,我们将开发一个计算模型,该模型可以根据前一个单词的顺序来预测文本中的下一个单词。 为了测量模型的*精度*,我们将使用 **Penn 树库**(**PTB**)数据集,该数据集是衡量这些模型精度的基准 。 +RNN 已被证明在诸如预测文本中的下一个字符或类似地预测句子中的下一个顺序词等问题上具有出色的表现。 但是,它们也用于更复杂的问题,例如**机器翻译**。 在这种情况下,网络将输入源语言中的单词序列,而您想要输出语言*目标*中的相应单词序列。 最后,RNN 被广泛使用的另一个非常重要的应用是*语音识别*。 在下文中,我们将开发一个计算模型,该模型可以根据前一个单词的顺序来预测文本中的下一个单词。 为了测量模型的*精度*,我们将使用 **Penn 树库**(**PTB**)数据集,该数据集是衡量这些模型精度的基准 。 本示例引用您在 TensorFlow 发行版的`/rnn/ptb`目录中找到的文件。 它包含以下两个文件: @@ -681,7 +681,7 @@ RNN 已被证明在诸如预测文本中的下一个字符或类似地预测句 ## 建立模型 -该模型使用 LSTM 实现 RNN 的体系结构。 实际上,它计划通过包括存储单元来增加 RNN 的体系结构,该存储单元允许保存有关长期时间依赖性的信息。 +该模型使用 LSTM 实现 RNN 的架构。 实际上,它计划通过包括存储单元来增加 RNN 的架构,该存储单元允许保存有关长期时间依赖性的信息。 TensorFlow 库允许您通过以下命令创建 LSTM: @@ -722,7 +722,7 @@ tf.nn.seq2seq.sequence_loss_by_example ``` -它计算平均每个单词的*困惑度*,它的值衡量模型的准确性(值越小则表示最佳性能),并将在整个训练过程中进行监控。 +它计算平均每个单词的*困惑度*,它的值衡量模型的准确性(值越小则表示最佳表现),并将在整个训练过程中进行监控。 ## 运行代码 @@ -803,4 +803,4 @@ Test Perplexity: 117.171 在本章中,我们概述了深度学习技术,研究了使用中的两种深度学习架构,即 CNN 和 RNN。 通过 TensorFlow 库,我们开发了用于图像分类问题的卷积神经网络架构。 本章的最后一部分专门介绍 RNN,我们在其中描述了 TensorFlow 的 RNN 教程,其中建立了 LSTM 网络以预测英语句子中的下一个单词。 -下一章介绍了用于 GPU 计算的 TensorFlow 功能,并介绍了 *TensorFlow 服务*,这是一种用于机器学习模型的高性能,开源服务系统,专为生产环境设计,并针对 [TensorFlow](https://www.tensorflow.org/) 进行了优化。 \ No newline at end of file +下一章介绍了用于 GPU 计算的 TensorFlow 功能,并介绍了 *TensorFlow 服务*,这是一种用于机器学习模型的高表现,开源服务系统,专为生产环境设计,并针对 [TensorFlow](https://www.tensorflow.org/) 进行了优化。 \ No newline at end of file diff --git a/docs/get-start-tf/ch06.md b/docs/get-start-tf/ch06.md index fac61d3f..0afbd7ec 100644 --- a/docs/get-start-tf/ch06.md +++ b/docs/get-start-tf/ch06.md @@ -10,11 +10,11 @@ # GPU 编程 -在第 5 章,“深度学习”中,我们针对 NLP 应用训练了**循环神经网络**(**RNN**), 深度学习应用程序可能需要大量计算。 但是,您可以通过**图形处理单元**(**GPU**)使用并行编程技术来减少训练时间。 实际上,现代图形单元的计算资源使它们能够执行并行代码部分,从而确保了高性能。 +在第 5 章,“深度学习”中,我们针对 NLP 应用训练了**循环神经网络**(**RNN**), 深度学习应用可能需要大量计算。 但是,您可以通过**图形处理单元**(**GPU**)使用并行编程技术来减少训练时间。 实际上,现代图形单元的计算资源使它们能够执行并行代码部分,从而确保了高性能。 -GPU 编程模型是一种编程策略,包括将 CPU 替换为 GPU 以加速各种应用程序的执行。 该策略的应用范围非常广泛,并且每天都在增长。 目前,GPU 能够减少跨平台(从汽车到手机,从平板电脑到无人机和机器人)的应用程序执行时间。 +GPU 编程模型是一种编程策略,包括将 CPU 替换为 GPU 以加速各种应用的执行。 该策略的应用范围非常广泛,并且每天都在增长。 目前,GPU 能够减少跨平台(从汽车到手机,从平板电脑到无人机和机器人)的应用执行时间。 -下图显示了 GPU 编程模型如何工作。 在该应用程序中,有一些调用告诉 CPU 放弃代码 GPU 的特定部分,并使其运行以提高执行速度。 此类特定部分依赖两个 GPU 的原因取决于 GPU 体系结构提供的速度。 GPU 具有许多**流式多处理器**(**SMP**),每个处理器都具有许多计算核心。 这些内核借助**单指令多线程**(**SIMT**)调用能够执行 ALU 和其他操作,从而大大减少了执行时间。 +下图显示了 GPU 编程模型如何工作。 在该应用中,有一些调用告诉 CPU 放弃代码 GPU 的特定部分,并使其运行以提高执行速度。 此类特定部分依赖两个 GPU 的原因取决于 GPU 架构提供的速度。 GPU 具有许多**流式多处理器**(**SMP**),每个处理器都具有许多计算核心。 这些内核借助**单指令多线程**(**SIMT**)调用能够执行 ALU 和其他操作,从而大大减少了执行时间。 ![GPU programming](img/image_06_001.jpg) @@ -394,7 +394,7 @@ $>bazel-bin/tensorflow_serving/example/mnist_inference --port=9000 /tmp/mnist_mo ## 测试服务 -要测试服务器,我们使用[`mnist_client.py`](https://github.com/tensorflow/serving/blob/master/tensorflow_serving/example/mnist_client.py)实用程序。 +要测试服务器,我们使用[`mnist_client.py`](https://github.com/tensorflow/serving/blob/master/tensorflow_serving/example/mnist_client.py)工具。 该客户端下载 MNIST 测试数据,将其作为请求发送到服务器,并计算推断错误率。 -- GitLab