From 96ebacc35843ea5bdcb8c7c5acf0d864b60299c1 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Fri, 11 Sep 2020 16:41:46 +0800 Subject: [PATCH] 2020-09-11 16:41:46 --- docs/get-start-tf/ch00.md | 2 +- docs/get-start-tf/ch03.md | 16 ++++++------- docs/get-start-tf/ch04.md | 50 +++++++++++++++++++-------------------- docs/get-start-tf/ch05.md | 2 +- docs/get-start-tf/ch06.md | 2 +- 5 files changed, 36 insertions(+), 36 deletions(-) diff --git a/docs/get-start-tf/ch00.md b/docs/get-start-tf/ch00.md index f274b711..e3940ad4 100644 --- a/docs/get-start-tf/ch00.md +++ b/docs/get-start-tf/ch00.md @@ -28,7 +28,7 @@ TensorFlow 是一个开源软件库,用于实现机器学习和深度学习系 第 3 章,“机器学习入门”,介绍了一些机器学习模型。 我们开始实现线性回归算法,该算法与数据之间的建模关系有关。 本章的主要重点是解决机器学习中的两个基本问题。 分类,即如何将每个新输入分配给可能的给定类别之一; 数据聚类,这是将一组对象进行分组的任务,以使同一组中的对象比其他组中的对象更相似。 -第 4 章,“神经网络介绍”提供了神经网络的快速详细介绍。 这些是代表元件之间的互连的数学模型,即人工神经元。 它们是在某种程度上模仿活神经元特性的数学结构。 神经网络为深度学习算法的架构奠定了基础。 然后实现了两种基本类型的神经网络:用于分类问题的单层感知器和多层感知器。 +第 4 章,“神经网络介绍”提供了神经网络的快速详细介绍。 这些是代表元件之间的互连的数学模型,即人工神经元。 它们是在某种程度上模仿活神经元特性的数学结构。 神经网络为深度学习算法的架构奠定了基础。 然后实现了两种基本类型的神经网络:用于分类问题的单层感知机和多层感知机。 第 5 章,“深度学习”概述了深度学习算法。 直到最近几年,深度学习才收集了几年前难以想象的大量结果。 我们将展示如何实现两种基本的深度学习架构,即卷积神经网络(CNN)和递归神经网络(RNN),分别用于图像识别和语音翻译问题。 diff --git a/docs/get-start-tf/ch03.md b/docs/get-start-tf/ch03.md index 4ec23ffa..1fd9ca4f 100644 --- a/docs/get-start-tf/ch03.md +++ b/docs/get-start-tf/ch03.md @@ -5,7 +5,7 @@ * 线性回归 * MNIST 数据集 * 分类器 -* 最近邻居算法 +* 最近邻算法 * 数据聚类 * k-均值算法 @@ -123,8 +123,8 @@ cost_function = tf.reduce_mean(tf.square(y - y_point)) 为了使`cost_function`最小化,我们使用*梯度下降*的优化算法。 给定几个变量的数学函数,梯度下降允许找到该函数的局部最小值。 该技术如下: -* **在函数域的任意第一点评估**,函数本身及其梯度。 梯度表示函数趋向于最小的方向。 -* **在渐变指示的方向上选择**第二点。 如果此第二点的函数的值小于在第一点计算的值,则下降可以继续。 +* **在函数域的任意第一个点评估函数本身及其梯度**。 梯度表示函数趋向于最小的方向。 +* **在渐变指示的方向上选择第二个点**。 如果此第二点的函数的值小于在第一点计算的值,则下降可以继续。 您可以参考下图来直观地了解算法: @@ -352,7 +352,7 @@ MNIST 的数字八 3. 在训练集上训练算法,并通过验证设置任何控制参数。 4. 通过应用一组新实例(测试集)评估分类器的准确性和性能。 -## 最近邻居算法 +## 最近邻算法 **K 最近邻**(**KNN**)是用于分类或回归的监督学习算法。 它是一个系统,根据其与内存中存储的对象之间的距离来分配测试样品的类别。 @@ -360,7 +360,7 @@ MNIST 的数字八 ![The nearest neighbor algorithm](img/B05474_03_09.jpg) -`n`是空间的尺寸。 这种分类方法的优点是能够对类别*无法线性分离*的对象进行分类。 考虑到训练数据*的*小扰动*不会显着影响*的结果,因此这是一个稳定的分类器。 但是,最明显的缺点是它不能提供真正的数学模型。 相反,对于每个新分类,应通过将新数据添加到所有初始实例并针对所选 K 值重复计算过程来执行。 +`n`是空间的尺寸。 这种分类方法的优点是能够对类别*无法线性分离*的对象进行分类。 考虑到训练数据的*小扰动*不会显着影响结果,因此这是一个稳定的分类器。 但是,最明显的缺点是它不能提供真正的数学模型。 相反,对于每个新分类,应通过将新数据添加到所有初始实例并针对所选 K 值重复计算过程来执行。 此外,它需要相当大量的数据才能进行实际的预测,并且对分析数据的噪声敏感。 @@ -434,7 +434,7 @@ tf.reduce_sum(x, [0, 1]) ==> 6 ``` -最后,为了最小化距离函数,我们使用`arg_min`,它返回距离最小(最近邻居)的索引: +最后,为了最小化距离函数,我们使用`arg_min`,它返回距离最小(最近邻)的索引: ```py pred = tf.arg_min(distance, 0) @@ -584,7 +584,7 @@ k-means 是最常见和最简单的*聚类算法*之一,它可以根据对象 4. 重新计算每个群集的质心。 5. 直到质心不变。 -k 均值的流行来自其*收敛速度*和其*易于实现。* 就解决方案的质量而言,该算法不能保证实现全局最优。 最终解决方案*的质量在很大程度上取决于*集群的*初始集*,并且在实践中可能会获得更差的全局最优解。 由于该算法非常快,因此您可以多次应用它,并提供解决方案,您可以从中选择最满意的一种。 该算法的另一个缺点是,它要求您选择要查找的簇数(k)。 +k 均值的流行来自其*收敛速度*和其*易于实现*。 就解决方案的质量而言,该算法不能保证实现全局最优。 最终解决方案的质量在很大程度上取决于集群的*初始集*,并且在实践中可能会获得更差的全局最优解。 由于该算法非常快,因此您可以多次应用它,并提供解决方案,您可以从中选择最满意的一种。 该算法的另一个缺点是,它要求您选择要查找的簇数(`k`)。 如果数据不是自然分区的,您将最终得到奇怪的结果。 此外,该算法仅在数据中存在可识别的球形簇时才有效。 @@ -900,7 +900,7 @@ plt.show() # 摘要 -在本章中,我们开始探索 TensorFlow 在机器学习中一些典型问题的潜力。 使用*线性回归*算法,解释了*成本函数*和使用*梯度下降*进行优化的重要概念。 然后,我们描述了手写数字的数据集 MNIST。 我们还使用*最近邻居*算法实现了多类分类器,该分类器属于机器学习*监督学习*类别。 然后,本章以实现数据聚类问题的 k-means 算法为例,以*无监督学习*为例。 +在本章中,我们开始探索 TensorFlow 在机器学习中一些典型问题的潜力。 使用*线性回归*算法,解释了*成本函数*和使用*梯度下降*进行优化的重要概念。 然后,我们描述了手写数字的数据集 MNIST。 我们还使用*最近邻*算法实现了多类分类器,该分类器属于机器学习*监督学习*类别。 然后,本章以实现数据聚类问题的 k-means 算法为例,以*无监督学习*为例。 在下一章中,我们将介绍神经网络。 这些是代表定义为*人工神经元*的元素之间相互联系的数学模型,即模仿活神经元特性的数学构造。 diff --git a/docs/get-start-tf/ch04.md b/docs/get-start-tf/ch04.md index 10f91dd9..0fbaee62 100644 --- a/docs/get-start-tf/ch04.md +++ b/docs/get-start-tf/ch04.md @@ -3,11 +3,11 @@ 在本章中,我们将介绍以下主题: * 什么是神经网络? -* 单层感知器 +* 单层感知机 * 逻辑回归 -* 多层感知器 -* 多层感知器分类 -* 多层感知器功能逼近 +* 多层感知机 +* 多层感知机分类 +* 多层感知机功能逼近 # 什么是人工神经网络? @@ -21,17 +21,17 @@ ANN 原理图 ## 神经网络架构 -连接节点的*方式,*总层数*,即输入和输出之间的节点级别以及每层神经元的数量-所有这些都定义了 *神经网络的架构*。 例如,在**多层网络**中(我们将在本章的第二部分中介绍这些网络),可以识别层的人工神经元,使得:* +连接节点的方式,*总层数*,即输入和输出之间的节点级别,以及每层神经元的数量-所有这些都定义了*神经网络的架构*。 例如,在**多层网络**中(我们将在本章的第二部分中介绍这些网络),可以识别层的人工神经元,使得: * 每个神经元都与下一层的所有神经元相连 * 属于同一层的神经元之间没有连接 * 层数和每层神经元的数量取决于要解决的问题 -现在,我们开始探索神经网络模型,介绍最简单的神经网络模型:单层感知器或所谓的罗森布拉特感知器。 +现在,我们开始探索神经网络模型,介绍最简单的神经网络模型:单层感知机或所谓的罗森布拉特感知机。 -# 单层感知器 +# 单层感知机 -单层感知器是第一个神经网络模型,由 Frank Rosenblatt 于 1958 年提出。 在此模型中,神经元局部记忆的内容由权重向量`W = (w1, w2,......, wn)`组成。 该计算是在计算输入向量`X =(x1, x2,......, xn)`的总和之后执行的,每个输入向量均与权重向量的相应元素相乘; 那么输出中提供的值(即加权总和)将是激活函数的输入。 如果结果大于某个阈值,则此函数返回`1`,否则返回`-1`。 在下图中,激活功能是所谓的`sign`功能: +单层感知机是第一个神经网络模型,由 Frank Rosenblatt 于 1958 年提出。 在此模型中,神经元局部记忆的内容由权重向量`W = (w1, w2,......, wn)`组成。 该计算是在计算输入向量`X =(x1, x2,......, xn)`的总和之后执行的,每个输入向量均与权重向量的相应元素相乘; 那么输出中提供的值(即加权总和)将是激活函数的输入。 如果结果大于某个阈值,则此函数返回`1`,否则返回`-1`。 在下图中,激活功能是所谓的`sign`功能: ```py +1 x > 0 @@ -40,23 +40,23 @@ sign(x)= ``` -可以使用其他激活函数,最好是非线性激活函数(例如`sigmoid`函数,我们将在下一部分中看到)。 网络的学习过程是迭代的:通过使用称为训练集的选定集,可以为每个学习周期(称为时期)稍微修改突触权重。 在每个循环中,必须修改权重以最小化成本函数,该成本函数特定于所考虑的问题。 最后,当感知器已在训练集上进行训练后,将在其他输入(测试集)上对其进行测试,以验证其概括能力。 +可以使用其他激活函数,最好是非线性激活函数(例如`sigmoid`函数,我们将在下一部分中看到)。 网络的学习过程是迭代的:通过使用称为训练集的选定集,可以为每个学习周期(称为时期)稍微修改突触权重。 在每个循环中,必须修改权重以最小化成本函数,该成本函数特定于所考虑的问题。 最后,当感知机已在训练集上进行训练后,将在其他输入(测试集)上对其进行测试,以验证其概括能力。 ![Single Layer Perceptron](img/B05474_04_02.jpg) -Rosemblatt 的感知器架构 +Rosemblatt 的感知机架构 现在让我们看看如何使用 TensorFlow 对图像分类问题实现单层神经网络。 # 逻辑回归 -该算法与我们在[第 3 章](../Text/ch03.html "Chapter 3\. Starting with Machine Learning")和*从机器学习*开始看到的规范线性回归无关,但是它是允许我们解决监督分类问题的算法。 实际上,为了估计因变量,现在我们利用所谓的逻辑函数或 S 形。 正是由于这个功能,我们将此算法称为逻辑回归。 乙状结肠功能具有以下模式: +该算法与我们在第 3 章“机器学习入门”开始看到的规范线性回归无关,但是它是允许我们解决监督分类问题的算法。 实际上,为了估计因变量,现在我们利用所谓的逻辑函数或 S 形。 正是由于这个功能,我们将此算法称为逻辑回归。 乙状结肠功能具有以下模式: ![The logistic regression](img/B05474_04_03.jpg) 乙状结肠功能 -如我们所见,因变量的取值严格在`0`和`1`之间,这正是为我们服务的内容。 对于*逻辑回归*,我们希望我们的函数告诉我们属于我们班级某个特定元素的*概率*是多少。 我们再次记得,通过神经网络对*监督的*学习被配置为权重优化的*迭代过程; 然后根据训练集的网络性能对它们进行修改。 实际上,其目标是使*损失函数*最小化,该函数表明网络行为偏离所需行为的程度。 然后,在*测试集*上验证网络的性能,该测试集由除受过训练的图像以外的其他图像组成。* +如我们所见,因变量的取值严格在`0`和`1`之间,这正是为我们服务的内容。 对于*逻辑回归*,我们希望我们的函数告诉我们属于我们班级某个特定元素的*概率*是多少。 我们再次记得,通过神经网络对*监督*学习被配置为权重优化的*迭代过程*; 然后根据训练集的网络性能对它们进行修改。 实际上,其目标是使*损失函数*最小化,该函数表明网络行为偏离所需行为的程度。 然后,在*测试集*上验证网络的性能,该测试集由除受过训练的图像以外的其他图像组成。 我们将要实施的培训的基本步骤如下: @@ -64,7 +64,7 @@ Rosemblatt 的感知器架构 * 对于训练集的每个元素,都会计算*误差*,即期望输出与实际输出之间的差。 此错误用于调整权重。 * 重复该过程,以随机顺序将训练集的所有示例重新提交给网络,直到整个训练集上的错误不小于某个阈值,或者直到达到最大迭代次数为止。 -现在让我们详细了解如何使用 TensorFlow 实现逻辑回归。 我们要解决的问题是对来自 MNIST 数据集的图像进行分类,如[第 3 章](../Text/ch03.html "Chapter 3\. Starting with Machine Learning"),*从机器学习开始的说明*是手写数字的数据库。 +现在让我们详细了解如何使用 TensorFlow 实现逻辑回归。 我们要解决的问题是对来自 MNIST 数据集的图像进行分类,如第 3 章,“机器学习入门”中的手写数字的数据库。 ## TensorFlow 实施 @@ -79,7 +79,7 @@ Rosemblatt 的感知器架构 ``` -2. 我们使用[第 3 章](../Text/ch03.html "Chapter 3\. Starting with Machine Learning")和*从机器学习*开始引入的 *MNIST 数据集*部分中的`input_data.read`函数,将图像上传到我们的问题中: +2. 我们使用第 3 章“机器学习入门”引入的 *MNIST 数据集*部分中的`input_data.read`函数,将图像上传到我们的问题中: ```py mnist = input_data.read_data_sets("/tmp/data/", one_hot=True) @@ -429,9 +429,9 @@ with tf.Session() as sess: ``` -# 多层感知器 +# 多层感知机 -更复杂和有效的体系结构是**多层感知器**(**MLP**)。 它基本上由多层感知器组成,因此至少存在*个隐藏的* *层*,即**未连接到输入或连接到** 网络的输出: +更复杂和有效的体系结构是**多层感知机**(**MLP**)。 它基本上由多层感知机组成,因此至少存在*隐藏的层*,即**未连接到网络的输入或输出**: ![Multi Layer Perceptron](img/B05474_04_05.jpg) @@ -447,7 +447,7 @@ MLP 架构 在以下示例中,我们显示了针对图像分类问题(MNIST)的 MLP 实现。 -## 多层感知器分类 +## 多层感知机分类 导入必要的库: @@ -521,8 +521,8 @@ n_classes = 10 每个选择都必须基于类似应用程序的经验,例如: -* 当增加隐藏层的数量时,我们还应该在学习阶段增加必要的训练集的大小,并增加要更新的连接数。 这导致训练时间中*增加*。 -* 另外,如果隐藏层中的神经元太多,不仅有更多的权重需要更新,而且网络还倾向于从训练示例集中学习太多,从而导致*的泛化性很差* 能力。 但是,如果隐藏的神经元太少,即使使用训练集,网络*也无法学习*。 +* 当增加隐藏层的数量时,我们还应该在学习阶段增加必要的训练集的大小,并增加要更新的连接数。 这导致训练时间*增加*。 +* 另外,如果隐藏层中的神经元太多,不仅有更多的权重需要更新,而且网络还倾向于从训练示例集中学习太多,从而导致*泛化能力很差*。 但是,如果隐藏的神经元太少,即使使用训练集,网络*也无法学习*。 ### 建立模型 @@ -561,7 +561,7 @@ layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x,h),bias_layer_1)) ``` -它通过`activation`函数将其输出发送到下一层的神经元。 必须说,每个神经元的功能可能不同,但是在实践中,我们对所有神经元(通常为 S 型)采用一个共同的特征。 有时输出神经元具有线性激活功能。 有趣的是,隐藏层中神经元的激活函数不能是线性的,因为在这种情况下,MLP 网络将等效于具有两层的网络,因此不再是 MLP 类型。 第二层必须执行与第一相同的步骤*。* +它通过`activation`函数将其输出发送到下一层的神经元。 必须说,每个神经元的功能可能不同,但是在实践中,我们对所有神经元(通常为 S 型)采用一个共同的特征。 有时输出神经元具有线性激活功能。 有趣的是,隐藏层中神经元的激活函数不能是线性的,因为在这种情况下,MLP 网络将等效于具有两层的网络,因此不再是 MLP 类型。 第二层必须执行与第一相同的步骤。 第二中间层由权重张量`[256 × 256]`的形状表示: @@ -755,7 +755,7 @@ TensorFlow 提供了优化器基类来计算损失的梯度并将梯度应用于 ![Launch the session](img/B05474_04_06.jpg) -多层感知器的训练阶段 +多层感知机的训练阶段 ### 源代码 @@ -844,7 +844,7 @@ with tf.Session() as sess: ``` -## 多层感知器功能逼近 +## 多层感知机功能逼近 在以下示例中,我们实现了一个 MLP 网络,该网络将能够学习任意函数`f (x)`的趋势。 在训练阶段,网络将必须从一组已知点中学习`x`和`f (x)`,而在测试阶段,网络将仅从`x`值中扣除`f (x)`的值。 @@ -1061,10 +1061,10 @@ plt.show() ![Launch the session](img/B05474_04_08.jpg) -多层感知器的训练阶段 +多层感知机的训练阶段 # 摘要 -在本章中,我们介绍了*人工神经网络*。 人工神经元是一种数学模型,在某种程度上模仿了活神经元的特性。 网络的每个神经元都有一个非常简单的操作,包括接收到的信号总量超过激活阈值时变为活动状态。 学习过程通常是*监督的*:神经网络使用训练集来推断输入和相应输出之间的关系,而学习算法会修改网络的权重以使*最小化 表示与*训练集*有关的*预测误差*的成本函数*。 如果训练成功,则即使事先不知道输出结果,神经网络也将能够做出预测。 在本章中,我们使用 TensorFlow 实现了一些涉及神经网络的示例。 在使用 *Rosemblatt's Perceptron* 进行分类的问题中,我们已经看到神经网络作为 *logistic 回归*算法来解决分类和回归问题。 在本章的最后,我们介绍了*多层感知器*架构,在实现*图像分类器*之前,然后是*仿真器的实现中,我们已经看到了该架构的实际应用。 数学函数*。 +在本章中,我们介绍了*人工神经网络*。 人工神经元是一种数学模型,在某种程度上模仿了活神经元的特性。 网络的每个神经元都有一个非常简单的操作,包括接收到的信号总量超过激活阈值时变为活动状态。 学习过程通常是*监督的*:神经网络使用训练集来推断输入和相应输出之间的关系,而学习算法会修改网络的权重以使成本函数*最小化*,它表示*训练集*有关的*预测误差*。 如果训练成功,则即使事先不知道输出结果,神经网络也将能够做出预测。 在本章中,我们使用 TensorFlow 实现了一些涉及神经网络的示例。 在使用 *Rosemblatt 的感知机*进行分类的问题中,我们已经看到神经网络作为*逻辑回归*算法来解决分类和回归问题。 在本章的最后,在实现*图像分类器*之前,我们介绍了*多层感知机*架构,然后在*数学函数仿真器*的实现中,我们已经看到了该架构的实际应用。 -在下一章中,我们最后介绍深度学习模型; 我们将研究和实现更复杂的神经网络架构,例如卷积神经网络和递归神经网络。** \ No newline at end of file +在下一章中,我们最后介绍深度学习模型; 我们将研究和实现更复杂的神经网络架构,例如卷积神经网络和递归神经网络。 \ No newline at end of file diff --git a/docs/get-start-tf/ch05.md b/docs/get-start-tf/ch05.md index 81c76341..585f6b76 100644 --- a/docs/get-start-tf/ch05.md +++ b/docs/get-start-tf/ch05.md @@ -358,7 +358,7 @@ pred = tf.add(tf.matmul(dense1, wout), bout) #### 测试和训练模型 -必须将证据转换为 10 种可能类别中每一种的概率(该方法与我们在[第 4 章](../Text/ch04.html "Chapter 4\. Introducing Neural Networks")和*神经网络介绍*中看到的方法相同)。 因此,我们定义了成本函数,该函数通过应用`softmax`函数来评估模型的质量: +必须将证据转换为 10 种可能类别中每一种的概率(该方法与我们在第 4 章和*神经网络介绍*中看到的方法相同)。 因此,我们定义了成本函数,该函数通过应用`softmax`函数来评估模型的质量: ```py cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y)) diff --git a/docs/get-start-tf/ch06.md b/docs/get-start-tf/ch06.md index 0e8f9469..2cd31104 100644 --- a/docs/get-start-tf/ch06.md +++ b/docs/get-start-tf/ch06.md @@ -10,7 +10,7 @@ # GPU 编程 -在[第 5 章](../Text/ch05.html "Chapter 5\. Deep Learning"),*深度学习*中,我们针对 NLP 应用训练了**递归神经网络**(**RNN**), 深度学习应用程序可能需要大量计算。 但是,您可以通过**图形处理单元**(**GPU**)使用并行编程技术来减少训练时间。 实际上,现代图形单元的计算资源使它们能够执行并行代码部分,从而确保了高性能。 +在第 5 章,*深度学习*中,我们针对 NLP 应用训练了**递归神经网络**(**RNN**), 深度学习应用程序可能需要大量计算。 但是,您可以通过**图形处理单元**(**GPU**)使用并行编程技术来减少训练时间。 实际上,现代图形单元的计算资源使它们能够执行并行代码部分,从而确保了高性能。 GPU 编程模型是一种编程策略,包括将 CPU 替换为 GPU 以加速各种应用程序的执行。 该策略的应用范围非常广泛,并且每天都在增长。 目前,GPU 能够减少跨平台(从汽车到手机,从平板电脑到无人机和机器人)的应用程序执行时间。 -- GitLab