Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
D_ACMER
apachecn-dl-zh
提交
f41bf53b
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,发现更多精彩内容 >>
提交
f41bf53b
编写于
8月 05, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-08-05 22:15:52
上级
46ccc0d6
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
9 addition
and
9 deletion
+9
-9
docs/hands-on-dl-tf-zh/ch04.md
docs/hands-on-dl-tf-zh/ch04.md
+3
-3
docs/hands-on-dl-tf-zh/ch05.md
docs/hands-on-dl-tf-zh/ch05.md
+6
-6
未找到文件。
docs/hands-on-dl-tf-zh/ch04.md
浏览文件 @
f41bf53b
...
...
@@ -221,7 +221,7 @@ import tensorflow.contrib.learn as learn
from
tensorflow.contrib.learn.python.learn.estimators
import
estimator
```
我们还希望导入一些用于基本操作的库
-抓取 NumPy,math
和 Matplotlib(可选)。 这里值得注意的是
`sklearn`
,这是一个通用的机器学习库,它试图简化模型的创建,训练和使用。 我们主要将其用于方便的指标,但是您会发现它具有与 Learn 类似的主接口:
我们还希望导入一些用于基本操作的库
-- 抓取 NumPy,
`math`
和 Matplotlib(可选)。 这里值得注意的是
`sklearn`
,这是一个通用的机器学习库,它试图简化模型的创建,训练和使用。 我们主要将其用于方便的指标,但是您会发现它具有与 Learn 类似的主接口:
```
py
# Some basics
...
...
@@ -376,7 +376,7 @@ import tensorflow.contrib.layers as layers
def
conv_learn
(
X
,
y
,
mode
):
```
由于这是卷积模型,因此我们需要确保数据格式正确。 特别是,这意味着将输入重塑为不仅具有正确的二维形状(
36x36
),而且具有 1 个颜色通道(最后一个尺寸)。 这是 TensorFlow 计算图的一部分,因此我们使用
`tf.reshape`
而不是
`np.reshape`
。 同样,由于这是通用图,因此我们希望将输出进行一次热编码,
`tf.one_hot`
提供了该功能。 请注意,我们必须描述有多少类(
`5`
),应设置的值(
`1`
)和未设置的值(
`0`
):
由于这是卷积模型,因此我们需要确保数据格式正确。 特别是,这意味着将输入重塑为不仅具有正确的二维形状(
`36x36`
),而且具有 1 个颜色通道(最后一个尺寸)。 这是 TensorFlow 计算图的一部分,因此我们使用
`tf.reshape`
而不是
`np.reshape`
。 同样,由于这是通用图,因此我们希望将输出进行一次热编码,
`tf.one_hot`
提供了该功能。 请注意,我们必须描述有多少类(
`5`
),应设置的值(
`1`
)和未设置的值(
`0`
):
```
py
# Ensure our images are 2d
...
...
@@ -385,7 +385,7 @@ def conv_learn(X, y, mode):
y
=
tf
.
one_hot
(
tf
.
cast
(
y
,
tf
.
int32
),
5
,
1
,
0
)
```
现在,真正的乐趣开始了。 为了指定卷积层,让我们初始化一个新的作用域
`conv_layer`
。 这只会确保我们不会破坏任何变量。
`layers.convolutional`
提供了基本的机制。 它接受我们的输入(一个 TensorFlow 张量),多个输出(实际上是内核或过滤器的数量)以及内核的大小,这里是
5x5
的窗口。 对于激活函数,让我们使用整流线性,可以从主 TensorFlow 模块调用它。 这给了我们基本的卷积输出
`h1`
。
现在,真正的乐趣开始了。 为了指定卷积层,让我们初始化一个新的作用域
`conv_layer`
。 这只会确保我们不会破坏任何变量。
`layers.convolutional`
提供了基本的机制。 它接受我们的输入(一个 TensorFlow 张量),多个输出(实际上是内核或过滤器的数量)以及内核的大小,这里是
`5x5`
的窗口。 对于激活函数,让我们使用整流线性,可以从主 TensorFlow 模块调用它。 这给了我们基本的卷积输出
`h1`
。
实际上,最大池化的发生与常规 TensorFlow 中的发生完全相同,既不容易也不难。 具有通常的内核大小和步幅的
`tf.nn.max_pool`
函数可以正常工作。 保存到
`p1`
中:
...
...
docs/hands-on-dl-tf-zh/ch05.md
浏览文件 @
f41bf53b
...
...
@@ -26,7 +26,7 @@ for font in range(5):
train
[
9
*
(
font
*
62
+
letter
)]
```
Matplotlib 需要处理很多子图。 因此,我们将创建一个新数组,高 5 幅图像,5 种字体乘以 36 像素,宽 62 幅图像,62 个字母或数字乘以 36 像素。 分配零数组后,我们可以将训练图像堆叠到其中。 字体和字母充当索引,并且我们在大型数组中一次设置
36x36
的值。 注意,这里我们在
`train`
数组中有
`9`
,因为我们每个字母只采取一种抖动类型。
Matplotlib 需要处理很多子图。 因此,我们将创建一个新数组,高 5 幅图像,5 种字体乘以 36 像素,宽 62 幅图像,62 个字母或数字乘以 36 像素。 分配零数组后,我们可以将训练图像堆叠到其中。 字体和字母充当索引,并且我们在大型数组中一次设置
`36x36`
的值。 注意,这里我们在
`train`
数组中有
`9`
,因为我们每个字母只采取一种抖动类型。
让我们来看一下
`pcolormesh`
的快速调用:
...
...
@@ -53,7 +53,7 @@ plt.pcolormesh(all_letters,
![
The logistic regression model
](
img/00068.jpg
)
它具有
36x36
像素外加 1 倍乘以 5 类总权重,即我们需要训练的 6,485 个参数。 经过 1,000 次训练后,此模型的验证准确率达到了 40%。 您的结果可能会有所不同。 这相对较差,但是该模型具有一些优势。
它具有
`36x36`
像素外加 1 倍乘以 5 类总权重,即我们需要训练的 6,485 个参数。 经过 1,000 次训练后,此模型的验证准确率达到了 40%。 您的结果可能会有所不同。 这相对较差,但是该模型具有一些优势。
让我们回头看一下代码:
...
...
@@ -83,7 +83,7 @@ y = tf.nn.softmax(tf.matmul(x,W) + b)
![
The single hidden layer neural network model
](
img/00069.jpg
)
该模型具有
36x36
像素,外加 1 个偏移乘以 128 个节点,再加上 128 个隐藏节点加上 1 个偏移乘以 5 个类的总权重,即 166,661 个参数。 隐藏层使用
`sigmoid`
激活函数来实现非线性。 在经过 5,000 个周期后,参数的纠缠达到了约 60% 的验证准确率,这是一个很大的改进。 但是,此改进的代价是大量增加了计算复杂性中的参数数量,您可以从代码中大致了解一下:
该模型具有
`36x36`
像素,外加 1 个偏移乘以 128 个节点,再加上 128 个隐藏节点加上 1 个偏移乘以 5 个类的总权重,即 166,661 个参数。 隐藏层使用
`sigmoid`
激活函数来实现非线性。 在经过 5,000 个周期后,参数的纠缠达到了约 60% 的验证准确率,这是一个很大的改进。 但是,此改进的代价是大量增加了计算复杂性中的参数数量,您可以从代码中大致了解一下:
```
py
# These will be inputs
...
...
@@ -162,7 +162,7 @@ y = tf.nn.softmax(tf.matmul(h2,W3) + b3)
![
Convolutional neural network
](
img/00071.jpg
)
重复出现的局部特征应该是您模型的重要线索。 我们使用卷积神经网络捕获了其中一些局部特征。 我们从一个卷积层开始,一个
5x5 窗口,使用整流线性单元,通过四个额外的偏项计算四个特征,并提取了有趣的局部参数。 接下来,我们将 2x2 的最大池化层应用于每个特征,从而将中间值的数量减少到 18x18x4
加上 1 个偏差。 将其平整为 1,297 个数字,并放入一个密集的神经网络的 32 个节点,然后进行 Softmax 激活,从而完成了具有 41,773 个参数的模型。
重复出现的局部特征应该是您模型的重要线索。 我们使用卷积神经网络捕获了其中一些局部特征。 我们从一个卷积层开始,一个
`5x5`
窗口,使用整流线性单元,通过四个额外的偏项计算四个特征,并提取了有趣的局部参数。 接下来,我们将
`2x2`
的最大池化层应用于每个特征,从而将中间值的数量减少到
`18x18x4`
加上 1 个偏差。 将其平整为 1,297 个数字,并放入一个密集的神经网络的 32 个节点,然后进行 Softmax 激活,从而完成了具有 41,773 个参数的模型。
尽管实现和代码比以前要花更多的精力,但是这可以很好地缩减模型的整体大小:
...
...
@@ -217,7 +217,7 @@ h2_drop = tf.nn.dropout(h2, keep_prob)
![
Deep convolutional neural network
](
img/00072.jpg
)
尽管我们使用了较小的
3x3 窗口,但我们在第一个卷积层上计算了 16 个滤镜。 在进行最大 2x2 的池化之后,我们再次使用另一个 3x3
窗口和 4 个过滤器对池化值进行了处理。 另一个合并层再次馈入 32 个紧密连接的神经元和 Softmax 输出。 因为在馈入密集神经网络之前我们在池中有更多的卷积,所以在此模型中实际上我们具有较少的参数(准确地说是 10,765 个),几乎与逻辑回归模型一样少。 但是,该模型以 6,000 个周期的速度达到了 80% 的验证准确率,证明了您的新深度学习和 TensorFlow 技能。
尽管我们使用了较小的
`3x3`
窗口,但我们在第一个卷积层上计算了 16 个滤镜。 在进行最大
`2x2`
的池化之后,我们再次使用另一个
`3x3`
窗口和 4 个过滤器对池化值进行了处理。 另一个合并层再次馈入 32 个紧密连接的神经元和 Softmax 输出。 因为在馈入密集神经网络之前我们在池中有更多的卷积,所以在此模型中实际上我们具有较少的参数(准确地说是 10,765 个),几乎与逻辑回归模型一样少。 但是,该模型以 6,000 个周期的速度达到了 80% 的验证准确率,证明了您的新深度学习和 TensorFlow 技能。
```
py
# Conv layer 1
...
...
@@ -298,7 +298,7 @@ TensorFlow 不断更新。 尽管它不是 Google 的正式产品,但它还是
![
Some more TensorFlow projects
](
img/00075.jpg
)
深度神经网络确实是 TensorFlow 能够很好处理的一小部分数据建模。 但是,正如您在第 1 章入门中的“简单计算”部分所看到的那样,在简单计算中,可以为图规定的任何操作都可以在 TensorFlow 中进行。 一个实际的例子是在 TensorFlow 中实现
k
均值聚类。
深度神经网络确实是 TensorFlow 能够很好处理的一小部分数据建模。 但是,正如您在第 1 章入门中的“简单计算”部分所看到的那样,在简单计算中,可以为图规定的任何操作都可以在 TensorFlow 中进行。 一个实际的例子是在 TensorFlow 中实现
K
均值聚类。
更一般而言,可以很好地向量化并且需要某种训练的操作可能会受益于 TensorFlow 的使用。 这一切都说明您是 TensorFlow 的未来!
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录