From bdd892004c14b2b3df55eecba8b4fae91fb987f5 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Sun, 13 Sep 2020 00:06:02 +0800 Subject: [PATCH] 2020-09-13 00:06:01 --- docs/get-start-tf/ch01.md | 12 ++++++------ docs/get-start-tf/ch02.md | 4 ++-- docs/get-start-tf/ch03.md | 4 ++-- docs/get-start-tf/ch04.md | 24 ++++++++++++------------ docs/get-start-tf/ch05.md | 22 +++++++++++----------- docs/get-start-tf/ch06.md | 8 ++++---- 6 files changed, 37 insertions(+), 37 deletions(-) diff --git a/docs/get-start-tf/ch01.md b/docs/get-start-tf/ch01.md index f5a441ec..a7b789fd 100644 --- a/docs/get-start-tf/ch01.md +++ b/docs/get-start-tf/ch01.md @@ -40,7 +40,7 @@ 在无监督学习中,系统提供的训练示例*未使用相关所属类别标记*。 因此,该系统开发并组织数据,在其中寻找*共同特征*,然后根据其内部知识对其进行更改。 -无监督学习算法特别用于*聚类问题*,其中存在许多输入示例,您不知道先验类,甚至不知道可能的类是什么,或者不知道他们有多少类。 当您无法使用监督学习时,这是很明显的情况,因为您不知道先验的班级数量。 +无监督学习算法特别用于*聚类问题*,其中存在许多输入示例,您不知道先验类,甚至不知道可能的类是什么,或者不知道他们有多少类。 当您无法使用监督学习时,这是很明显的情况,因为您不知道先验的类别数量。 ![Unsupervised learning](img/image_01_002.jpg) @@ -315,7 +315,7 @@ finish ## 导入库 -外部库通过`import [library name]`导入。 您也可以使用`[libraryname] import [funcname]`表格导入单个功能。 这是一个例子: +外部库通过`import [library name]`导入。 您也可以使用`[libraryname] import [funcname]`表格导入单个函数。 这是一个例子: ```py import random @@ -330,7 +330,7 @@ randomint = random.randint(1, 100) TensorFlow Python API 支持 Python 2.7 和 Python 3.3+。 GPU 版本(仅 Linux)需要 Cuda Toolkit >= 7.0 和 cuDNN >= v2。 -在 Python 环境中工作时,建议您使用`virtualenv`。 它将隔离您的 Python 配置用于不同的项目; 使用`virtualenv`不会覆盖 TensorFlow 所需的 Python 软件包的现有版本。 +在 Python 环境中工作时,建议您使用`virtualenv`。 它将隔离您的 Python 配置用于不同的项目; 使用`virtualenv`不会覆盖 TensorFlow 所需的 Python 包的现有版本。 ## 在 Mac 或 Linux 发行版上安装 @@ -384,7 +384,7 @@ TensorFlow Python API 支持 Python 2.7 和 Python 3.3+。 GPU 版本(仅 Linu ``` -如果您想将 GPU 卡与 TensorFlow 一起使用,请安装另一个软件包。 我建议您访问官方文档,以查看您的 GPU 是否满足支持 TensorFlow 所需的规格。 +如果您想将 GPU 卡与 TensorFlow 一起使用,请安装另一个包。 我建议您访问官方文档,以查看您的 GPU 是否满足支持 TensorFlow 所需的规格。 ### 注意 @@ -598,7 +598,7 @@ TensorFlow 支持这些构造和这些运算符。 让我们详细看看 TensorF * **正常边**:它们是数据结构(张量)的载体,其中一个操作的输出(来自一个节点)成为另一操作的输入。 * **特殊边**:这些边不是节点(运算符)的输出与另一节点的输入之间的数据载体。 特殊边表示两个节点之间的控制依赖关系。 假设我们有两个节点`A`和`B`,并且有一个特殊的边将`A`连接到`B`; 这意味着`B`仅在`A`中的操作结束时才开始操作。 数据流图中使用特殊边来设置张量上的操作之间的事前关系。 -让我们更详细地探讨数据流图中的一些功能: +让我们更详细地探讨数据流图中的一些组件: * **操作**:这表示一种抽象计算,例如对矩阵进行相加或相乘。 一个操作管理张量。 它可以是多态的:同一操作可以操纵不同的张量元素类型。 例如,添加两个`int32`张量,添加两个浮点张量,依此类推。 * **内核**:这表示该操作的具体实现。 内核定义特定设备上操作的实现。 例如,加矩阵运算可以具有 CPU 实现和 GPU 实现。 在以下部分中,我们介绍了在 TensorFlow 中创建`del`执行图的会话概念。 让我们解释一下这个主题: @@ -608,7 +608,7 @@ TensorFlow 支持这些构造和这些运算符。 让我们详细看看 TensorF ![Data Flow Graphs](img/image_01_006.jpg) -数据流图中的功能 +数据流图中的组件 # TensorFlow 编程模型 diff --git a/docs/get-start-tf/ch02.md b/docs/get-start-tf/ch02.md index 8014fb18..ebf94b94 100644 --- a/docs/get-start-tf/ch02.md +++ b/docs/get-start-tf/ch02.md @@ -675,7 +675,7 @@ plt.show() # 计算梯度 -TensorFlow 具有解决其他更复杂任务的功能。 例如,我们将使用数学运算符来计算`y`相对于其表达式`x`参数的导数。 为此,我们使用`tf.gradients()`功能。 +TensorFlow 具有解决其他更复杂任务的功能。 例如,我们将使用数学运算符来计算`y`相对于其表达式`x`参数的导数。 为此,我们使用`tf.gradients()`函数。 让我们考虑数学函数`y = 2*x²`。 我们要计算相对于`x=1`的梯度`dy/dx`。 以下是计算此梯度的代码: @@ -1070,7 +1070,7 @@ def laplace(x): ``` -这些功能描述了模型的物理性质,也就是说,随着波浪的产生和在池塘中的传播。 我不会详细介绍这些功能,对它们的理解超出了本书的范围。 +这些函数描述了模型的物理性质,也就是说,随着波浪的产生和在池塘中的传播。 我不会详细介绍这些函数,对它们的理解超出了本书的范围。 下图显示了雨滴落下后池塘上的波浪。 diff --git a/docs/get-start-tf/ch03.md b/docs/get-start-tf/ch03.md index bd833cce..c2e68a51 100644 --- a/docs/get-start-tf/ch03.md +++ b/docs/get-start-tf/ch03.md @@ -781,7 +781,7 @@ for step in xrange(num_steps): ``` -为了显示结果,我们实现以下功能: +为了显示结果,我们实现以下函数: ```py display_partition(x_values,y_values,assignment_values) @@ -790,7 +790,7 @@ display_partition(x_values,y_values,assignment_values) 这将使用训练集的`x_values`和`y_values`向量以及`assignemnt_values`向量来绘制聚类。 -此可视化功能的代码如下: +此可视化函数的代码如下: ```py def display_partition(x_values,y_values,assignment_values): diff --git a/docs/get-start-tf/ch04.md b/docs/get-start-tf/ch04.md index 415f1b8d..c835b036 100644 --- a/docs/get-start-tf/ch04.md +++ b/docs/get-start-tf/ch04.md @@ -31,7 +31,7 @@ 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 @@ -50,15 +50,15 @@ Rosemblatt 的感知机架构 # 逻辑回归 -该算法与我们在第 3 章“机器学习入门”开始看到的规范线性回归无关,但是它是允许我们解决监督分类问题的算法。 实际上,为了估计因变量,现在我们利用所谓的逻辑函数或 Sigmoid。 正是由于这个功能,我们将此算法称为逻辑回归。 乙状结肠功能具有以下模式: +该算法与我们在第 3 章“机器学习入门”开始看到的规范线性回归无关,但是它是允许我们解决监督分类问题的算法。 实际上,为了估计因变量,现在我们利用所谓的逻辑函数或 Sigmoid。 正是由于这个函数,我们将此算法称为逻辑回归。 Sigmoid 函数具有以下模式: ![The logistic regression](img/B05474_04_03.jpg) -乙状结肠功能 +Sigmoid 函数 -如我们所见,因变量的取值严格在`0`和`1`之间,这正是为我们服务的内容。 对于*逻辑回归*,我们希望我们的函数告诉我们属于我们班级某个特定元素的*概率*是多少。 我们再次记得,通过神经网络对*监督*学习被配置为权重优化的*迭代过程*; 然后根据训练集的网络表现对它们进行修改。 实际上,其目标是使*损失函数*最小化,该函数表明网络行为偏离所需行为的程度。 然后,在*测试集*上验证网络的表现,该测试集由除受过训练的图像以外的其他图像组成。 +如我们所见,因变量的取值严格在`0`和`1`之间,这正是为我们服务的内容。 对于*逻辑回归*,我们希望我们的函数告诉我们属于我们的类别某个特定元素的*概率*是多少。 我们再次记得,通过神经网络对*监督*学习被配置为权重优化的*迭代过程*; 然后根据训练集的网络表现对它们进行修改。 实际上,其目标是使*损失函数*最小化,该函数表明网络行为偏离所需行为的程度。 然后,在*测试集*上验证网络的表现,该测试集由除受过训练的图像以外的其他图像组成。 -我们将要实施的培训的基本步骤如下: +我们将要实现的培训的基本步骤如下: * 权重在训练开始时用随机值初始化。 * 对于训练集的每个元素,都会计算*误差*,即期望输出与实际输出之间的差。 此错误用于调整权重。 @@ -124,7 +124,7 @@ y = tf.placeholder("float", [None, 10]) 为了给每个图像分配概率,我们将使用所谓的 softmax 激活函数。 -`softmax`功能在两个主要步骤中指定: +`softmax`函数在两个主要步骤中指定: * 计算*证据*,即某个图像属于特定类别 * 将证据转换为属于 10 个可能类别中的每个类别的*概率* @@ -170,7 +170,7 @@ TensorFlow 的`tf.nn.softmax`函数提供了来自输入证据张量的基于概 ### 注意 -TensorFlow 提供了许多其他激活功能。 有关更好的参考,请参见[这里](https://www.tensorflow.org/versions/r0.8/api_docs/index.html)。 +TensorFlow 提供了许多其他激活函数。 有关更好的参考,请参见[这里](https://www.tensorflow.org/versions/r0.8/api_docs/index.html)。 为了训练我们的模型并知道何时有一个好的模型,我们必须定义如何定义模型的准确性。 我们的目标是尝试获取参数`W`和`b`的值,这些值会最小化指示模型有多糟糕的度量值。 @@ -206,7 +206,7 @@ optimizer = tf.train.GradientDescentOptimizer\ 现在是构建会话并启动我们的神经网络模型的时候了。 -我们修复了以下列表以可视化培训课程: +我们修复了以下列表以可视化培训过程: ```py avg_set = [] @@ -274,7 +274,7 @@ with tf.Session() as sess: ``` -让我们获得模式的准确性。 如果`y`值最高的索引与实数矢量中的`correct_prediction`均值使我们具有准确性,则是正确的。 我们需要使用测试集(`mnist.test`)运行准确性功能。 +让我们获得模式的准确性。 如果`y`值最高的索引与实数向量中的`correct_prediction`均值使我们具有准确性,则是正确的。 我们需要使用测试集(`mnist.test`)运行准确性函数。 我们使用`x`和`y`的关键图像和标签: @@ -561,7 +561,7 @@ layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x,h),bias_layer_1)) ``` -它通过`activation`函数将其输出发送到下一层的神经元。 必须说,每个神经元的功能可能不同,但是在实践中,我们对所有神经元(通常为 Sigmoid)采用一个共同的特征。 有时输出神经元具有线性激活功能。 有趣的是,隐藏层中神经元的激活函数不能是线性的,因为在这种情况下,MLP 网络将等效于具有两层的网络,因此不再是 MLP 类型。 第二层必须执行与第一相同的步骤。 +它通过`activation`函数将其输出发送到下一层的神经元。 必须说,每个神经元的特征可能不同,但是在实践中,我们对所有神经元(通常为 Sigmoid)采用一个共同的特征。 有时输出神经元具有线性激活函数。 有趣的是,隐藏层中神经元的激活函数不能是线性的,因为在这种情况下,MLP 网络将等效于具有两层的网络,因此不再是 MLP 类型。 第二层必须执行与第一相同的步骤。 第二中间层由权重张量`[256 × 256]`的形状表示: @@ -606,7 +606,7 @@ cost = tf.reduce_mean\ TensorFlow 函数`tf` `.nn.softmax_cross_entropy_with_logits`计算 softmax 层的成本。 仅在培训期间使用。 logits 是模型输出的未归一化对数概率(将 softmax 归一化之前输出的值)。 -使`cost`功能最小化的相应优化器是: +使`cost`函数最小化的相应优化器是: ```py optimizer = tf.train.AdamOptimizer\ @@ -1007,7 +1007,7 @@ sess.run(tf.initialize_all_variables()) ``` -现在我们可以启动学习课程: +现在我们可以启动学习过程: ```py errors = [] diff --git a/docs/get-start-tf/ch05.md b/docs/get-start-tf/ch05.md index edc2f178..66e50027 100644 --- a/docs/get-start-tf/ch05.md +++ b/docs/get-start-tf/ch05.md @@ -16,7 +16,7 @@ 有多种原因导致开发深度学习并将其置于机器学习范围内的关注焦点。 这些原因之一是硬件的进步,以及新处理器的可用性,例如图形处理单元(**GPU**),它们大大减少了训练网络所需的时间,降低了 10/20 的时间。 -另一个原因肯定是*越来越容易找到*,要在其上训练系统的*数据集*越多,这些数据集就需要训练一定深度和输入数据的高维结构。 深度学习包含一组方法,这些方法使系统可以在多个级别上获取数据的*分层表示*。 这是通过组合简单的单元(不是线性的)来实现的,每个简单的单元从输入级别开始将其自身级别的表示形式转换为更高级别的表示形式*更抽象*。 通过足够数量的这些转换,可以学习相当复杂的输入输出功能。 +另一个原因肯定是*越来越容易找到*,要在其上训练系统的*数据集*越多,这些数据集就需要训练一定深度和输入数据的高维结构。 深度学习包含一组方法,这些方法使系统可以在多个级别上获取数据的*分层表示*。 这是通过组合简单的单元(不是线性的)来实现的,每个简单的单元从输入级别开始将其自身级别的表示形式转换为更高级别的表示形式*更抽象*。 通过足够数量的这些转换,可以学习相当复杂的输入输出函数。 关于分类问题,例如最高级别的表示,突出显示与分类相关的输入数据方面,从而抑制那些对分类目的没有影响的方面。 @@ -42,7 +42,7 @@ character --> word --> word group --> clause --> sentence --> story 因此,深度学习架构是*多层架构*,它由简单的单元组成,所有单元都受训练,其中许多单元包含*非线性变换*。 每个单元都对其输入进行转换以改善其*属性*,以仅出于分类目的选择和放大相关方面,以及其*不变性*,即其倾向*忽略无关的方面*。 -因此,通过多级非线性转换,深度大约在 5 到 20 级之间,深度学习系统可以学习并实现极其复杂和复杂的功能,同时*对最小的相关细节非常敏感*,以及对输入数据无关方面的大变化非常不敏感,在对象识别的情况下,这些变化可能是:图像的背景,亮度或所表示对象的位置。 +因此,通过多级非线性转换,深度大约在 5 到 20 级之间,深度学习系统可以学习并实现极其复杂和复杂的特征,同时*对最小的相关细节非常敏感*,以及对输入数据无关方面的大变化非常不敏感,在对象识别的情况下,这些变化可能是:图像的背景,亮度或所表示对象的位置。 以下部分将借助 TensorFlow 说明两种重要的深度神经网络类型:**卷积神经网络**(**CNN**),主要针对分类问题,然后针对**自然语言处理**(**NLP**)问题的**循环神经网络**(**RNNs**)问题。 @@ -50,7 +50,7 @@ character --> word --> word group --> clause --> sentence --> story **卷积神经网络**(**CNN**)是面向神经网络的一种特殊类型的深度学习,在许多实际应用中都取得了优异的成绩,尤其是图像中的*对象识别*。 -实际上,CNN 被设计为处理以多个阵列形式表示的数据,例如*彩色图像*,可通过包含像素颜色强度的三个二维阵列表示。 CNN 与普通神经网络之间的实质区别在于,前者*在图像上直接操作*,而后者在*从图像中提取的特征上*。 因此,与普通神经网络不同,CNN 的输入将是*二维*,特征将是输入图像的像素。 +实际上,CNN 被设计为处理以多个数组形式表示的数据,例如*彩色图像*,可通过包含像素颜色强度的三个二维数组表示。 CNN 与普通神经网络之间的实质区别在于,前者*在图像上直接操作*,而后者在*从图像中提取的特征上*。 因此,与普通神经网络不同,CNN 的输入将是*二维*,特征将是输入图像的像素。 CNN 是几乎所有识别问题的主要方法。 这种类型的网络所提供的出色表现实际上已经促使诸如 Google 和 Facebook 之类的最大的技术公司投资于此类网络的研发项目,并开发和分发基于 CNN 的产品图像识别。 @@ -88,7 +88,7 @@ CNN 背后的概念之一是*本地连接*。 实际上,CNN 利用输入数据 ![CNN architecture](img/B05474_05_05.jpg) -多个功能图 +多个特征图 在上图中,我们看到了三个特征图。 当然,实际上它的数量会增加,甚至可以使用具有 20 或 40 个特征图的卷积层。 权重和偏差共享的一个巨大优势是卷积网络中涉及的参数的*显着降低*。 考虑我们的示例,对于每个特征图,我们需要 25 个权重(`5x5`)和一个偏差(共享)。 总共有 26 个参数。 假设我们有 20 个特征图,我们将定义 520 个参数。 在具有 784 个输入神经元和例如 30 个隐藏层神经元的完全连接的网络中,我们需要 30 个以上的`784x30`偏差权重,以达到总共 23.550 个参数。 @@ -100,7 +100,7 @@ CNN 背后的概念之一是*本地连接*。 实际上,CNN 利用输入数据 池化操作有助于简化从一层到下一层的信息 -显然,我们通常有更多的功能图,并且我们将最大池分别应用于每个功能图。 +显然,我们通常有更多的特征图,并且我们将最大池分别应用于每个特征图。 ![CNN architecture](img/B05474_05_07.jpg) @@ -143,7 +143,7 @@ CNN 架构架构 ``` -3. MNIST 数据输入(每个形状为`28x28`阵列像素): +3. MNIST 数据输入(每个形状为`28x28`数组像素): ```py n_input = 784 @@ -203,7 +203,7 @@ bc1 = tf.Variable(tf.random_normal([32])) ``` -回想一下,要识别图像,我们需要的不仅仅是功能图。 该数量仅是我们正在考虑的第一层要素地图的数量。 在我们的例子中,卷积层由 32 个特征图组成。 +回想一下,要识别图像,我们需要的不仅仅是特征图。 该数量仅是我们正在考虑的第一层特征图的数量。 在我们的例子中,卷积层由 32 个特征图组成。 下一步是*第一个卷积层*和`conv1`的构造: @@ -212,7 +212,7 @@ conv1 = conv2d(_X,wc1,bc1) ``` -在此,`conv2d`是以下功能: +在此,`conv2d`是以下函数: ```py def conv2d(img, w, b): @@ -242,7 +242,7 @@ conv1 = max_pool(conv1, k=2) ``` -在此,对于池操作,我们实现了以下功能: +在此,对于池操作,我们实现了以下函数: ```py def max_pool(img, k): @@ -365,7 +365,7 @@ cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y)) ``` -使用 TensorFlow `AdamOptimizer`函数对其功能进行优化: +使用 TensorFlow `AdamOptimizer`函数对其函数进行优化: ```py optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost) @@ -681,7 +681,7 @@ RNN 已被证明在诸如预测文本中的下一个字符或类似地预测句 ## 建立模型 -该模型使用 LSTM 实现 RNN 的架构。 实际上,它计划通过包括存储单元来增加 RNN 的架构,该存储单元允许保存有关长期时间依赖性的信息。 +该模型使用 LSTM 实现 RNN 的架构。 实际上,它计划通过包括存储单元来增加 RNN 的架构,该存储单元允许保存有关长期时间依赖的信息。 TensorFlow 库允许您通过以下命令创建 LSTM: diff --git a/docs/get-start-tf/ch06.md b/docs/get-start-tf/ch06.md index 0afbd7ec..f3b0061a 100644 --- a/docs/get-start-tf/ch06.md +++ b/docs/get-start-tf/ch06.md @@ -20,7 +20,7 @@ GPU 编程模型是一种编程策略,包括将 CPU 替换为 GPU 以加速各 在 GPU 编程模型中,有一些代码在 CPU 中顺序执行,而某些部分则由 GPU 并行执行 -TensorFlow 具有可以利用此编程模型的功能(如果您具有 NVIDIA GPU),支持 GPU 的软件包版本需要 Cuda Toolkit 7.0 和 6.5 CUDNN V2。 +TensorFlow 具有可以利用此编程模型的功能(如果您具有 NVIDIA GPU),支持 GPU 的包版本需要 Cuda Toolkit 7.0 和 6.5 CUDNN V2。 ### 注意 @@ -117,13 +117,13 @@ MatMul: /job:localhost/replica:0/task:0/gpu:0 # TensorFlow 服务 -服务是 TensorFlow 软件包,已开发该软件包将机器学习模型带入生产系统。 这意味着开发人员可以使用 TensorFlow 服务的 API 来构建服务器以服务于已实现的模型。 +服务是 TensorFlow 包,已开发该包将机器学习模型带入生产系统。 这意味着开发人员可以使用 TensorFlow 服务的 API 来构建服务器以服务于已实现的模型。 服务的模型每次都可以根据其客户提供的数据进行推断和预测,从而可以改进模型。 为了与服务系统进行通信,客户端使用 Google 开发的高性能开源**远程过程调用**(**RPC**)接口,称为 gRPC。 -典型的管道(请参见下图)是将训练数据馈送到学习者,后者输出模型。 经过验证后,即可将其部署到 TensorFlow 服务系统。 随着新数据的可用或模型的改进,随着时间的推移启动和迭代我们的模型非常普遍。 +典型的管道(请参见下图)是将训练数据馈送到学习器,后者输出模型。 经过验证后,即可将其部署到 TensorFlow 服务系统。 随着新数据的可用或模型的改进,随着时间的推移启动和迭代我们的模型非常普遍。 ![TensorFlow Serving](img/image_06_002.jpg) @@ -139,7 +139,7 @@ TensorFlow 服务需要 [Bazel 0.2.0](http://www.bazel.io/) )或更高版本 ### 注意 -Bazel 是使软件构建和测试自动化的工具。 支持的构建任务包括运行编译器和链接器以生成可执行程序和库,以及组装可部署的程序包。 +Bazel 是使软件构建和测试自动化的工具。 支持的构建任务包括运行编译器和链接器以生成可执行程序和库,以及组装可部署的包。 运行以下命令: -- GitLab