Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
apachecn-dl-zh
提交
4c6db4e7
A
apachecn-dl-zh
项目概览
OpenDocCN
/
apachecn-dl-zh
大约 1 年 前同步成功
通知
298
Star
83
Fork
35
代码
文件
提交
分支
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,发现更多精彩内容 >>
提交
4c6db4e7
编写于
9月 14, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-09-14 11:13:12
上级
80b4df4a
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
16 addition
and
12 deletion
+16
-12
docs/handson-cnn-tf/1.md
docs/handson-cnn-tf/1.md
+3
-3
docs/handson-cnn-tf/2.md
docs/handson-cnn-tf/2.md
+7
-5
docs/handson-cnn-tf/3.md
docs/handson-cnn-tf/3.md
+3
-3
docs/handson-cnn-tf/6.md
docs/handson-cnn-tf/6.md
+3
-1
未找到文件。
docs/handson-cnn-tf/1.md
浏览文件 @
4c6db4e7
...
...
@@ -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**
)时使用的损耗函数。 铰链损失严重惩罚了错误的预测。 对于一个给定的示例
`(x[i], y[i])`
,其中
`x[i]`
是数据点的特征向量,
`y[i]`
是其标记,其铰链损耗如下:
![](
img/18f2de01-7b99-4a9d-a016-fd44db07e0b5.png
)
...
...
@@ -348,13 +348,13 @@ loss = tf.reduce_mean(tf.losses.hinge_loss(logits=model_out, labels=y))
现在我们定义了要使用的损失函数; 我们可以使用这个损失函数来训练我们的模型。 如前面的方程式所示,损耗函数是权重和偏差的函数。 因此,我们要做的就是详尽地搜索权重和偏差的空间,并查看哪种组合最大程度地减少了损失。 当我们具有一维或二维权向量时,此过程可能还可以,但是当权向量空间太大时,我们需要一个更有效的解决方案。 为此,我们将使用一种名为
**梯度下降**
的优化技术。
通过使用损失函数和演算,梯度下降法可以看到如何调整模型权重和偏差的值,以使损失值减小。 这是一个迭代过程,需要多次迭代才能针对我们的训练数据对权重和偏差的值进行适当调整。 这个想法是,通过相对于目标函数
!
[](
img/9530e4e9-229a-4d8a-9314-de81cd1259bc.png
)
w
的梯度的相反方向更新参数,可以最小化由权重
`w`
参数化的损失函数
`L`
。 权重和偏差的更新功能如下所示:
通过使用损失函数和演算,梯度下降法可以看到如何调整模型权重和偏差的值,以使损失值减小。 这是一个迭代过程,需要多次迭代才能针对我们的训练数据对权重和偏差的值进行适当调整。 这个想法是,通过相对于目标函数
`ᐁ[w]L(w)`
的梯度的相反方向更新参数,可以最小化由权重
`w`
参数化的损失函数
`L`
。 权重和偏差的更新功能如下所示:
![](
img/56711c81-eedc-45e4-82ae-b0bcacc0d52c.png
)
![](
img/e4fc664a-e5c2-4fc9-b18e-678055a6782a.png
)
在这里,
!
[](
img/580f5aaf-7c8b-432c-977a-4b6f774462b4.png
)
是迭代次数,!
[](
img/4f52cf0a-7b12-4259-b6bd-5c208e68a6ad.png
)
是称为学习率的超参数。
在这里,
`t`
是迭代次数,
`α`
是称为学习率的超参数。
由两个变量
`w1`
和
`w2`
参数化的损失函数将如下图所示:
...
...
docs/handson-cnn-tf/2.md
浏览文件 @
4c6db4e7
...
...
@@ -440,7 +440,9 @@ TensorFlow 卷积操作为您提供了两种用于填充需求的选项:相同
通常,我们可以使用以下公式计算卷积运算的输出大小:
![](
img/0ef1adda-27e2-4f34-8ecf-c6290ffff544.png
)
,!
[](
img/67287ebe-dbe6-4c4c-aaf7-5f0e3eee0428.png
)
![](
img/0ef1adda-27e2-4f34-8ecf-c6290ffff544.png
)
![](
img/67287ebe-dbe6-4c4c-aaf7-5f0e3eee0428.png
)
(这里,pad 是添加到每个边框的零的数量。)
...
...
@@ -578,10 +580,10 @@ tf.layers.max_pooling2d(inputs=some_input_layer, pool_size=[2, 2], strides=2)
在这里,组件如下:
*
!
[](
img/a7f7c3ff-5d04-4af7-9f6c-33f23f3424e5.png
)
:k 层的感受域
*
!
[](
img/7766947c-888c-43ea-b00e-9c23280dee08.png
)
:第 k 层的内核大小
*
!
[](
img/383c173c-2090-4aa3-bb63-86181ec0e729.png
)
:从第 i 层(1..k-1)跨步
*
!
[](
img/89e2bd31-53be-4660-a85b-0938aa3276bf.png
)
:所有步长的乘积直到第 k-1 层(所有先前的层,而不是当前的一层)
*
`R[k]`
:k 层的感受域
*
`Kernel[k]`
:第 k 层的内核大小
*
`S[i]`
:从第 i 层(1..k-1)跨步
*
`∏s[i], i=1..(k-1)`
:所有步长的乘积直到第 k-1 层(所有先前的层,而不是当前的一层)
仅对于第一层,接收域就是内核大小。
...
...
docs/handson-cnn-tf/3.md
浏览文件 @
4c6db4e7
...
...
@@ -59,17 +59,17 @@
`i`
是我们标签和预测的每个可能元素的索引。
但是,当我们处理只有两个可能结果 y = 1 和 y = 0 的二元情况时,可以简化
p !
[](
img/3650d030-8116-4a21-a375-705a9246f7b0.png
)
{!
[](
img/0afb24f4-1a7e-4684-8840-d68759f8c533.png
)
}和 q !
[](
img/e65b665e-d509-4b75-a50c-b59e17395df2.png
)
{!
[](
img/d7ae08fd-fd8d-4d8b-8683-4a14dcb66466.png
)
}
我们得到:
但是,当我们处理只有两个可能结果 y = 1 和 y = 0 的二元情况时,可以简化
`p ∈ {y, 1-y}`
和
`q ∈ {y_hat, 1-y_hat}`
我们得到:
![](
img/5ec5f2c3-86c8-406a-938a-ec371e7919d5.png
)
这是等效的
迭代
!
[](
img/b2408251-310a-4215-8cad-5e4da25c52d0.png
)
训练示例,将要最小化的成本函数
`L`
变为:
迭代
`m`
训练示例,将要最小化的成本函数
`L`
变为:
![](
img/07a806c2-2a49-41a4-ba69-c3adee95a705.png
)
这在直觉上是正确的,因为当
!
[](
img/c4e8a23d-48cb-41ef-83b8-b99014f01caf.png
)
时,我们要最小化需要大!
[](
img/c99b624f-2c53-4830-b652-097ff277404e.png
)
的!
[](
img/b3c76e2e-6082-4ee3-9f9e-e4c9729fc551.png
)
;当!
[](
img/820eae1c-4566-4245-83a6-ed72af7690fd.png
)
时,我们要最小化!
[](
img/723646a7-5c3e-4876-a5d5-118bd4e1fc44.png
)
的我们要最小化!
[](
img/a2de4135-a00f-402a-952f-0a52075e3943.png
)
。
这在直觉上是正确的,因为当
`y=1`
时,我们要最小化
`L(y, y_hat) = - log(y_hat)`
,需要最大化
`y_hat`
;当
`y=0`
时,我们要最小化
`L(y, y_hat) = - log(1 - y_hat)`
,需要最小化
`y_hat`
。
在 TensorFlow 中,可以在
`tf.losses`
模块中找到二进制交叉熵损失。 知道我们模型的原始输出!
[](
img/811ffc49-acd0-4f5c-a4e4-eab74c6e581c.png
)
的名称是 logits 很有用。 在将其传递给交叉熵损失之前,我们需要对其应用
**Sigmoid**
函数,以便我们的输出在 0 到 1 之间缩放。TensorFlow 实际上将所有这些步骤组合为一个操作,如 下面的代码。 TensorFlow 还将为我们平均分批处理损失。
...
...
docs/handson-cnn-tf/6.md
浏览文件 @
4c6db4e7
...
...
@@ -414,7 +414,9 @@ def generator(z):
# 鉴别器损失
鉴别者希望能够区分真实图像和生成图像。 它想为真实图像输出 1,为生成图像输出 0。 鉴别器损失函数具有以下公式,由于 GAN 训练和标记的工作方式而再次简化:!
[](
img/6afbb7c8-d706-49dc-b74b-f8d9f894e8d3.png
)
鉴别者希望能够区分真实图像和生成图像。 它想为真实图像输出 1,为生成图像输出 0。 鉴别器损失函数具有以下公式,由于 GAN 训练和标记的工作方式而再次简化:
![](
img/6afbb7c8-d706-49dc-b74b-f8d9f894e8d3.png
)
此损失函数有两个术语:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录