Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
安浅Y
apachecn-dl-zh
提交
5f0a4020
A
apachecn-dl-zh
项目概览
安浅Y
/
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,体验更适合开发者的 AI 搜索 >>
提交
5f0a4020
编写于
9月 13, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-09-13 23:02:30
上级
7faad066
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
34 addition
and
34 deletion
+34
-34
docs/handson-cnn-tf/1.md
docs/handson-cnn-tf/1.md
+14
-14
docs/handson-cnn-tf/2.md
docs/handson-cnn-tf/2.md
+9
-9
docs/handson-cnn-tf/3.md
docs/handson-cnn-tf/3.md
+3
-3
docs/handson-cnn-tf/4.md
docs/handson-cnn-tf/4.md
+1
-1
docs/handson-cnn-tf/5.md
docs/handson-cnn-tf/5.md
+1
-1
docs/handson-cnn-tf/6.md
docs/handson-cnn-tf/6.md
+3
-3
docs/handson-cnn-tf/7.md
docs/handson-cnn-tf/7.md
+1
-1
docs/handson-cnn-tf/9.md
docs/handson-cnn-tf/9.md
+2
-2
未找到文件。
docs/handson-cnn-tf/1.md
浏览文件 @
5f0a4020
# TensorFlow 的设置和介绍
TensorFlow 是 Google 创建的开源软件库,可让您构建和执行数据流图以进行数值计算。 在这些图中,每个节点表示要执行的某些计算或功能,连接节点的图边缘表示它们之间流动的数据。 在 TensorFlow 中,数据是称为
**Tensors**
的多维数组。 张量围绕图流动,因此命名为 TensorFlow。
TensorFlow 是 Google 创建的开源软件库,可让您构建和执行数据流图以进行数值计算。 在这些图中,每个节点表示要执行的某些计算或功能,连接节点的图边缘表示它们之间流动的数据。 在 TensorFlow 中,数据是称为
**张量**
的多维数组。 张量围绕图流动,因此命名为 TensorFlow。
**机器学习**
(
**ML**
)模型,例如卷积神经网络,可以用这些图表示,而这正是 TensorFlow 最初设计的目的。
**机器学习**
(
**ML**
)模型,例如卷积神经网络,可以用这些图表示,而这正是 TensorFlow 最初设计的目的。
在本章中,我们将介绍以下主题:
...
...
@@ -23,12 +23,12 @@ TensorFlow 是 Google 创建的开源软件库,可让您构建和执行数据
在 TensorFlow 中,计算图是安排成图结构的一系列 TensorFlow 操作。 TensorFlow 图包含两种主要类型的组件:
*
**操作**
:更通常称为
**ops**
,这些是图中的节点。 Ops 执行需要在图形中进行的任何计算。 通常,它们消耗并产生张量。 一些操作很特殊,运行时可能会有某些副作用。
*
**操作**
:更通常称为
**ops**
,这些是图中的节点。 Ops 执行需要在图形中进行的任何计算。 通常,它们消耗并产生张量。 一些操作很特殊,运行时可能会有某些副作用。
*
**张量**
:这是图形的边缘; 它们将节点连接起来并表示流经节点的数据。 大多数 TensorFlow op 将产生并消耗这些
`tf.Tensors`
。
在 TensorFlow 中,您使用的主要对象称为 Tensor。 张量是向量和矩阵的一般化。 即使向量是一维的,矩阵是二维的,张量也可以是
*n*
-
维。 TensorFlow 将 Tensor 表示为用户指定数据类型的
*n*
维数组,例如
`float32`
。
在 TensorFlow 中,您使用的主要对象称为 Tensor。 张量是向量和矩阵的一般化。 即使向量是一维的,矩阵是二维的,张量也可以是
*n*
维。 TensorFlow 将 Tensor 表示为用户指定数据类型的
*n*
维数组,例如
`float32`
。
TensorFlow 程序通过首先构建计算图来工作。 该图将产生一些
`tf.Tensor`
输出。 要评估此输出,您必须通过在输出 Tensor 上调用
`tf.Session.run`
来在
`tf.Session`
中运行
*它。 当您执行此操作时,TensorFlow 将执行图形中需要执行的所有部分,以评估您要求其运行的`tf.Tensor`。*
TensorFlow 程序通过首先构建计算图来工作。 该图将产生一些
`tf.Tensor`
输出。 要评估此输出,您必须通过在输出 Tensor 上调用
`tf.Session.run`
来在
`tf.Session`
中运行
它。 当您执行此操作时,TensorFlow 将执行图形中需要执行的所有部分,以评估您要求其运行的
`tf.Tensor`
。
# 设置和安装 TensorFlow
...
...
@@ -225,11 +225,11 @@ test_labels = shuffled_labels[105:]
![](
img/dffe1e52-9e6f-40af-a66a-2cb494926289.jpg
)
线性分类器通过计算输入特征向量
*x*
和权重向量
*w*
之间的点积来工作。 在计算出点积之后,我们向结果添加一个值,称为偏差项
*b*
。 在我们的例子中,我们有三种可能的类别,任何输入特征向量都可能属于该类别,因此我们需要使用
*w <sup>1</sup>*
,
*w <sup>2 计算三种不同的点积</sup> ,*
和
*w <sup>3</sup>*
以查看其属于哪个类别。 但是,我们不必写出三个单独的点积,而只需在形状[3,4]
的权重矩阵与输入向量之间做一个矩阵乘法。 在下图中,我们可以更清楚地看到它的外观:
线性分类器通过计算输入特征向量
`x`
和权重向量
`w`
之间的点积来工作。 在计算出点积之后,我们向结果添加一个值,称为偏差项
`b`
。 在我们的例子中,我们有三种可能的类别,任何输入特征向量都可能属于该类别,因此我们需要使用
`w[1]`
,
`w[2]`
计算三种不同的点积,
`w[3]`
以查看其属于哪个类别。 但是,我们不必写出三个单独的点积,而只需在形状
`[3, 4]`
的权重矩阵与输入向量之间做一个矩阵乘法。 在下图中,我们可以更清楚地看到它的外观:
![](
img/e8b1acac-e39a-48e8-ac38-61fde8e1812f.png
)
我们还可以将该方程简化为更紧凑的形式,如下所示,其中我们的权重矩阵为
*W*
,偏差为
*b*
,
*x*
是我们的输入特征 向量,结果输出为
*s*
:
我们还可以将该方程简化为更紧凑的形式,如下所示,其中我们的权重矩阵为
`W`
,偏差为
`b`
,
`x`
是我们的输入特征向量,结果输出为
`s`
:
![](
img/e32b3460-ee85-420f-8eac-61314d7678c4.png
)
...
...
@@ -269,11 +269,11 @@ return linear_layer_out
在此处的代码中,我们创建了将存储权重和偏差的变量。 我们给他们起名字并提供所需的形状。 请记住,我们使用变量是因为我们想通过操作来操纵它们的值。
接下来,我们创建一个
`tf.matmul`
节点,将我们的输入特征矩阵和权重矩阵作为参数。 可以通过我们的
`linear_layer`
Python 变量访问此操作的结果。 然后将该结果传递给另一个运算符
`tf.nn.bias_add`
。 该运算来自
**NN**
(
**神经网络**
)模块,在我们希望向计算结果中添加偏差矢量时使用。 偏差必须是一维张量。
接下来,我们创建一个
`tf.matmul`
节点,将我们的输入特征矩阵和权重矩阵作为参数。 可以通过我们的
`linear_layer`
Python 变量访问此操作的结果。 然后将该结果传递给另一个运算符
`tf.nn.bias_add`
。 该运算来自
**NN**
(
**神经网络**
)模块,在我们希望向计算结果中添加偏差矢量时使用。 偏差必须是一维张量。
# 使用占位符馈送数据
占位符是类似 Tensor 的对象。 它们是您与 TensorFlow 之间的合同,该合同规定,当您在会话中运行计算图时,您将提供
*数据
或将*
数据馈入该占位符,以便您的图可以成功运行。
占位符是类似 Tensor 的对象。 它们是您与 TensorFlow 之间的合同,该合同规定,当您在会话中运行计算图时,您将提供
*数据
*
或将
数据馈入该占位符,以便您的图可以成功运行。
它们就像张量一样,就像张量一样,意味着您可以将它们传递到放置张量的地方。
...
...
@@ -316,7 +316,7 @@ initializer = tf.global_variables_initializer()
要训练我们的模型,我们必须定义一些称为损失函数的函数。 损失函数将告诉我们我们的模型目前做得如何好坏。
损失可在
`tf.losses`
模块中找到。 对于此模型,我们将使用铰链损耗。 铰链损耗是创建
**支持向量机**
(
**SVM**
)时使用的损耗函数。 铰链损失严重惩罚了错误的预测。 对于一个给定的示例!
[](
img/e4655c62-f4c7-4ac5-b435-8c8f4081016c.png
)
,其中!
[](
img/815f18aa-759e-4460-ba09-b6ade1d1caf5.png
)
是数据点的特征向量,!
[](
img/f58f1ac7-cc4b-4fac-b17b-8f5d92f64c49.png
)
是其标记,其铰链损耗如下:
损失可在
`tf.losses`
模块中找到。 对于此模型,我们将使用铰链损耗。 铰链损耗是创建
**支持向量机**
(
**SVM**
)时使用的损耗函数。 铰链损失严重惩罚了错误的预测。 对于一个给定的示例!
[](
img/e4655c62-f4c7-4ac5-b435-8c8f4081016c.png
)
,其中!
[](
img/815f18aa-759e-4460-ba09-b6ade1d1caf5.png
)
是数据点的特征向量,!
[](
img/f58f1ac7-cc4b-4fac-b17b-8f5d92f64c49.png
)
是其标记,其铰链损耗如下:
![](
img/18f2de01-7b99-4a9d-a016-fd44db07e0b5.png
)
...
...
@@ -348,7 +348,7 @@ loss = tf.reduce_mean(tf.losses.hinge_loss(logits=model_out, labels=y))
现在我们定义了要使用的损失函数; 我们可以使用这个损失函数来训练我们的模型。 如前面的方程式所示,损耗函数是权重和偏差的函数。 因此,我们要做的就是详尽地搜索权重和偏差的空间,并查看哪种组合最大程度地减少了损失。 当我们具有一维或二维权向量时,此过程可能还可以,但是当权向量空间太大时,我们需要一个更有效的解决方案。 为此,我们将使用一种名为
**梯度下降**
的优化技术。
通过使用损失函数和演算,梯度下降法可以看到如何调整模型权重和偏差的值,以使损失值减小。 这是一个迭代过程,需要多次迭代才能针对我们的训练数据对权重和偏差的值进行适当调整。 这个想法是,通过相对于目标函数!
[](
img/9530e4e9-229a-4d8a-9314-de81cd1259bc.png
)
w 的梯度的相反方向更新参数,可以最小化由权重
*w*
参数化的损失函数
*L*
。 参数
。 权重和偏差的更新功能如下所示:
通过使用损失函数和演算,梯度下降法可以看到如何调整模型权重和偏差的值,以使损失值减小。 这是一个迭代过程,需要多次迭代才能针对我们的训练数据对权重和偏差的值进行适当调整。 这个想法是,通过相对于目标函数!
[](
img/9530e4e9-229a-4d8a-9314-de81cd1259bc.png
)
w 的梯度的相反方向更新参数,可以最小化由权重
`w`
参数化的损失函数
`L`
。 权重和偏差的更新功能如下所示:
![](
img/56711c81-eedc-45e4-82ae-b0bcacc0d52c.png
)
...
...
@@ -356,13 +356,13 @@ loss = tf.reduce_mean(tf.losses.hinge_loss(logits=model_out, labels=y))
在这里,!
[](
img/580f5aaf-7c8b-432c-977a-4b6f774462b4.png
)
是迭代次数,!
[](
img/4f52cf0a-7b12-4259-b6bd-5c208e68a6ad.png
)
是称为学习率的超参数。
由两个变量
*w1*
和
*w2*
参数化的损失函数将如下图所示:
由两个变量
`w1`
和
`w2`
参数化的损失函数将如下图所示:
![](
img/638e8ecb-3cc1-4a6d-a972-2f29b4a517b4.jpg
)
上图显示了椭圆抛物面的水平曲线。 这是一个碗形的表面,碗的底部位于中心。 从图中可以看出,在点
*a*
(黑色直箭头)处的梯度矢量垂直于通过
*a*
的水平曲线。 实际上,梯度矢量指向损失函数最大增加率的方向。
上图显示了椭圆抛物面的水平曲线。 这是一个碗形的表面,碗的底部位于中心。 从图中可以看出,在点
`a`
(黑色直箭头)处的梯度矢量垂直于通过
`a`
的水平曲线。 实际上,梯度矢量指向损失函数最大增加率的方向。
因此,如果我们从
*点*
开始并朝与相反的
*方向
将权重更新为梯度矢量,那么我们将下降至 *
b
* 点,然后在下一个 迭代到 *
c
* ,依此类推,直到达到最小值。 选择使损失函数最小的参数来表示最终的训练线性模型。*
因此,如果我们从
*点*
开始并朝与相反的
*方向
*
将权重更新为梯度矢量,那么我们将下降至
`b`
点,然后在下一次迭代到
`c`
,依此类推,直到达到最小值。 选择使损失函数最小的参数来表示最终的训练线性模型。
TensorFlow 的好处在于,它使用其内置的优化器(称为
**自动微分**
)为我们计算了所有所需的梯度。 我们要做的就是选择一个梯度下降优化器,并告诉它最小化我们的损失函数。 TensorFlow 将自动计算所有梯度,然后使用这些梯度为我们更新权重。
...
...
docs/handson-cnn-tf/2.md
浏览文件 @
5f0a4020
# 深度学习和卷积神经网络
在开始本章之前,我们需要讨论一下 AI 和
**机器学习**
(
**ML**
)以及这两个组件如何组合在一起。 术语“人工”是指不真实或自然的事物,而“智能”是指能够理解,学习或能够解决问题的事物(在极端情况下,具有自我意识)。
在开始本章之前,我们需要讨论一下 AI 和
**机器学习**
(
**ML**
)以及这两个组件如何组合在一起。 术语“人工”是指不真实或自然的事物,而“智能”是指能够理解,学习或能够解决问题的事物(在极端情况下,具有自我意识)。
正式地,人工智能研究始于 1956 年的达特茅斯会议,其中定义了 AI 及其使命。 在接下来的几年中,每个人都很乐观,因为机器能够解决代数问题和学习英语,并且在 1972 年制造了第一台机器人。但是在 1970 年代,由于过分的承诺但交付不足,出现了所谓的 AI 冬季 人工智能研究有限且资金不足。 此后,尽管 AI 通过专家系统重生,但可以显示人类水平的分析技能。 之后,第二次 AI 冬季机器学习在 1990 年代被认可为一个单独的领域,当时概率理论和统计学开始得到利用。
...
...
@@ -12,19 +12,19 @@
*
AI 和 ML 概念的一般说明
*
人工神经网络和深度学习
*
**卷积神经网络**
(
**CNN**
)及其主要构建模块
*
**卷积神经网络**
(
**CNN**
)及其主要构建模块
*
使用 TensorFlow 构建 CNN 模型以识别数字图像
*
Tensorboard 简介
# AI 和 ML
就本书而言,将
**人工智能**
(
**AI**
)视为计算机科学领域,负责制造可解决特定问题的代理(软件/机器人)。 在这种情况下,“智能”表示代理是灵活的,并且它通过传感器感知环境,并将采取使自身在某个特定目标成功的机会最大化的措施。
就本书而言,将
**人工智能**
(
**AI**
)视为计算机科学领域,负责制造可解决特定问题的代理(软件/机器人)。 在这种情况下,“智能”表示代理是灵活的,并且它通过传感器感知环境,并将采取使自身在某个特定目标成功的机会最大化的措施。
我们希望 AI 最大化名为
**期望效用**
的东西,或者通过执行动作获得某种满足的概率。 一个简单易懂的例子是上学,您将最大程度地获得工作的期望效用。
人工智能渴望取代在完成繁琐的日常任务中涉及的易于出错的人类智能。 AI 旨在模仿(以及智能代理应该具有)的人类智能的一些主要组成部分是:
*
**自然语言处理**
(
**NLP**
):能够理解口头或书面人类语言,并能自然回答问题。 NLP 的一些示例任务包括自动旁白,机器翻译或文本摘要。
*
**自然语言处理**
(
**NLP**
):能够理解口头或书面人类语言,并能自然回答问题。 NLP 的一些示例任务包括自动旁白,机器翻译或文本摘要。
*
**知识和推理**
:开发并维护代理周围世界的最新知识。 遵循人类推理和决策来解决特定问题并对环境的变化做出反应。
*
**规划和解决问题的方法**
:对可能采取的措施进行预测,并选择能最大化预期效用的方案,换句话说,为该情况选择最佳措施。
*
**感知**
:代理程序所配备的传感器向其提供有关代理程序所处世界的信息。这些传感器可以像红外传感器一样简单,也可以像语音识别麦克风那样复杂。 或相机以实现机器视觉。
...
...
@@ -36,7 +36,7 @@ ML 使用诸如统计分析,概率模型,决策树和神经网络之类的*
![](
img/1b20cfee-c32d-4d9d-836c-e39b8fa2fc4c.png
)
仅将原始图像作为输入输入到我们的机器将不会产生合理的结果。 因此,应对图像进行预处理以提取某种可解释的抽象。 在我们的特定情况下,最简单的方法是根据颜色对手进行分割,然后进行垂直投影,将
*x*
轴上的非零值相加。 如果图像的宽度为 100 像素,则垂直投影将形成一个向量,该向量长 100 个元素(100 维),并且在展开的手指位置具有最高的值。 我们可以将提取的任何特征向量称为
**特征向量**
。
仅将原始图像作为输入输入到我们的机器将不会产生合理的结果。 因此,应对图像进行预处理以提取某种可解释的抽象。 在我们的特定情况下,最简单的方法是根据颜色对手进行分割,然后进行垂直投影,将
`x`
轴上的非零值相加。 如果图像的宽度为 100 像素,则垂直投影将形成一个向量,该向量长 100 个元素(100 维),并且在展开的手指位置具有最高的值。 我们可以将提取的任何特征向量称为
**特征向量**
。
假设对于我们的手部数据,我们有 1000 张不同的图像,现在我们已经对其进行处理以提取每个图像的特征向量。 在机器学习阶段,所有特征向量都将被提供给创建模型的机器学习系统。 我们希望该模型能够推广并能够预测未经过系统训练的任何未来图像的数字。
...
...
@@ -81,13 +81,13 @@ ML 的新型深度学习方法具有的最酷的功能是,它们不需要(
*
深度 CNN
*
深度自编码器
*
**生成对抗网络**
(
**GAN**
s
)
*
**生成对抗网络**
(
**GAN**
)
所有这些方法都是深度学习过程的一部分,在该过程中,大量数据暴露于多层神经网络。 但是,这些新方法的好处是有代价的。 所有这些新算法都需要更多的计算资源(CPU 和 GPU),并且比传统方法需要更长的训练时间。
# 人工神经网络
**人工神经网络**
(
**ANNs**
)受存在于我们大脑中的神经元生物网络的启发非常模糊,它由一组名为
**人工神经元**
的单元组成, 分为以下三种类型的层:
**人工神经网络**
(
**ANN**
)受存在于我们大脑中的神经元生物网络的启发非常模糊,它由一组名为
**人工神经元**
的单元组成, 分为以下三种类型的层:
*
输入层
*
隐藏层
...
...
@@ -286,7 +286,7 @@ TensorFlow 的所有不同优化器都可以在`tf.train`类中找到。 例如
# 全连接层
组成我们之前看到的 ANN 的神经元层通常称为密集连接层,或
**完全连接的**
(
**FC**
)层,或简称为线性层。 诸如 Caffe 之类的一些深度学习库实际上会将它们视为点乘积运算,非线性层可能会或可能不会跟随它们。 它的主要参数将是输出大小,基本上是其输出中神经元的数量。
组成我们之前看到的 ANN 的神经元层通常称为密集连接层,或
**完全连接的**
(
**FC**
)层,或简称为线性层。 诸如 Caffe 之类的一些深度学习库实际上会将它们视为点乘积运算,非线性层可能会或可能不会跟随它们。 它的主要参数将是输出大小,基本上是其输出中神经元的数量。
在第 1 章,
*设置和 TensorFlow*
简介中,我们创建了自己的致密层,但是您可以使用
`tf.layers`
来更轻松地创建它,如下所示:
...
...
@@ -365,7 +365,7 @@ $ tensorboard --logdir=./logs/xor_logs
# 卷积神经网络
现在,我们将讨论另一种类型的神经网络,该网络专门设计用于处理具有某些空间特性的数据,例如图像。 这种类型的神经网络称为
**卷积神经网络**
(
**CNN**
)。
现在,我们将讨论另一种类型的神经网络,该网络专门设计用于处理具有某些空间特性的数据,例如图像。 这种类型的神经网络称为
**卷积神经网络**
(
**CNN**
)。
CNN 主要由称为
**卷积层**
的层组成,这些层对其层输入进行过滤以在这些输入中找到有用的特征。 这种过滤操作称为卷积,从而产生了这种神经网络的名称。
...
...
docs/handson-cnn-tf/3.md
浏览文件 @
5f0a4020
...
...
@@ -2,13 +2,13 @@
图像分类是指根据图像内容将图像分类的问题。 让我们从分类的示例任务开始,其中图片可能是狗的图像,也可能不是。 某人可能要完成此任务的一种简单方法是,像在第 1 章中所做的那样,获取输入图像,将其重塑为矢量,然后训练线性分类器(或其他某种分类器)。 ],设置和 TensorFlow 简介。 但是,您很快就会发现此主意不好,原因有几个。 除了不能很好地缩放到输入图像的大小之外,线性分类器将很难将一个图像与另一个图像分开。
与可以在图像中看到有意义的图案和内容的人类相反,计算机只能看到从 0 到 255 的数字数组。对于同一类的不同图像,这些数字在相同位置的广泛波动导致无法直接使用它们 作为分类器的输入。 从
**加拿大高级研究学院**
(
**CIFAR**
)数据集中获取的这 10 张示例狗图像完美地说明了此问题。 狗的外观不仅有所不同,而且它们在镜头前的姿势和位置也有所不同。 对于机器来说,每个图像一目了然,完全没有共同点,而我们人类却可以清楚地看到它们都是狗:
与可以在图像中看到有意义的图案和内容的人类相反,计算机只能看到从 0 到 255 的数字数组。对于同一类的不同图像,这些数字在相同位置的广泛波动导致无法直接使用它们 作为分类器的输入。 从
**加拿大高级研究学院**
(
**CIFAR**
)数据集中获取的这 10 张示例狗图像完美地说明了此问题。 狗的外观不仅有所不同,而且它们在镜头前的姿势和位置也有所不同。 对于机器来说,每个图像一目了然,完全没有共同点,而我们人类却可以清楚地看到它们都是狗:
| !
[](
img/b2fdaadf-a05d-427b-9d59-32dfd2b8f848.png
)
| !
[](
img/6d49a152-47c2-4061-b439-058cf72e0f0e.png
)
| !
[](
img/506c2d82-6a12-490e-8d6f-8e27cfb1581e.png
)
| !
[](
img/9452b952-9a71-4f6f-91da-14e8b8bd8ab3.png
)
| !
[](
img/4be49236-884e-48e2-84b0-6f978c3f2b6b.png
)
| !
[](
img/70dcaa26-f2c5-4d15-8936-503d25614742.png
)
| !
[](
img/9c808ac0-8f30-47c7-88cb-d2af50925ed8.png
)
| !
[](
img/57205127-d998-4078-94a4-6b5ad5f34fd3.png
)
| !
[](
img/951cd609-983a-47bc-af4a-8cba9afdfad7.png
)
| !
[](
img/ff665bba-d432-4464-a9e1-723096fce210.png
)
|
一个更好的解决方案是告诉计算机从输入图像中提取一些有意义的特征,例如常见的形状,纹理或颜色。 然后,我们可以使用这些功能而不是原始输入图像作为分类器的输入。 现在,我们正在寻找图像中这些功能的存在,以告诉我们图像是否包含我们要识别的对象。
这些提取的特征在我们看来将仅仅是一个高维向量(但通常比原始图像空间要小得多),可以用作分类器的输入。 多年来开发的一些著名的特征提取方法是
**尺度不变特征**
(
**SIFT**
),
**最大稳定的末端区域**
(
**MSER [**
),
**本地二进制模式**
(
**LBP**
)和定向梯度(
**HOG**
)的
**直方图。**
这些提取的特征在我们看来将仅仅是一个高维向量(但通常比原始图像空间要小得多),可以用作分类器的输入。 多年来开发的一些著名的特征提取方法是
**尺度不变特征**
(
**SIFT**
),
**最大稳定的末端区域**
(
**MSER [**
),
**本地二进制模式**
(
**LBP**
)和定向梯度(
**HOG**
)的
**直方图。**
当使用卷积神经网络进行图像分类时,2012 年是计算机视觉(以及随后的其他机器学习领域)最大的转折点之一,这标志着如何解决这一任务(以及许多其他问题)的方式发生了转变。 我们不是专注于手工制作更好的特征以从图像中提取,而是使用数据驱动的方法来找到代表问题数据集的最佳特征集。 CNN 将使用大量训练图像,并自己学习代表数据的最佳特征,以解决分类任务。
...
...
@@ -96,7 +96,7 @@ loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=model_logit
加州理工学院的数据集由加州理工学院建立,并发布了两个版本。 Caltech-101 于 2003 年发布,包含 101 个类别,每个类别约 40 至 800 张图像; Caltech-256 于 2007 年发布,具有 256 个对象类别,总共包含 30607 张图像。 这些图片是从 Google 图片和 PicSearch 收集的,其大小约为 300x400 像素。
Pascal
**视觉对象类**
(
**VOC**
)挑战成立于 2005 年。每年组织到 2012 年,它为
*图像提供了广泛的自然图像的著名基准数据集。 类别分类,对象检测,分割和操作分类*
。 它是一个多样化的数据集,包含来自各种大小,姿势,方向,照明和遮挡的 flickr 的图像。 从 2005 年(仅四个类别:自行车,汽车,摩托车和人,火车/验证/测试:包含 5 个图像的 2578 个注释对象的 1578 张图像)到 2012 年(二十个类别,火车/验证数据具有 11,530 张图片,包含 27,450 个 ROI 注释对象和 6,929 个细分)。
Pascal
**视觉对象类**
(
**VOC**
)挑战成立于 2005 年。每年组织到 2012 年,它为
*图像提供了广泛的自然图像的著名基准数据集。 类别分类,对象检测,分割和操作分类*
。 它是一个多样化的数据集,包含来自各种大小,姿势,方向,照明和遮挡的 flickr 的图像。 从 2005 年(仅四个类别:自行车,汽车,摩托车和人,火车/验证/测试:包含 5 个图像的 2578 个注释对象的 1578 张图像)到 2012 年(二十个类别,火车/验证数据具有 11,530 张图片,包含 27,450 个 ROI 注释对象和 6,929 个细分)。
重大变化来自 PASCAL(VOC)2007 挑战赛,当时班级的数量从 4 个增加到 20 个,并且此后一直固定。 分类任务的评估指标已更改为平均精度。 仅在 VOC 2007 挑战赛之前提供测试数据的注释。
...
...
docs/handson-cnn-tf/4.md
浏览文件 @
5f0a4020
...
...
@@ -172,7 +172,7 @@ R-CNN 与 FastRCNN 的比较表明,后者在训练时快约 10 倍,而在测
这项技术在 2015 年 Fast R-CNN 之后不久提出,解决了使用外部区域建议方法的需求,并消除了与之相关的计算成本。
该算法的主要区别在于,不是使用外部算法(例如选择性搜索)来创建提案,而是使用称为
**区域提案网络**
(
**RPN**
)的子网 为我们学习并提出建议。 在此屏幕快照中显示:
该算法的主要区别在于,不是使用外部算法(例如选择性搜索)来创建提案,而是使用称为
**区域提案网络**
(
**RPN**
)的子网 为我们学习并提出建议。 在此屏幕快照中显示:
![](
img/126d2b47-420b-482c-a03f-a43408f3fd04.jpg
)
...
...
docs/handson-cnn-tf/5.md
浏览文件 @
5f0a4020
...
...
@@ -72,7 +72,7 @@
# 虚拟网
VGGNet 由牛津大学的
**视觉几何组**
(
**VGG**
)创建,是真正引入堆叠更多层的想法的首批架构之一。 虽然 AlexNet 最初以其七层出现时被认为很深,但与 VGG 和其他现代体系结构相比,这现在已经很小了。
VGGNet 由牛津大学的
**视觉几何组**
(
**VGG**
)创建,是真正引入堆叠更多层的想法的首批架构之一。 虽然 AlexNet 最初以其七层出现时被认为很深,但与 VGG 和其他现代体系结构相比,这现在已经很小了。
与只有 11x11 的 AlexNet 相比,VGGNet 仅使用空间大小为 3x3 的非常小的滤镜。 这些 3x3 卷积滤波器经常散布在 2x2 最大池化层中。
...
...
docs/handson-cnn-tf/6.md
浏览文件 @
5f0a4020
...
...
@@ -120,7 +120,7 @@ with tf.name_scope("Solver"):
# 变分自编码器
我们第一个可以生成更多类似于训练数据的真实生成模型,将是
**变分自编码器**
(
**VAE**
)。 VAE 看起来像正常的自编码器,但有一个新的约束,它将迫使我们的压缩表示(潜伏空间)遵循零均值和单位方差高斯分布。
我们第一个可以生成更多类似于训练数据的真实生成模型,将是
**变分自编码器**
(
**VAE**
)。 VAE 看起来像正常的自编码器,但有一个新的约束,它将迫使我们的压缩表示(潜伏空间)遵循零均值和单位方差高斯分布。
在潜在空间上施加此约束的想法是,当我们想使用 VAE 生成新数据时,我们可以创建来自单位高斯分布的样本矢量,并将其提供给经过训练的解码器。 VAE 和常规自编码器之间的差异就是对潜在空间矢量的约束。 这个约束条件使我们可以创建一种新的潜在矢量,然后再将其馈送到解码器以生成数据。
...
...
@@ -323,7 +323,7 @@ class VAE_CNN_GEN(object):
# 生成对抗网络
**生成对抗网络**
(
**GAN**
)是另一种非常新的生成模型,由于其令人印象深刻的结果而受到关注。 GAN 由两个网络组成:生成器网络和鉴别器网络。 在训练过程中,他们俩都玩零和游戏,其中鉴别器网络试图发现输入到其中的图像是真实的还是伪造的。 同时,生成器网络尝试创建足以欺骗鉴别器的伪造图像。
**生成对抗网络**
(
**GAN**
)是另一种非常新的生成模型,由于其令人印象深刻的结果而受到关注。 GAN 由两个网络组成:生成器网络和鉴别器网络。 在训练过程中,他们俩都玩零和游戏,其中鉴别器网络试图发现输入到其中的图像是真实的还是伪造的。 同时,生成器网络尝试创建足以欺骗鉴别器的伪造图像。
想法是经过一段时间的训练,鉴别器和生成器都非常擅长于他们的任务。 结果,生成器被迫尝试创建看起来越来越接近原始数据集的图像。 为此,它必须捕获数据集的概率分布。
...
...
@@ -509,7 +509,7 @@ generator_vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, 'generator'
# Deep convolutional GAN
**深度卷积 GAN**
(
**DCGAN**
)是我们之前看到的普通 GAN 的扩展。 我们不是使用完全连接的层,而是使用卷积层。 想法是使用卷积层可以帮助生成器形成更好的图像。 以下是这种模型的示例:
**深度卷积 GAN**
(
**DCGAN**
)是我们之前看到的普通 GAN 的扩展。 我们不是使用完全连接的层,而是使用卷积层。 想法是使用卷积层可以帮助生成器形成更好的图像。 以下是这种模型的示例:
![](
img/b9cf2f8e-db74-44ab-8090-d032d5a82d24.jpg
)
...
...
docs/handson-cnn-tf/7.md
浏览文件 @
5f0a4020
...
...
@@ -15,7 +15,7 @@
# 什么时候?
研究表明,在 ImageNet 上训练的卷积网络权重中的特征提取优于常规特征提取方法,例如 SURF,[HTG0]可变形部分描述符(
**DPD**
s),
**定向梯度直方图**
(
**HOG**
)和
**一袋单词**
(
**BoW**
)。 这意味着无论常规视觉表示如何工作,卷积特征都可以同样好地使用,唯一的缺点是更深的架构可能需要更长的时间来提取特征。
研究表明,在 ImageNet 上训练的卷积网络权重中的特征提取优于常规特征提取方法,例如 SURF,[HTG0]可变形部分描述符(
**DPD**
s),
**定向梯度直方图**
(
**HOG**
)和
**一袋单词**
(
**BoW**
)。 这意味着无论常规视觉表示如何工作,卷积特征都可以同样好地使用,唯一的缺点是更深的架构可能需要更长的时间来提取特征。
当在 ImageNet 上训练深层卷积神经网络时,第一层中的卷积滤波器的可视化(请参见下图)显示,他们学习了
*低层*
特征,类似于边缘检测滤波器,而卷积滤波器 在最后一层学习
*高级*
功能,这些功能捕获特定于类的信息。 因此,如果我们在第一个池化层之后提取 ImageNet 的特征并将其嵌入 2D 空间(例如,使用 t-SNE),则可视化将显示数据中存在一些无政府状态,而如果执行 在完全连接的层上相同,我们将注意到具有相同语义信息的数据被组织成簇。 这意味着网络可以在更高层次上很好地概括,并且有可能将这种知识转移到看不见的类别中。
...
...
docs/handson-cnn-tf/9.md
浏览文件 @
5f0a4020
...
...
@@ -224,7 +224,7 @@ with tf.Session() as sess:
# 当数据不适合在一台计算机上时
可能出现的一个问题是,我们根本无法将数据存储在一台计算机上和/或我们仍然需要在该数据集上进行搜索。 为了解决此类问题,我们可能不仅需要分布式
**分布式 SQL**
(
**NoSQL**
)数据库,例如 Cassandra。 Cassandra 支持在可用性和性能至关重要的多个系统上进行数据分发:
可能出现的一个问题是,我们根本无法将数据存储在一台计算机上和/或我们仍然需要在该数据集上进行搜索。 为了解决此类问题,我们可能不仅需要分布式
**分布式 SQL**
(
**NoSQL**
)数据库,例如 Cassandra。 Cassandra 支持在可用性和性能至关重要的多个系统上进行数据分发:
![](
img/fbc95570-cec1-4bbb-b2a1-04cd9aca41bd.png
)
...
...
@@ -370,7 +370,7 @@ nodetool -h localhost snapshot mydb
您将了解以下 Amazon Cloud Services:
*
**弹性计算云**
(
**EC2**
)
*
**弹性计算云**
(
**EC2**
)
*
S3
*
贤者
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录