提交 4d5257ce 编写于 作者: W wizardforcel

2020-09-11 16:34:17

上级 e50ec182
......@@ -16,23 +16,23 @@ TensorFlow 是一个开源软件库,用于实现机器学习和深度学习系
尽管 TensorFlow 既庞大又复杂,但一旦您了解其基本设计和编程方法,它的设计便易于使用。
TensorFlow 入门*的目的是帮助您做到这一点。*
《TensorFlow 入门》的目的是帮助您做到这一点。
享受阅读!
# 本书涵盖的内容
*第 1 章**TensorFlow –基本概念,*包含有关 TensorFlow 的结构及其开发问题的一般信息。 它还提供了 Python 语言的基本编程准则以及安装过程之后的第一个 TensorFlow 工作会话。 本章最后对 TensorBoard 进行了描述,TensorBoard 是用于优化和调试的强大工具。
第 1 章,“TensorFlow 基本概念”,包含有关 TensorFlow 的结构及其开发问题的一般信息。 它还提供了 Python 语言的基本编程准则以及安装过程之后的第一个 TensorFlow 工作会话。 本章最后对 TensorBoard 进行了描述,TensorBoard 是用于优化和调试的强大工具。
*第 2 章**使用 TensorFlow 进行数学运算,*描述了 TensorFlow 的数学处理能力。 它涵盖了基本代数的编程示例,直至偏微分方程。 此外,还解释了 TensorFlow 中的基本数据结构,即张量*和*
第 2 章,“使用 TensorFlow 进行数学运算”,描述了 TensorFlow 的数学处理能力。 它涵盖了基本代数的编程示例,直至偏微分方程。 此外,还解释了 TensorFlow 中的基本数据结构,即张量
*第 3 章**从机器学习*开始,介绍了一些机器学习模型。 我们开始实现线性回归算法,该算法与数据之间的建模关系有关。 本章的主要重点是解决机器学习中的两个基本问题。 分类,即如何将每个新输入分配给可能的给定类别之一; 数据聚类,这是将一组对象进行分组的任务,以使同一组中的对象比其他组中的对象更相似。
第 3 章,“机器学习入门”,介绍了一些机器学习模型。 我们开始实现线性回归算法,该算法与数据之间的建模关系有关。 本章的主要重点是解决机器学习中的两个基本问题。 分类,即如何将每个新输入分配给可能的给定类别之一; 数据聚类,这是将一组对象进行分组的任务,以使同一组中的对象比其他组中的对象更相似。
*第 4 章**神经网络介绍*提供了神经网络的快速详细介绍。 这些是代表元件之间的互连的数学模型,即人工神经元。 它们是在某种程度上模仿活神经元特性的数学结构。 神经网络为深度学习算法的架构奠定了基础。 然后实现了两种基本类型的神经网络:用于分类问题的单层感知器和多层感知器。
第 4 章,“神经网络介绍”提供了神经网络的快速详细介绍。 这些是代表元件之间的互连的数学模型,即人工神经元。 它们是在某种程度上模仿活神经元特性的数学结构。 神经网络为深度学习算法的架构奠定了基础。 然后实现了两种基本类型的神经网络:用于分类问题的单层感知器和多层感知器。
*第 5 章**深度学习*概述了深度学习算法。 直到最近几年,深度学习才收集了几年前难以想象的大量结果。 我们将展示如何实现两种基本的深度学习架构,即卷积神经网络(CNN)和递归神经网络(RNN),分别用于图像识别和语音翻译问题。
第 5 章,“深度学习”概述了深度学习算法。 直到最近几年,深度学习才收集了几年前难以想象的大量结果。 我们将展示如何实现两种基本的深度学习架构,即卷积神经网络(CNN)和递归神经网络(RNN),分别用于图像识别和语音翻译问题。
*第 6 章**GPU 编程和使用 TensorFlow* ,展示了用于 *GPU* 计算的 TensorFlow 工具,并介绍了 *TensorFlow Serving* ,一种高性能 针对机器学习模型的开源服务系统,该模型针对生产环境而设计,并针对 TensorFlow 进行了优化。
第 6 章,“GPU 编程和使用 TensorFlow”,展示了用于 *GPU* 计算的 TensorFlow 工具,并介绍了 *TensorFlow Serving*,一种高性能 针对机器学习模型的开源服务系统,该模型针对生产环境而设计,并针对 TensorFlow 进行了优化。
# 这本书需要什么
......@@ -69,7 +69,7 @@ TensorFlow 入门*的目的是帮助您做到这一点。*
```
**新术语****重要词**以粗体显示。 您在屏幕上看到的字词,例如在菜单或对话框中的字样如下所示:“本书中的快捷方式基于`Mac OS X 10.5+` 方案。”
**新术语****重要词**以粗体显示。 您在屏幕上看到的字词,例如在菜单或对话框中的字样如下所示:“本书中的快捷方式基于`Mac OS X 10.5+`方案。”
### 注意
......
......@@ -26,19 +26,19 @@
## 监督学习
监督学习是机器学习的最常见形式。 在监督学习的情况下,在*训练阶段*期间,将一组示例(训练集)作为输入提交给系统,其中,每个示例都被标记为*和相应的*期望输出 值*。 例如,让我们考虑一个**分类问题**,其中系统必须将 *N* 个不同类别之一中的一些实验观察结果归因于已知的类别。 在此问题中,训练集被表示为类型为`{(X1, Y1), ....., (Xn, Yn)}`的成对序列,其中`Xi`是输入向量(*特征向量*),`Yi`代表相应输入的所需类别 向量。 大多数受监督的学习算法都有一个特征:通过最小损失函数(*成本函数*)的最小化来执行训练,该损失函数表示相对于所需输出系统的*输出误差*。*
监督学习是机器学习的最常见形式。 在监督学习的情况下,在*训练阶段*期间,将一组示例(训练集)作为输入提交给系统,其中,每个示例都被标记为相应的*期望输出值*。 例如,让我们考虑一个**分类问题**,其中系统必须将`N`个不同类别之一中的一些实验观察结果归因于已知的类别。 在此问题中,训练集被表示为类型为`{(X1, Y1), ....., (Xn, Yn)}`的成对序列,其中`Xi`是输入向量(*特征向量*),`Yi`代表相应输入的所需类别 向量。 大多数受监督的学习算法都有一个特征:通过最小损失函数(*成本函数*)的最小化来执行训练,该损失函数表示相对于所需输出系统的*输出误差*
最常用于此类训练的成本函数计算所需输出与系统提供的输出之间的*标准偏差*。 训练后,在与训练集(即所谓的*验证集)分离的一组示例中测量模型的*准确性*。*
最常用于此类训练的成本函数计算所需输出与系统提供的输出之间的*标准差*。 训练后,在与训练集(即所谓的*验证集*)分离的一组示例中测量模型的*准确性*
![Supervised learning](img/image_01_001.jpg)
监督学习工作流程
然后在此阶段验证*模型的泛化能力*:对于训练阶段中未使用的输入,如果输出正确,我们将测试*。*
然后在此阶段验证*模型的泛化能力*:对于训练阶段中未使用的输入,我们将测试是否输出正确。
### 无监督学习
在无监督学习中,系统*提供的训练示例未使用相关所属类别标记为*。 因此,该系统开发并组织数据,在其中寻找*共同特征*,然后根据其内部知识对其进行更改。
在无监督学习中,系统提供的训练示例*未使用相关所属类别标记*。 因此,该系统开发并组织数据,在其中寻找*共同特征*,然后根据其内部知识对其进行更改。
无监督学习算法特别用于*聚类问题*,其中存在许多输入示例,您不知道先验类,甚至不知道可能的类是什么,或者不知道有多少类 他们是。 当您无法使用监督学习时,这是很明显的情况,因为您不知道先验的班级数量。
......@@ -48,13 +48,13 @@
### 深度学习
深度学习技术代表了近几十年来机器学习所迈出的重要一步,它提供了许多应用程序从未见过的结果,例如图像和语音识别或**自然语言处理** **NLP** )。 导致深度学习发展的原因有很多,仅在最近几十年中它才被置于机器学习领域的中心。 原因之一,也许是主要原因,可以肯定地以硬件的进步为代表,并且随着新处理器的出现,例如**图形处理单元****GPU** ),它们大大减少了时间 训练网络所需的数据,将它们降低了 10 或 20 倍。另一个原因当然是训练系统所需的数据集越来越多,训练一定深度并具有高维度输入数据的架构所需的数据集。
深度学习技术代表了近几十年来机器学习所迈出的重要一步,它提供了许多应用程序从未见过的结果,例如图像和语音识别或**自然语言处理****NLP**)。 导致深度学习发展的原因有很多,仅在最近几十年中它才被置于机器学习领域的中心。 原因之一,也许是主要原因,可以肯定地以硬件的进步为代表,并且随着新处理器的出现,例如**图形处理单元****GPU**),它们大大减少了时间 训练网络所需的数据,将它们降低了 10 或 20 倍。另一个原因当然是训练系统所需的数据集越来越多,训练一定深度并具有高维度输入数据的架构所需的数据集。
![Deep learning](img/image_01_003.jpg)
深度学习工作流程
深度学习基于*人脑*处理信息和学习并对外部刺激做出反应的方式。 它包含在*的几个表示级别*的机器学习模型中,其中更深的级别将先前级别的输出作为输入,对其进行转换并始终进行抽象。 在此假设模型中,每个级别对应于大脑皮层的不同区域:当大脑接收图像时,它将通过*边缘检测**形式感知*等各个阶段对其进行处理,即 从*原语*表示级别到*最复杂的*。 例如,在图像分类问题中,每个块借助于*过滤操作*,以各种抽象级别逐渐提取*特征*,输入已经处理的数据。
深度学习基于*人脑*处理信息和学习并对外部刺激做出反应的方式。 它包含在*几个表示级别*的机器学习模型中,其中更深的级别将先前级别的输出作为输入,对其进行转换并始终进行抽象。 在此假设模型中,每个级别对应于大脑皮层的不同区域:当大脑接收图像时,它将通过*边检测**形式感知*等各个阶段对其进行处理,即 从*原语*表示级别到*最复杂的*。 例如,在图像分类问题中,每个块借助于*过滤操作*,以各种抽象级别逐渐提取*特征*,输入已经处理的数据。
# TensorFlow –概述
......@@ -554,7 +554,7 @@ print(y)
```
那么我们如何解释不同的结果呢? 区别在于变量定义。 实际上,变量`y`并不代表`x + 9`的当前值,而是表示:*在计算变量 y 时,取常数 x 的值并将其加 9* 。 这就是从未执行`y`值的原因。 在下一节中,我将尝试修复它。
那么我们如何解释不同的结果呢? 区别在于变量定义。 实际上,变量`y`并不代表`x + 9`的当前值,而是表示:*在计算变量`y`时,取常数`x`的值并将其加 9* 。 这就是从未执行`y`值的原因。 在下一节中,我将尝试修复它。
因此,我们打开 Python IDE 并输入以下行:
......@@ -589,14 +589,14 @@ with tf.Session() as session:
# 数据流图
机器学习应用程序是重复计算复杂数学表达式的结果。 在 TensorFlow 中,使用数据流图描述了计算,其中图中的每个*节点*代表数学运算的实例(`multiply``add`[HTG2 等), 每个*边*是执行操作的多维数据集(*张量*)。
机器学习应用程序是重复计算复杂数学表达式的结果。 在 TensorFlow 中,使用数据流图描述了计算,其中图中的每个*节点*代表数学运算的实例(`multiply``add`等), 每个*边*是执行操作的多维数据集(*张量*)。
TensorFlow 支持这些构造和这些运算符。 让我们详细看看 TensorFlow 如何管理节点和边
TensorFlow 支持这些构造和这些运算符。 让我们详细看看 TensorFlow 如何管理节点和边:
* **节点**:在 TensorFlow 中,每个节点代表一个操作的实例。 每个操作都有`>=`输入和`>= 0`输出。
* **边缘**:在 TensorFlow 中,有两种类型的边缘
* **正常边沿**:它们是数据结构(张量)的载体,其中一个操作的输出(来自一个节点)成为另一操作的输入。
* **特殊边沿**:这些边沿不是节点(运算符)的输出与另一节点的输入之间的数据载体。 特殊边缘表示两个节点之间的控制依赖关系。 假设我们有两个节点 **A** 和 **B** ,并且有一个特殊的边将 **A** 连接到 **B** ; 这意味着 **B** 仅在 **A** 中的操作结束时才开始操作。 数据流图中使用特殊边来设置张量上的操作之间的事前关系。
* **边**:在 TensorFlow 中,有两种类型的边
* **正常边**:它们是数据结构(张量)的载体,其中一个操作的输出(来自一个节点)成为另一操作的输入。
* **特殊边**:这些边不是节点(运算符)的输出与另一节点的输入之间的数据载体。 特殊边表示两个节点之间的控制依赖关系。 假设我们有两个节点`A``B`,并且有一个特殊的边将`A`连接到`B`; 这意味着`B`仅在`A`中的操作结束时才开始操作。 数据流图中使用特殊边来设置张量上的操作之间的事前关系。
让我们更详细地探讨数据流图中的一些功能:
......@@ -633,7 +633,7 @@ TensorFlow 支持这些构造和这些运算符。 让我们详细看看 TensorF
```
3. `placeholder`允许我们创建操作并建立计算图*,而无需*数据
3. `placeholder`允许我们创建操作并建立计算图,而无需*数据*
4. 然后,我们将这些变量用作 TensorFlow 函数`mul`的输入:
```py
......@@ -753,12 +753,12 @@ TensorBoard 中的节点符号
# 摘要
在本章中,我们介绍了主要主题:**机器学习****深度学习**在机器学习探索可以学习数据并进行数据预测的算法[的研究和构建的同时,深度学习正是基于*人脑处理信息和学习*的方式, 对外部刺激作出反应。](https://en.wikipedia.org/wiki/Algorithm)
在本章中,我们介绍了主要主题:**机器学习****深度学习**机器学习探索可以学习数据并进行数据预测的算法的研究和构建,而深度学习正是基于*人脑处理信息和学习*的方式, [对外部刺激作出反应](https://en.wikipedia.org/wiki/Algorithm)
在这个庞大的科学研究和实际应用领域中,我们可以牢固地放置 **TensorFlow** 软件库,该库由 Google 人工智能研究小组(Google Brain Project)开发,并于 2015 年 11 月 9 日作为开源软件发布 。
在选择 **Python** 编程语言作为示例和应用程序的开发工具之后,我们了解了如何安装和编译该库,然后进行了第一个工作会议。 这使我们可以介绍 TensorFlow 和**数据流图**的执行模型。 它引导我们定义了我们的编程模型。
本章以如何使用重要工具调试机器学习应用程序的示例结尾: **TensorBoard**
本章以如何使用重要工具调试机器学习应用程序的示例结尾: **TensorBoard**
在下一章中,我们将继续进入 TensorFlow 库,以展示其多功能性。 从基本概念张量开始,我们将看到如何将库用于纯数学应用程序。
\ No newline at end of file
......@@ -322,7 +322,7 @@ tensor_3d[plane,row,col]
## 使用 TensorFlow 处理张量
TensorFlow 旨在处理各种大小的张量和可用于操纵它们的运算符。 在此示例中,为了查看数组操作,我们将使用数字图像。 您可能知道,彩色数字图像是 MxNx3 大小的矩阵(三阶张量),其分量与图像(RGB 空间)中的红色,绿色和蓝色分量相对应,这意味着矩形中的每个特征 RGB 图像的框将由 *i**j**k 三个坐标指定。*
TensorFlow 旨在处理各种大小的张量和可用于操纵它们的运算符。 在此示例中,为了查看数组操作,我们将使用数字图像。 您可能知道,彩色数字图像是 MxNx3 大小的矩阵(三阶张量),其分量与图像(RGB 空间)中的红色,绿色和蓝色分量相对应,这意味着矩形中的每个特征 RGB 图像的框将由`i``j``k`三个坐标指定。
![Handling tensors with TensorFlow](img/image_02_004.jpg) The RGB tensor
......@@ -473,16 +473,18 @@ plt.show()
现在我们来看我们的问题,即如何使用 TensorFlow 显示分形。 Mandelbrot 布景是最著名的分形之一。 分形是一种几何对象,其结构以不同的比例重复出现。 分形在自然界中很常见,例如大不列颠海岸。
为复数 *c* 定义了 Mandelbrot 集,对于该复数来说,以下连续是有界的:
为复数`c`定义了 Mandelbrot 集,对于该复数来说,以下连续是有界的:
*Z(n + 1)= Z(n) <sup>2</sup> + c,其中 Z(0)= 0*
```py
Z(n + 1) = Z(n)^2 + c其中 Z(0) = 0
```
这套作品以其创造者 BenoîtMandelbrot(波兰数学家以制造著名的分形而闻名)的名字命名。 但是,仅在计算机编程的帮助下,他才能为 Mandelbrot 设置形状或图形表示。 1985 年,他在《科学美国人》上发表了第一个计算 Mandelbrot 集的算法。 算法(对于每个点的复数点 *Z* ):
这套作品以其创造者 BenoîtMandelbrot(波兰数学家以制造著名的分形而闻名)的名字命名。 但是,仅在计算机编程的帮助下,他才能为 Mandelbrot 设置形状或图形表示。 1985 年,他在《科学美国人》上发表了第一个计算 Mandelbrot 集的算法。 算法(对于每个点的复数点`Z`):
1. *Z* 的初始值等于 *0,Z(0)=0。*
2. 选择复数 *c* 作为当前点。 在笛卡尔平面中,横坐标轴(水平线)代表实部,而纵坐标轴(垂直线)代表 *c 的虚部。*
3. 迭代: *Z(n +1)= Z(n) <sup>2</sup> + c*
* Z(n) <sup>2</sup> 大于最大半径时停止;
1. `Z`的初始值`Z(0) = 0`
2. 选择复数`c`作为当前点。 在笛卡尔平面中,横坐标轴(水平线)代表实部,而纵坐标轴(垂直线)代表`c`的虚部。
3. 迭代: `Z(n + 1) = Z(n)^2 + c`
*`Z(n)^2`大于最大半径时停止;
现在我们通过简单的步骤了解如何使用 TensorFlow 转换前面提到的算法。
......@@ -558,7 +560,7 @@ step = tf.group(zs.assign(zs_),\
```
第一个操作是步骤迭代 *Z(n + 1)= Z(n)2 + c* 以创建新值。
第一个操作是步骤迭代`Z(n + 1) = Z(n)^2 + c`以创建新值。
第二个操作将此值添加到`ns`中的对应元素变量中。 此`op`完成时,输入中的所有操作都已完成。 该运算符没有输出。
......@@ -632,7 +634,7 @@ tf.initialize_all_variables().run()
```
为了计算 Julia 集的新值,我们将使用迭代公式 *Z(n + 1)= Z(n)2 – c* ,其中初始点 *c* 为 等于虚数`0.75i`
为了计算 Julia 集的新值,我们将使用迭代公式`Z(n + 1) = Z(n)^2 + c`,其中初始点`c`为 等于虚数`0.75i`
```py
c = complex(0.0,0.75)
......@@ -675,7 +677,7 @@ plt.show()
TensorFlow 具有解决其他更复杂任务的功能。 例如,我们将使用数学运算符来计算`y`相对于其表达式`x`参数的导数。 为此,我们使用`tf.gradients()`功能。
让我们考虑数学函数`y = 2*x*²`。 我们要计算相对于`x=1`的梯度`di y`。 以下是计算此梯度的代码:
让我们考虑数学函数`y = 2*x²`。 我们要计算相对于`x=1`的梯度`dy/dx`。 以下是计算此梯度的代码:
1. 首先,导入 TensorFlow 库:
......@@ -737,7 +739,7 @@ TensorFlow 具有解决其他更复杂任务的功能。 例如,我们将使
# 随机数
随机数的生成对于机器学习和训练算法至关重要。 当计算机生成随机数时,它们是由**伪随机数生成器** **PRNG** )生成的。 术语“伪”来自这样一个事实,即计算机是仅能模拟随机性的指令的染色逻辑编程运行。 尽管存在逻辑限制,但计算机在生成随机数方面非常有效。 TensorFlow 为操作员提供了创建具有不同分布的随机张量的方法。
随机数的生成对于机器学习和训练算法至关重要。 当计算机生成随机数时,它们是由**伪随机数生成器****PRNG**)生成的。 术语“伪”来自这样一个事实,即计算机是仅能模拟随机性的指令的染色逻辑编程运行。 尽管存在逻辑限制,但计算机在生成随机数方面非常有效。 TensorFlow 为操作员提供了创建具有不同分布的随机张量的方法。
## 均匀分布
......@@ -788,7 +790,7 @@ with tf.Session() as session:
## 正态分布
在某些特定情况下,您可能需要生成相差几个单位的随机数。 在这种情况下,我们使用随机数的*正态分布,也称为*高斯分布*,这增加了下一个问题在 0 处提取的可能性。每个整数代表标准偏差。 从未来的问题可以看出,该范围的边缘被提取的可能性很小。 以下是 TensorFlow 的实现:*
在某些特定情况下,您可能需要生成相差几个单位的随机数。 在这种情况下,我们使用随机数的*正态分布*,也称为*高斯分布*,这增加了下一个问题在 0 处提取的可能性。每个整数代表标准差。 从未来的问题可以看出,该范围的边被提取的可能性很小。 以下是 TensorFlow 的实现:
```py
import TensorFlow as tf
......@@ -801,7 +803,7 @@ with tf.Session() as session:
```
我们使用运算符`tf.random_normal`创建了一个形状为`[100]``1d-tensor`,该形状由均值等于 0 且标准差等于`2`的随机正态值组成。 结果如下:
我们使用运算符`tf.random_normal`创建了一个形状为`[100]``1d-tensor`,该形状由均值等于 0 且标准差等于`2`的随机正态值组成。 结果如下:
![Normal distribution](img/image_02_022-1.jpg)
......@@ -819,7 +821,7 @@ uniform_without_seed = tf.random_uniform([1])
```
在第一个均匀分布中,我们从种子= 1 开始。这意味着重复评估两个分布,第一个均匀分布将始终生成*,其值的序列*相同
在第一个均匀分布中,我们从种子`= 1`开始。这意味着重复评估两个分布,第一个均匀分布将始终生成值相同的序列
```py
print("First Run")
......@@ -912,7 +914,7 @@ plt.show()
# 求解偏微分方程
**偏微分方程** **PDE** )是一个微分方程,涉及多个独立变量的未知函数的偏导数。 PDE 通常用于制定和解决从量子力学到金融市场等各个领域的重大物理问题。 在本节中,我们以[为例,网址为 https://www.TensorFlow.org/versions/r0.8/tutorials/pdes/index.html](https://www.TensorFlow.org/versions/r0.8/tutorials/pdes/index.html) ,展示了 TensorFlow 在二维 PDE 中的使用 该解决方案可对方形池塘的表面进行建模,上面有几滴雨滴。 效果将是在池塘本身上产生二维波。 我们不会专注于问题的计算方面,因为这超出了本书的范围。 相反,我们将专注于使用 TensorFlow 定义问题。
**偏微分方程****PDE**)是一个微分方程,涉及多个独立变量的未知函数的偏导数。 PDE 通常用于制定和解决从量子力学到金融市场等各个领域的重大物理问题。 在本节中,我们以[这里](https://www.TensorFlow.org/versions/r0.8/tutorials/pdes/index.html)为例,展示了 TensorFlow 在二维 PDE 中的使用 该解决方案可对方形池塘的表面进行建模,上面有几滴雨滴。 效果将是在池塘本身上产生二维波。 我们不会专注于问题的计算方面,因为这超出了本书的范围。 相反,我们将专注于使用 TensorFlow 定义问题。
起点是导入以下基本库:
......
......@@ -354,7 +354,7 @@ MNIST 的数字八
## 最近邻居算法
**K 最近邻** **KNN** )是用于分类或回归的监督学习算法。 它是一个系统,根据其与内存中存储的对象之间的距离来分配测试样品的类别。
**K 最近邻****KNN**)是用于分类或回归的监督学习算法。 它是一个系统,根据其与内存中存储的对象之间的距离来分配测试样品的类别。
距离`d`定义为两点之间的欧几里得距离:
......
......@@ -11,7 +11,7 @@
# 什么是人工神经网络?
**人工神经网络** **ANN** )是一种信息处理系统,其运行机制受生物神经电路的启发。 由于它们的特性,神经网络是机器学习系统(尤其是在人工智能环境中)真正革命的主角。 根据各种体系结构,人工神经网络拥有许多相互连接的简单处理单元。 如果我们看一下稍后报告的 ANN 的架构,可以看到*隐藏单元*在输入和输出中与外部层通信,而*输入**输出单元*仅与网络的*隐藏层*通信。
**人工神经网络****ANN**)是一种信息处理系统,其运行机制受生物神经电路的启发。 由于它们的特性,神经网络是机器学习系统(尤其是在人工智能环境中)真正革命的主角。 根据各种体系结构,人工神经网络拥有许多相互连接的简单处理单元。 如果我们看一下稍后报告的 ANN 的架构,可以看到*隐藏单元*在输入和输出中与外部层通信,而*输入**输出单元*仅与网络的*隐藏层*通信。
每个单元或节点都模拟神经元在生物神经网络中的作用。 每个节点,即*人工神经元*,都具有非常简单的操作:如果其接收到的信号总量超过其激活阈值(由所谓的激活函数定义),它将变为活动状态。 如果节点*变为活动*,它会发射信号,该信号沿着传输通道传输到与其连接的另一个单元。 每个连接点都充当过滤器,将消息转换为抑制性信号或兴奋性信号,根据其各自的特征来增加或减少强度。 连接点模拟生物突触,并具有通过将传输信号乘以权重(其值取决于连接本身)来权衡传输信号强度的基本功能。
......@@ -431,7 +431,7 @@ with tf.Session() as sess:
# 多层感知器
更复杂和有效的体系结构是**多层感知器** **MLP** )。 它基本上由多层感知器组成,因此至少存在*个隐藏的* *层*,即**未连接到输入或连接到** 网络的输出:
更复杂和有效的体系结构是**多层感知器****MLP**)。 它基本上由多层感知器组成,因此至少存在*个隐藏的* *层*,即**未连接到输入或连接到** 网络的输出:
![Multi Layer Perceptron](img/B05474_04_05.jpg)
......
......@@ -14,7 +14,7 @@
深度学习技术是机器学习研究人员近几十年来所迈出的关键一步,已提供了许多应用(如图像识别和语音识别)中前所未有的成功成果。
有多种原因导致开发深度学习并将其置于机器学习范围内的关注焦点。 这些原因之一是硬件的进步,以及新处理器的可用性,例如图形处理单元( **GPU** ),它们大大减少了训练网络所需的时间,降低了 10/20 的时间。 次。
有多种原因导致开发深度学习并将其置于机器学习范围内的关注焦点。 这些原因之一是硬件的进步,以及新处理器的可用性,例如图形处理单元(**GPU**),它们大大减少了训练网络所需的时间,降低了 10/20 的时间。 次。
另一个原因肯定是*越来越容易找到*,要在其上训练系统的*数据集*越多,这些数据集就需要训练一定深度和输入数据的高维结构。 深度学习包含一组方法,这些方法使系统可以在多个级别上获取数据的*分层表示*。 这是通过组合简单的单元(不是线性的)来实现的,每个简单的单元从输入级别开始将其自身级别的表示形式转换为更高级别的表示形式*更抽象*。 通过足够数量的这些转换,可以学习相当复杂的输入输出功能。
......@@ -44,11 +44,11 @@ character --> word --> word group --> clause --> sentence --> story
因此,通过多级非线性转换,深度大约在 5 到 20 级之间,深度学习系统可以学习并实现极其复杂和复杂的功能,同时*对最小的相关细节非常敏感**,**对输入数据无关方面的大变化非常不敏感,在对象识别的情况下,这些变化可能是:图像的背景,亮度或所表示对象的位置 。*
以下部分将借助 TensorFlow 说明两种重要的深度神经网络类型:**卷积神经网络** *(* CNN *)*,主要针对 分类问题,然后针对**自然语言处理** **NLP** )问题的**递归神经网络****RNNs** )问题。
以下部分将借助 TensorFlow 说明两种重要的深度神经网络类型:**卷积神经网络** *(* CNN *)*,主要针对 分类问题,然后针对**自然语言处理****NLP**)问题的**递归神经网络****RNNs**)问题。
## 卷积神经网络
**卷积神经网络** **CNN** )是面向神经网络的一种特殊类型的深度学习,在许多实际应用中都取得了优异的成绩,尤其是*对象识别* 在图像中。
**卷积神经网络****CNN**)是面向神经网络的一种特殊类型的深度学习,在许多实际应用中都取得了优异的成绩,尤其是*对象识别* 在图像中。
实际上,CNN 被设计为处理以多个阵列形式表示的数据,例如*彩色图像*,可通过包含像素颜色强度的三个二维阵列表示。 CNN 与普通神经网络之间的实质区别在于,前者*在图像上直接操作*,而后者在*特征上从图像中提取*。 因此,与普通神经网络不同,CNN 的输入将是*二维*,特征将是输入图像的像素。
......@@ -608,7 +608,7 @@ with tf.Session() as sess:
## 递归神经网络
另一个面向深度学习的架构是所谓的**递归神经网络** **RNN** )的架构。 RNN 的基本思想是在输入中使用*顺序信息*类型。 在神经网络中,我们通常假设每个输入和输出都独立于所有其他输入和输出。 但是,对于许多类型的问题,此假设并不肯定。 例如,如果您想预测一个短语的下一个单词,那么知道短语之前的单词肯定很重要。 这些神经网络称为*递归*,因为它们对输入序列的所有元素执行相同的计算,并且除当前输入外,每个元素的输出还取决于所有先前的计算。
另一个面向深度学习的架构是所谓的**递归神经网络****RNN**)的架构。 RNN 的基本思想是在输入中使用*顺序信息*类型。 在神经网络中,我们通常假设每个输入和输出都独立于所有其他输入和输出。 但是,对于许多类型的问题,此假设并不肯定。 例如,如果您想预测一个短语的下一个单词,那么知道短语之前的单词肯定很重要。 这些神经网络称为*递归*,因为它们对输入序列的所有元素执行相同的计算,并且除当前输入外,每个元素的输出还取决于所有先前的计算。
### RNN 架构
......@@ -634,7 +634,7 @@ S <sub>t</sub> = f([U] X <sub>t</sub> + [W] S <sub>t-1</sub> )
### LSTM 网络
**长期共享内存** **LSTM** )网络是 RNN 体系结构基本模型的扩展。 主要思想是改进网络,为其提供显式内存。 实际上,尽管 LSTM 网络与 RNN 并没有本质上的不同,但它们配备了特殊的隐藏单元,称为存储单元,其行为是长时间记住以前的输入。
**长期共享内存****LSTM**)网络是 RNN 体系结构基本模型的扩展。 主要思想是改进网络,为其提供显式内存。 实际上,尽管 LSTM 网络与 RNN 并没有本质上的不同,但它们配备了特殊的隐藏单元,称为存储单元,其行为是长时间记住以前的输入。
![LSTM networks](img/B05474_05_14.jpg)
......@@ -653,7 +653,7 @@ LSTM 块包含确定输入是否足够重要以进行保存的门。 该块由
### 使用 TensorFlow 的 NLP
RNN 已被证明在诸如预测文本中的下一个字符或类似地预测句子中的下一个顺序词等问题上具有出色的性能。 但是,它们也用于更复杂的问题,例如**机器翻译**。 在这种情况下,网络将输入源语言中的单词序列,而您想要输出语言*目标*中的相应单词序列。 最后,RNN 被广泛使用的另一个非常重要的应用是*语音* *识别*。 在下文中,我们将开发一个计算模型,该模型可以根据前一个单词的顺序来预测文本中的下一个单词。 为了测量模型的*精度*,我们将使用 **Penn 树库** **PTB** )数据集,该数据集是衡量这些模型精度的基准 。
RNN 已被证明在诸如预测文本中的下一个字符或类似地预测句子中的下一个顺序词等问题上具有出色的性能。 但是,它们也用于更复杂的问题,例如**机器翻译**。 在这种情况下,网络将输入源语言中的单词序列,而您想要输出语言*目标*中的相应单词序列。 最后,RNN 被广泛使用的另一个非常重要的应用是*语音* *识别*。 在下文中,我们将开发一个计算模型,该模型可以根据前一个单词的顺序来预测文本中的下一个单词。 为了测量模型的*精度*,我们将使用 **Penn 树库****PTB**)数据集,该数据集是衡量这些模型精度的基准 。
本示例引用您在 TensorFlow 发行版的`/rnn/ptb`目录中找到的文件。 它包含以下两个文件:
......
......@@ -10,11 +10,11 @@
# GPU 编程
[第 5 章](../Text/ch05.html "Chapter 5\. Deep Learning")*深度学习*中,我们针对 NLP 应用训练了**递归神经网络** **RNN** ), 深度学习应用程序可能需要大量计算。 但是,您可以通过**图形处理单元****GPU** )使用并行编程技术来减少训练时间。 实际上,现代图形单元的计算资源使它们能够执行并行代码部分,从而确保了高性能。
[第 5 章](../Text/ch05.html "Chapter 5\. Deep Learning")*深度学习*中,我们针对 NLP 应用训练了**递归神经网络****RNN**), 深度学习应用程序可能需要大量计算。 但是,您可以通过**图形处理单元****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)
......@@ -121,7 +121,7 @@ MatMul: /job:localhost/replica:0/task:0/gpu:0
服务的模型每次都可以根据其客户提供的数据进行推断和预测,从而可以改进模型。
为了与服务系统进行通信,客户端使用 Google 开发的高性能开源**远程过程调用** **RPC** )接口,称为 gRPC。
为了与服务系统进行通信,客户端使用 Google 开发的高性能开源**远程过程调用****RPC**)接口,称为 gRPC。
典型的管道(请参见下图)是将训练数据馈送到学习者,后者输出模型。 经过验证后,即可将其部署到 TensorFlow 服务系统。 随着新数据的可用或模型的改进,随着时间的推移启动和迭代我们的模型非常普遍。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册