Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
D_ACMER
apachecn-dl-zh
提交
8e0fb2f9
A
apachecn-dl-zh
项目概览
D_ACMER
/
apachecn-dl-zh
与 Fork 源项目一致
Fork自
OpenDocCN / apachecn-dl-zh
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-dl-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8e0fb2f9
编写于
9月 11, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-09-11 16:52:22
上级
96ebacc3
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
36 addition
and
34 deletion
+36
-34
docs/get-start-tf/ch00.md
docs/get-start-tf/ch00.md
+1
-1
docs/get-start-tf/ch04.md
docs/get-start-tf/ch04.md
+1
-1
docs/get-start-tf/ch05.md
docs/get-start-tf/ch05.md
+31
-29
docs/get-start-tf/ch06.md
docs/get-start-tf/ch06.md
+3
-3
未找到文件。
docs/get-start-tf/ch00.md
浏览文件 @
8e0fb2f9
...
@@ -30,7 +30,7 @@ TensorFlow 是一个开源软件库,用于实现机器学习和深度学习系
...
@@ -30,7 +30,7 @@ TensorFlow 是一个开源软件库,用于实现机器学习和深度学习系
第 4 章,“神经网络介绍”提供了神经网络的快速详细介绍。 这些是代表元件之间的互连的数学模型,即人工神经元。 它们是在某种程度上模仿活神经元特性的数学结构。 神经网络为深度学习算法的架构奠定了基础。 然后实现了两种基本类型的神经网络:用于分类问题的单层感知机和多层感知机。
第 4 章,“神经网络介绍”提供了神经网络的快速详细介绍。 这些是代表元件之间的互连的数学模型,即人工神经元。 它们是在某种程度上模仿活神经元特性的数学结构。 神经网络为深度学习算法的架构奠定了基础。 然后实现了两种基本类型的神经网络:用于分类问题的单层感知机和多层感知机。
第 5 章,“深度学习”概述了深度学习算法。 直到最近几年,深度学习才收集了几年前难以想象的大量结果。 我们将展示如何实现两种基本的深度学习架构,即卷积神经网络(CNN)和
递归
神经网络(RNN),分别用于图像识别和语音翻译问题。
第 5 章,“深度学习”概述了深度学习算法。 直到最近几年,深度学习才收集了几年前难以想象的大量结果。 我们将展示如何实现两种基本的深度学习架构,即卷积神经网络(CNN)和
循环
神经网络(RNN),分别用于图像识别和语音翻译问题。
第 6 章,“GPU 编程和使用 TensorFlow”,展示了用于
*GPU*
计算的 TensorFlow 工具,并介绍了
*TensorFlow Serving*
,一种高性能 针对机器学习模型的开源服务系统,该模型针对生产环境而设计,并针对 TensorFlow 进行了优化。
第 6 章,“GPU 编程和使用 TensorFlow”,展示了用于
*GPU*
计算的 TensorFlow 工具,并介绍了
*TensorFlow Serving*
,一种高性能 针对机器学习模型的开源服务系统,该模型针对生产环境而设计,并针对 TensorFlow 进行了优化。
...
...
docs/get-start-tf/ch04.md
浏览文件 @
8e0fb2f9
...
@@ -1067,4 +1067,4 @@ plt.show()
...
@@ -1067,4 +1067,4 @@ plt.show()
在本章中,我们介绍了
*人工神经网络*
。 人工神经元是一种数学模型,在某种程度上模仿了活神经元的特性。 网络的每个神经元都有一个非常简单的操作,包括接收到的信号总量超过激活阈值时变为活动状态。 学习过程通常是
*监督的*
:神经网络使用训练集来推断输入和相应输出之间的关系,而学习算法会修改网络的权重以使成本函数
*最小化*
,它表示
*训练集*
有关的
*预测误差*
。 如果训练成功,则即使事先不知道输出结果,神经网络也将能够做出预测。 在本章中,我们使用 TensorFlow 实现了一些涉及神经网络的示例。 在使用
*Rosemblatt 的感知机*
进行分类的问题中,我们已经看到神经网络作为
*逻辑回归*
算法来解决分类和回归问题。 在本章的最后,在实现
*图像分类器*
之前,我们介绍了
*多层感知机*
架构,然后在
*数学函数仿真器*
的实现中,我们已经看到了该架构的实际应用。
在本章中,我们介绍了
*人工神经网络*
。 人工神经元是一种数学模型,在某种程度上模仿了活神经元的特性。 网络的每个神经元都有一个非常简单的操作,包括接收到的信号总量超过激活阈值时变为活动状态。 学习过程通常是
*监督的*
:神经网络使用训练集来推断输入和相应输出之间的关系,而学习算法会修改网络的权重以使成本函数
*最小化*
,它表示
*训练集*
有关的
*预测误差*
。 如果训练成功,则即使事先不知道输出结果,神经网络也将能够做出预测。 在本章中,我们使用 TensorFlow 实现了一些涉及神经网络的示例。 在使用
*Rosemblatt 的感知机*
进行分类的问题中,我们已经看到神经网络作为
*逻辑回归*
算法来解决分类和回归问题。 在本章的最后,在实现
*图像分类器*
之前,我们介绍了
*多层感知机*
架构,然后在
*数学函数仿真器*
的实现中,我们已经看到了该架构的实际应用。
在下一章中,我们最后介绍深度学习模型; 我们将研究和实现更复杂的神经网络架构,例如卷积神经网络和递归神经网络。
在下一章中,我们最后介绍深度学习模型; 我们将研究和实现更复杂的神经网络架构,例如卷积神经网络和循环神经网络。
\ No newline at end of file
\ No newline at end of file
docs/get-start-tf/ch05.md
浏览文件 @
8e0fb2f9
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
*
卷积神经网络(CNN)
*
卷积神经网络(CNN)
*
CNN 架构
*
CNN 架构
*
CNN 的 TensorFlow 实现
*
CNN 的 TensorFlow 实现
*
递归
神经网络(RNN)
*
循环
神经网络(RNN)
*
RNN 架构
*
RNN 架构
*
使用 TensorFlow 进行自然语言处理
*
使用 TensorFlow 进行自然语言处理
...
@@ -40,17 +40,17 @@ character --> word --> word group --> clause --> sentence --> story
...
@@ -40,17 +40,17 @@ character --> word --> word group --> clause --> sentence --> story
```
```
因此,深度学习架构是
*多层架构*
,它由简单的单元组成,所有单元都受训练,其中许多单元包含
*非线性变换*
。 每个单元都对其输入进行转换以改善其
*属性
,以仅出于分类目的选择和放大*
相关方面,以及其
*不变性*
,即其倾向
*忽略无关的*
。 方面可忽略不计
。
因此,深度学习架构是
*多层架构*
,它由简单的单元组成,所有单元都受训练,其中许多单元包含
*非线性变换*
。 每个单元都对其输入进行转换以改善其
*属性
*
,以仅出于分类目的选择和放大相关方面,以及其
*不变性*
,即其倾向
*忽略无关的方面*
。
因此,通过多级非线性转换,深度大约在 5 到 20 级之间,深度学习系统可以学习并实现极其复杂和复杂的功能,同时
*对最小的相关细节非常敏感*
,
*,*
和
*对输入数据无关方面的大变化非常不敏感,在对象识别的情况下,这些变化可能是:图像的背景,亮度或所表示对象的位置 。*
因此,通过多级非线性转换,深度大约在 5 到 20 级之间,深度学习系统可以学习并实现极其复杂和复杂的功能,同时
*对最小的相关细节非常敏感*
,
以及对输入数据无关方面的大变化非常不敏感,在对象识别的情况下,这些变化可能是:图像的背景,亮度或所表示对象的位置。
以下部分将借助 TensorFlow 说明两种重要的深度神经网络类型:
**卷积神经网络**
*(*
CNN
*)*
,主要针对 分类问题,然后针对
**自然语言处理**
(
**NLP**
)问题的
**递归
神经网络**
(
**RNNs**
)问题。
以下部分将借助 TensorFlow 说明两种重要的深度神经网络类型:
**卷积神经网络**
(
**CNN**
),主要针对 分类问题,然后针对
**自然语言处理**
(
**NLP**
)问题的
**循环
神经网络**
(
**RNNs**
)问题。
## 卷积神经网络
## 卷积神经网络
**卷积神经网络**
(
**CNN**
)是面向神经网络的一种特殊类型的深度学习,在许多实际应用中都取得了优异的成绩,尤其是
*对象识别*
在图像中
。
**卷积神经网络**
(
**CNN**
)是面向神经网络的一种特殊类型的深度学习,在许多实际应用中都取得了优异的成绩,尤其是
图像中的
*对象识别*
。
实际上,CNN 被设计为处理以多个阵列形式表示的数据,例如
*彩色图像*
,可通过包含像素颜色强度的三个二维阵列表示。 CNN 与普通神经网络之间的实质区别在于,前者
*在图像上直接操作*
,而后者在
*
特征上从图像中提取
*
。 因此,与普通神经网络不同,CNN 的输入将是
*二维*
,特征将是输入图像的像素。
实际上,CNN 被设计为处理以多个阵列形式表示的数据,例如
*彩色图像*
,可通过包含像素颜色强度的三个二维阵列表示。 CNN 与普通神经网络之间的实质区别在于,前者
*在图像上直接操作*
,而后者在
*
从图像中提取的特征上
*
。 因此,与普通神经网络不同,CNN 的输入将是
*二维*
,特征将是输入图像的像素。
CNN 是几乎所有识别问题的主要方法。 这种类型的网络所提供的出色性能实际上已经促使诸如 Google 和 Facebook 之类的最大的技术公司投资于此类网络的研发项目,并开发和分发基于 CNN 的产品图像识别。
CNN 是几乎所有识别问题的主要方法。 这种类型的网络所提供的出色性能实际上已经促使诸如 Google 和 Facebook 之类的最大的技术公司投资于此类网络的研发项目,并开发和分发基于 CNN 的产品图像识别。
...
@@ -64,13 +64,13 @@ CNN 使用三个基本概念:*局部感受野*,*卷积*和*合并*。
...
@@ -64,13 +64,13 @@ CNN 使用三个基本概念:*局部感受野*,*卷积*和*合并*。
输入神经元
输入神经元
CNN 背后的概念之一是
*本地连接*
。 实际上,CNN 利用输入数据中可能存在的空间相关性。 第一后续层的每个神经元仅连接
*某些输入神经元。 该区域称为**局部感受野**。 在下图中,用*
会聚
*到隐藏的神经元的黑色 5x5 正方形表示:
*
CNN 背后的概念之一是
*本地连接*
。 实际上,CNN 利用输入数据中可能存在的空间相关性。 第一后续层的每个神经元仅连接
*某些输入神经元。 该区域称为**局部感受野**。 在下图中,用*
会聚
*
到隐藏的神经元的黑色 5x5 正方形表示:
![
CNN architecture
](
img/B05474_05_03.jpg
)
![
CNN architecture
](
img/B05474_05_03.jpg
)
从输入到隐藏的神经元
从输入到隐藏的神经元
*隐藏的神经元*
*,*
当然只会处理其接受区域内的输入数据,而不会实现其外部的变化。 但是,很容易看到,根据深度的基本原理,通过叠加多层本地连接的层,升级后,与输入相比,您将拥有处理越来越多的
*全局数据*
的单元 学习
,以使性能达到不断增长的抽象水平。
*隐藏的神经元*
当然只会处理其接受区域内的输入数据,而不会实现其外部的变化。 但是,很容易看到,根据深度的基本原理,通过叠加多层本地连接的层,升级后,与输入相比,您将拥有处理越来越多的
*全局数据*
的学习单元
,以使性能达到不断增长的抽象水平。
### 注意
### 注意
...
@@ -82,7 +82,7 @@ CNN 背后的概念之一是*本地连接*。 实际上,CNN 利用输入数据
...
@@ -82,7 +82,7 @@ CNN 背后的概念之一是*本地连接*。 实际上,CNN 利用输入数据
卷积运算
卷积运算
该操作称为
**卷积**
*。*
这样做,如果我们有一个 28x28 输入和 5x5 区域的图像,我们将在隐藏层中获得 24x24 神经元。 我们说过,每个神经元都有一个偏差和与该区域相关的 5x5 权重:我们将对所有 24x24 神经元使用这些权重和偏差。 这意味着第一隐藏层中的所有神经元将识别相同的特征,只是在输入图像中放置的位置不同。 因此,从输入层到隐藏特征图的连接图称为
*共享权重*
,偏差称为
*共享偏差*
*和*
,因为它们位于 事实共享
。
该操作称为
**卷积**
。这样,如果我们有一个 28x28 输入和 5x5 区域的图像,我们将在隐藏层中获得 24x24 神经元。 我们说过,每个神经元都有一个偏差和与该区域相关的 5x5 权重:我们将对所有 24x24 神经元使用这些权重和偏差。 这意味着第一隐藏层中的所有神经元将识别相同的特征,只是在输入图像中放置的位置不同。 因此,从输入层到隐藏特征图的连接图称为
*共享权重*
,偏置称为
*共享偏置*
,因为它们事实上是共享的
。
显然,我们需要识别的不仅仅是一个特征图,因此,一个完整的卷积层是由
*多个特征图*
组成的。
显然,我们需要识别的不仅仅是一个特征图,因此,一个完整的卷积层是由
*多个特征图*
组成的。
...
@@ -157,7 +157,7 @@ CNN 架构架构
...
@@ -157,7 +157,7 @@ CNN 架构架构
```
```
5.
为了减少过度拟合,我们应用了
*
脱落
*
技术。 该术语是指在神经网络中删除单元(隐藏,输入和输出)。 确定要消除的神经元是随机的; 一种方法是应用概率,正如我们将在代码中看到的那样。 因此,我们定义以下参数(待调整):
5.
为了减少过度拟合,我们应用了
*
丢弃
*
技术。 该术语是指在神经网络中删除单元(隐藏,输入和输出)。 确定要消除的神经元是随机的; 一种方法是应用概率,正如我们将在代码中看到的那样。 因此,我们定义以下参数(待调整):
```py
```py
dropout = 0.75
dropout = 0.75
...
@@ -205,7 +205,7 @@ bc1 = tf.Variable(tf.random_normal([32]))
...
@@ -205,7 +205,7 @@ bc1 = tf.Variable(tf.random_normal([32]))
回想一下,要识别图像,我们需要的不仅仅是功能图。 该数量仅是我们正在考虑的第一层要素地图的数量。 在我们的例子中,卷积层由 32 个特征图组成。
回想一下,要识别图像,我们需要的不仅仅是功能图。 该数量仅是我们正在考虑的第一层要素地图的数量。 在我们的例子中,卷积层由 32 个特征图组成。
下一步是
*第一卷积层*
和
`conv1`
的构造:
下一步是
*第一
个
卷积层*
和
`conv1`
的构造:
```
py
```
py
conv1
=
conv2d
(
_X
,
wc1
,
bc1
)
conv1
=
conv2d
(
_X
,
wc1
,
bc1
)
...
@@ -223,9 +223,9 @@ def conv2d(img, w, b):
...
@@ -223,9 +223,9 @@ def conv2d(img, w, b):
```
```
为此,我们使用了 TensorFlow
`tf.nn.conv2d`
函数。 它根据
*输入张量*
和
*共享权重*
计算 2D 卷积。 然后,该操作的结果将被添加到偏置
`bc1`
矩阵。 为此,我们使用函数
`tf.nn.conv2d`
从输入张量和共享权重的张量计算出二维卷积。 然后,该操作的结果将添加到偏置
`bc1`
矩阵中。
`tf.nn.relu`
是
*Relu 函数*
(整流线性单位),它是深层神经网络隐藏层中的
*
通常
激活函数*
。
为此,我们使用了 TensorFlow
`tf.nn.conv2d`
函数。 它根据
*输入张量*
和
*共享权重*
计算 2D 卷积。 然后,该操作的结果将被添加到偏置
`bc1`
矩阵。 为此,我们使用函数
`tf.nn.conv2d`
从输入张量和共享权重的张量计算出二维卷积。 然后,该操作的结果将添加到偏置
`bc1`
矩阵中。
`tf.nn.relu`
是
*Relu 函数*
(整流线性单位),它是深层神经网络隐藏层中的
*
常见
激活函数*
。
我们将这个激活函数应用于卷积函数的返回值。 填充值为
`'SAME'`
,它指示
*输出张量
输出
将具有与输入张量*
相同的大小。
我们将这个激活函数应用于卷积函数的返回值。 填充值为
`'SAME'`
,它指示
*输出张量将具有与输入张量*
相同的大小。
表示卷积层的一种方法为
`conv1`
,如下所示:
表示卷积层的一种方法为
`conv1`
,如下所示:
...
@@ -233,7 +233,7 @@ def conv2d(img, w, b):
...
@@ -233,7 +233,7 @@ def conv2d(img, w, b):
第一隐藏层
第一隐藏层
卷积操作之后,我们强加了
*
合并
*
步骤,该步骤简化了先前创建的卷积层的输出信息。
卷积操作之后,我们强加了
*
池化
*
步骤,该步骤简化了先前创建的卷积层的输出信息。
在我们的示例中,让我们采用卷积层的 2x2 区域,然后我们将汇总池层中每个点的信息。
在我们的示例中,让我们采用卷积层的 2x2 区域,然后我们将汇总池层中每个点的信息。
...
@@ -271,7 +271,7 @@ conv1 = tf.nn.dropout(conv1,keep_prob)
...
@@ -271,7 +271,7 @@ conv1 = tf.nn.dropout(conv1,keep_prob)
#### 第二卷积层
#### 第二卷积层
对于
*第二隐藏层*
,我们必须应用与第一层相同的操作,因此我们定义并初始化
*共享权重*
和
*共享偏
差
*
的张量:
对于
*第二隐藏层*
,我们必须应用与第一层相同的操作,因此我们定义并初始化
*共享权重*
和
*共享偏
置
*
的张量:
```
py
```
py
wc2
=
tf
.
Variable
(
tf
.
random_normal
([
5
,
5
,
32
,
64
]))
wc2
=
tf
.
Variable
(
tf
.
random_normal
([
5
,
5
,
32
,
64
]))
...
@@ -349,7 +349,7 @@ bout = tf.Variable(tf.random_normal([n_classes]))
...
@@ -349,7 +349,7 @@ bout = tf.Variable(tf.random_normal([n_classes]))
```
```
在应用
`softmax`
函数之前,我们必须计算
*证据*
该图像属于某个类别
:
在应用
`softmax`
函数之前,我们必须计算
该图像属于某个类别的
*证据*
:
```
py
```
py
pred
=
tf
.
add
(
tf
.
matmul
(
dense1
,
wout
),
bout
)
pred
=
tf
.
add
(
tf
.
matmul
(
dense1
,
wout
),
bout
)
...
@@ -358,7 +358,7 @@ pred = tf.add(tf.matmul(dense1, wout), bout)
...
@@ -358,7 +358,7 @@ pred = tf.add(tf.matmul(dense1, wout), bout)
#### 测试和训练模型
#### 测试和训练模型
必须将证据转换为 10 种可能类别中每一种的概率(该方法与我们在第 4 章
和
*神经网络介绍*
中看到的方法相同)。 因此,我们定义了成本函数,该函数通过应用
`softmax`
函数来评估模型的质量:
必须将证据转换为 10 种可能类别中每一种的概率(该方法与我们在第 4 章
“神经网络介绍”
中看到的方法相同)。 因此,我们定义了成本函数,该函数通过应用
`softmax`
函数来评估模型的质量:
```
py
```
py
cost
=
tf
.
reduce_mean
(
tf
.
nn
.
softmax_cross_entropy_with_logits
(
pred
,
y
))
cost
=
tf
.
reduce_mean
(
tf
.
nn
.
softmax_cross_entropy_with_logits
(
pred
,
y
))
...
@@ -606,9 +606,9 @@ with tf.Session() as sess:
...
@@ -606,9 +606,9 @@ with tf.Session() as sess:
```
```
##
递归
神经网络
##
循环
神经网络
另一个面向深度学习的架构是所谓的
**
递归神经网络**
(
**RNN**
)的架构。 RNN 的基本思想是在输入中使用
*顺序信息*
类型。 在神经网络中,我们通常假设每个输入和输出都独立于所有其他输入和输出。 但是,对于许多类型的问题,此假设并不肯定。 例如,如果您想预测一个短语的下一个单词,那么知道短语之前的单词肯定很重要。 这些神经网络称为
*递归
*
,因为它们对输入序列的所有元素执行相同的计算,并且除当前输入外,每个元素的输出还取决于所有先前的计算。
另一个面向深度学习的架构是所谓的
**
循环神经网络**
(
**RNN**
)的架构。 RNN 的基本思想是在输入中使用
*序列信息*
类型。 在神经网络中,我们通常假设每个输入和输出都独立于所有其他输入和输出。 但是,对于许多类型的问题,此假设并不肯定。 例如,如果您想预测一个短语的下一个单词,那么知道短语之前的单词肯定很重要。 这些神经网络称为
*循环
*
,因为它们对输入序列的所有元素执行相同的计算,并且除当前输入外,每个元素的输出还取决于所有先前的计算。
### RNN 架构
### RNN 架构
...
@@ -618,34 +618,36 @@ RNN 一次处理一个顺序输入项,维护一种*更新状态向量*,该
...
@@ -618,34 +618,36 @@ RNN 一次处理一个顺序输入项,维护一种*更新状态向量*,该
RNN 架构架构
RNN 架构架构
上图显示了 RNN 的方面,其
*展开
为*
版本,解释了在每个时间点的整个输入序列的网络结构。 很明显,与典型的多级神经网络不同,在
*每个级别*
中
*使用多个*
参数,RNN 始终使用
*相同的参数*
命名为
*U*
,
*V*
和
*W*
(请参见上图)。 此外,RNN 在输入中的相同序列的多个
*上的每个*
时刻,在
*处执行相同的计算。 共享相同的参数,可以大大减少网络在训练阶段必须学习的参数数量,从而也可以缩短训练时间。*
上图显示了 RNN 的方面,其
*展开
*
版本,解释了在每个时间点的整个输入序列的网络结构。 很明显,与典型的多级神经网络不同,在
*每个级别*
中
*使用多个*
参数,RNN 始终使用
*相同的参数*
,命名为
`U`
,
`V`
和
`W`
(请参见上图)。 此外,在相同输入序列的多个时刻的每个,RNN 执行相同的计算。 共享相同的参数,可以大大减少网络在训练阶段必须学习的参数数量,从而也可以缩短训练时间。
显然,您也可以训练这种类型的网络,因为参数是在每个时间共享的
*,所以为每个输出计算的梯度不仅取决于当前计算,还取决于 以前的。 例如,为了计算时间 *
t = 4
* 时的梯度,有必要使*
向后传播
*之前三个时间点的梯度,然后求和所得的梯度。 同样,*
整个输入序列
*通常被认为是训练集的*
单元素
*。*
显然,您也可以训练这种类型的网络,因为参数是在每个时间共享的
,所以为每个输出计算的梯度不仅取决于当前计算,还取决于以前的。 例如,为了计算时间
`t = 4`
时的梯度,有必要使
*向后传播*
之前三个时间点的梯度,然后求和所得的梯度。 同样,
*整个输入序列*
通常被认为是训练集的
*单元素*
。
但是,这种类型的网络的训练会遇到所谓的
*消失/爆炸*
梯度问题; 计算得出的梯度和向后传播的梯度在每个时间点倾向于使
*增大*
或
*减小*
,然后在一定时间间隔后,
*趋于无穷大*
]
或
*收敛为零*
。
但是,这种类型的网络的训练会遇到所谓的
梯度
*消失/爆炸*
问题; 计算得出的梯度和向后传播的梯度在每个时间点倾向于使
*增大*
或
*减小*
,然后在一定时间间隔后,
*趋于无穷大*
或
*收敛为零*
。
现在让我们检查 RNN 的工作方式。
X
<sub
xmlns:epub=
"http://www.idpf.org/2007/ops"
xmlns:m=
"http://www.w3.org/1998/Math/MathML"
xmlns:pls=
"http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:ssml=
"http://www.w3.org/2001/10/synthesis"
xmlns:svg=
"http://www.w3.org/2000/svg"
>
t
</sub>
; 是瞬间
*t*
上的网络输入,例如可以是代表句子的
*单词而 S <sub xmlns:epub="http://www.idpf.org/2007/ops" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:pls="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xmlns:svg="http://www.w3.org/2000/svg">t</sub> 的向量。 是网络的*
状态向量
*。 可以认为是系统的一种*
存储器
*,其中包含有关输入序列的所有先前元素的信息。 从*
电流输入
*(时间 *
t
* )开始评估 *
t
* 时刻的状态向量,并从*
评估
*状态*
。 通过
*U*
和
*W*
参数的先前时刻
*(时间 *
t-1
* ):*
现在让我们检查 RNN 的工作方式。
`X[t]`
; 是时间
`t`
上的网络输入,例如可以是代表句子的单词,而
`S[t]`
的向量。 是网络的
*状态向量*
。 可以认为是系统的一种
*记忆*
,其中包含有关输入序列的所有先前元素的信息。 从
*当前输入*
(时间
`t`
)开始评估
`t`
时刻的状态向量,并通过
`U`
和
`W`
参数的先前时刻(时间
`t-1`
)
*评估*
状态:
S
<sub>
t
</sub>
= f([U] X
<sub>
t
</sub>
+ [W] S
<sub>
t-1
</sub>
)
```
py
S
[
t
]
=
f
([
U
]
*
X
[
t
]
+
[
W
]
*
S
[
t
-
1
])
```
函数
*f*
是
*非线性函数*
,例如整流线性单位(ReLu),而 O
<sub>
t
</sub>
; 是使用参数
*V*
计算的
*t*
时刻的输出。
函数
`f`
是
*非线性函数*
,例如整流线性单位(ReLu),而
`O[t]`
; 是使用参数
`V`
计算的
`t`
时刻的输出。
输出将取决于网络所使用的问题的类型。 例如,如果您要预测句子的下一个单词,则它可能是系统词汇表中每个单词的
*概率向量*
。
输出将取决于网络所使用的问题的类型。 例如,如果您要预测句子的下一个单词,则它可能是系统词汇表中每个单词的
*概率向量*
。
### LSTM 网络
### LSTM 网络
**长
期共享内存
**
(
**LSTM**
)网络是 RNN 体系结构基本模型的扩展。 主要思想是改进网络,为其提供显式内存。 实际上,尽管 LSTM 网络与 RNN 并没有本质上的不同,但它们配备了特殊的隐藏单元,称为存储单元,其行为是长时间记住以前的输入。
**长
短期记忆
**
(
**LSTM**
)网络是 RNN 体系结构基本模型的扩展。 主要思想是改进网络,为其提供显式内存。 实际上,尽管 LSTM 网络与 RNN 并没有本质上的不同,但它们配备了特殊的隐藏单元,称为存储单元,其行为是长时间记住以前的输入。
![
LSTM networks
](
img/B05474_05_14.jpg
)
![
LSTM networks
](
img/B05474_05_14.jpg
)
LSTM)单位
LSTM)单位
LSTM 单元具有三个门和四个输入权重,
*xt*
(从数据到输入和三个门),而
*ht*
是单元的输出。
LSTM 单元具有三个门和四个输入权重,
`x[t]`
(从数据到输入和三个门),而
`h[t]`
是单元的输出。
LSTM 块包含确定输入是否足够重要以进行保存的门。 该块由四个单元组成:
LSTM 块包含确定输入是否足够重要以进行保存的门。 该块由四个单元组成:
*
**输入门**
:允许在结构中输入值
*
**输入门**
:允许在结构中输入值
*
**
忘记
门**
:删除结构中包含的值
*
**
遗忘
门**
:删除结构中包含的值
*
**输出门**
:确定设备何时输出陷在结构中的值
*
**输出门**
:确定设备何时输出陷在结构中的值
*
**单元**
:启用或禁用存储单元
*
**单元**
:启用或禁用存储单元
...
@@ -653,7 +655,7 @@ LSTM 块包含确定输入是否足够重要以进行保存的门。 该块由
...
@@ -653,7 +655,7 @@ LSTM 块包含确定输入是否足够重要以进行保存的门。 该块由
### 使用 TensorFlow 的 NLP
### 使用 TensorFlow 的 NLP
RNN 已被证明在诸如预测文本中的下一个字符或类似地预测句子中的下一个顺序词等问题上具有出色的性能。 但是,它们也用于更复杂的问题,例如
**机器翻译**
。 在这种情况下,网络将输入源语言中的单词序列,而您想要输出语言
*目标*
中的相应单词序列。 最后,RNN 被广泛使用的另一个非常重要的应用是
*语音
*
*
识别*
。 在下文中,我们将开发一个计算模型,该模型可以根据前一个单词的顺序来预测文本中的下一个单词。 为了测量模型的
*精度*
,我们将使用
**Penn 树库**
(
**PTB**
)数据集,该数据集是衡量这些模型精度的基准 。
RNN 已被证明在诸如预测文本中的下一个字符或类似地预测句子中的下一个顺序词等问题上具有出色的性能。 但是,它们也用于更复杂的问题,例如
**机器翻译**
。 在这种情况下,网络将输入源语言中的单词序列,而您想要输出语言
*目标*
中的相应单词序列。 最后,RNN 被广泛使用的另一个非常重要的应用是
*语音识别*
。 在下文中,我们将开发一个计算模型,该模型可以根据前一个单词的顺序来预测文本中的下一个单词。 为了测量模型的
*精度*
,我们将使用
**Penn 树库**
(
**PTB**
)数据集,该数据集是衡量这些模型精度的基准 。
本示例引用您在 TensorFlow 发行版的
`/rnn/ptb`
目录中找到的文件。 它包含以下两个文件:
本示例引用您在 TensorFlow 发行版的
`/rnn/ptb`
目录中找到的文件。 它包含以下两个文件:
...
...
docs/get-start-tf/ch06.md
浏览文件 @
8e0fb2f9
...
@@ -10,11 +10,11 @@
...
@@ -10,11 +10,11 @@
# GPU 编程
# 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
)
![
GPU programming
](
img/image_06_001.jpg
)
...
@@ -412,4 +412,4 @@ Inference error rate: 10.5%
...
@@ -412,4 +412,4 @@ Inference error rate: 10.5%
# 摘要
# 摘要
我们在本章中描述了 TensorFlow 的两个重要功能。 首先是使用称为
*GPU 计算*
的编程模型的可能性,通过该模型可以加快代码的速度(例如,神经网络的训练阶段)。 本章的第二部分专门描述框架
*TensorFlow Serving*
。 这是一个用于机器学习模型的高性能,开源服务系统,专为生产环境而设计,并针对 TensorFlow 进行了优化。 这个强大的框架可以运行多个模型,这些模型可以根据现实世界的数据随时间变化,从而可以更有效地利用 GPU 资源,并允许开发人员改善自己的机器学习模型。
我们在本章中描述了 TensorFlow 的两个重要功能。 首先是使用称为
*GPU 计算*
的编程模型的可能性,通过该模型可以加快代码的速度(例如,神经网络的训练阶段)。 本章的第二部分专门描述框架
*TensorFlow Serving*
。 这是一个用于机器学习模型的高性能,开源服务系统,专为生产环境而设计,并针对 TensorFlow 进行了优化。 这个强大的框架可以运行多个模型,这些模型可以根据现实世界的数据随时间变化,从而可以更有效地利用 GPU 资源,并允许开发人员改善自己的机器学习模型。
\ No newline at end of file
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录