Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
D_ACMER
apachecn-dl-zh
提交
e8942677
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,发现更多精彩内容 >>
提交
e8942677
编写于
1月 08, 2021
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2021-01-08 18:06:59
上级
2c61f3ee
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
12 addition
and
12 deletion
+12
-12
new/adv-dl-tf2-keras/07.md
new/adv-dl-tf2-keras/07.md
+12
-12
未找到文件。
new/adv-dl-tf2-keras/07.md
浏览文件 @
e8942677
...
...
@@ -66,9 +66,9 @@ pix2pix 算法与**条件 GAN**(**CGAN**)[4]相似,我们在“第 4 章
图 7.1.4:伪造
`y`
的 CycleGAN 生成器
`G`
“公式 7.1.1”只是假目标数据
!
[](
img/B14853_07_002.png
)
的生成器
`G`
。 它将数据从源域
`x`
转换为目标域
`y`
。
“公式 7.1.1”只是假目标数据
`y'`
的生成器
`G`
。 它将数据从源域
`x`
转换为目标域
`y`
。
要训练生成器,我们必须构建 GAN。 这是正向循环 GAN,如图“图 7.1.5”所示。 该图表明,它类似于“第 4 章”,“生成对抗网络(GANs)”中的典型 GAN,由生成器
`G`
和判别器
!
[](
img/B14853_07_003.png
)
组成,它可以以相同的对抗方式进行训练。通过仅利用源域中的可用实际图像
`x`
和目标域中的实际图像
`y`
,进行无监督学习。
要训练生成器,我们必须构建 GAN。 这是正向循环 GAN,如图“图 7.1.5”所示。 该图表明,它类似于“第 4 章”,“生成对抗网络(GANs)”中的典型 GAN,由生成器
`G`
和判别器
`D[y]`
组成,它可以以相同的对抗方式进行训练。通过仅利用源域中的可用实际图像
`x`
和目标域中的实际图像
`y`
,进行无监督学习。
![
A close up of a logo Description automatically generated
](
img/B14853_07_05.png
)
...
...
@@ -100,7 +100,7 @@ Backward Cycle GAN 生成器的目标是合成:
图 7.1.7:CycleGAN 向后循环 GAN
这可以通过对抗性训练反向循环 GAN 来完成。 目的是让生成器
`F`
学习如何欺骗判别器
!
[](
img/B14853_07_007.png
)
。
这可以通过对抗性训练反向循环 GAN 来完成。 目的是让生成器
`F`
学习如何欺骗判别器
`D[x]`
。
此外,还具有类似的向后循环一致性,以恢复原始源
`y`
:
...
...
@@ -110,7 +110,7 @@ Backward Cycle GAN 生成器的目标是合成:
![](
img/B14853_07_009.png
)
(
Equation
7.1.5)
总而言之,CycleGAN 的最终目标是使生成器
`G`
学习如何合成伪造的目标数据
!
[](
img/B14853_07_002.png
)
,该伪造的目标数据!
[](
img/B14853_07_002.png
)
会在正向循环中欺骗识别器!
[](
img/B14853_07_011.png
)
。 由于网络是对称的,因此 CycleGAN 还希望生成器
`F`
学习如何合成伪造的源数据!
[](
img/B14853_07_012.png
)
,该伪造的源数据可以使判别器!
[](
img/B14853_07_007.png
)
在反向循环中蒙蔽。 考虑到这一点,我们现在可以将所有损失函数放在一起。
总而言之,CycleGAN 的最终目标是使生成器
`G`
学习如何合成伪造的目标数据
`y'`
,该伪造的目标数据
`y'`
会在正向循环中欺骗识别器
`D[y]`
。 由于网络是对称的,因此 CycleGAN 还希望生成器
`F`
学习如何合成伪造的源数据
`x'`
,该伪造的源数据可以使判别器
`D[x]`
在反向循环中蒙蔽。 考虑到这一点,我们现在可以将所有损失函数放在一起。
让我们从 GAN 部分开始。 受到
*最小二乘 GAN(LSGAN)*
[5]更好的感知质量的启发,如“第 5 章”,“改进的 GAN” 中所述,CycleGAN 还使用 MSE 作为判别器和发电机损耗。 回想一下,LSGAN 与原始 GAN 之间的差异需要使用 MSE 损失,而不是二进制交叉熵损失。
...
...
@@ -138,7 +138,7 @@ CycleGAN 的总损失为:
![](
img/B14853_07_022.png
)
(
Equation
7.1.13)
CycleGAN 建议使用以下权重值
!
[](
img/B14853_07_023.png
)
和!
[](
img/B14853_07_024.png
)
,以更加重视循环一致性检查。
CycleGAN 建议使用以下权重值
`λ1 = 1.0`
和
`λ2 = 10.0`
,以更加重视循环一致性检查。
训练策略类似于原始 GAN。 “算法 7.1.1”总结了 CycleGAN 训练过程。
...
...
@@ -146,10 +146,10 @@ CycleGAN 建议使用以下权重值![](img/B14853_07_023.png)和![](img/B14853_
对
`n`
训练步骤重复上述步骤:
1.
通过使用真实的源数据和目标数据训练前向循环判别器,将
!
[](
img/B14853_07_025.png
)
降至最低。 实际目标数据的小批量
`y`
标记为 1.0。 伪造的目标数据!
[](
img/B14853_07_026.png
)
的小批量标记为 0.0。
2.
通过使用真实的源数据和目标数据训练反向循环判别器,将
!
[](
img/B14853_07_027.png
)
最小化。 实际源数据的小批量
`x`
标记为 1.0。 一小部分伪造的源数据!
[](
img/B14853_07_028.png
)
被标记为 0.0。
1.
通过使用真实的源数据和目标数据训练前向循环判别器,将
`L_forward_GAN^(D)`
降至最低。 实际目标数据的小批量
`y`
标记为 1.0。 伪造的目标数据
`y' = G(x)`
的小批量标记为 0.0。
2.
通过使用真实的源数据和目标数据训练反向循环判别器,将
`L_backward_GAN^(D)`
最小化。 实际源数据的小批量
`x`
标记为 1.0。 一小部分伪造的源数据
`x' = F(y)`
被标记为 0.0。
1.
通过训练对抗网络中的前向周期和后向周期生成器,将
!
[](
img/B14853_07_029.png
)
和!
[](
img/B14853_07_030.png
)
最小化。 伪造目标数据的一个小批量!
[](
img/B14853_07_026.png
)
被标记为 1.0。 一小部分伪造的源数据!
[](
img/B14853_07_028.png
)
被标记为 1.0。 判别器的权重被冻结。
1.
通过训练对抗网络中的前向周期和后向周期生成器,将
`L_GAN^(D)`
和
`L_cyc`
最小化。 伪造目标数据的一个小批量
`y' = G(x)`
被标记为 1.0。 一小部分伪造的源数据
`x' = F(y)`
被标记为 1.0。 判别器的权重被冻结。
在神经样式转移问题中,颜色组合可能无法成功地从源图像转移到伪造目标图像。 此问题显示在“图 7.1.8”中:
...
...
@@ -165,7 +165,7 @@ CycleGAN 的总损耗变为:
![](
img/B14853_07_034.png
)
(
Equation
7.1.15)
其中
!
[](
img/B14853_07_035.png
)
。 在对抗训练中,身份损失也得到了优化。“图 7.1.9”重点介绍了实施身份正则器的 CycleGAN 辅助网络:
其中
`λ3 = 0.5`
。 在对抗训练中,身份损失也得到了优化。“图 7.1.9”重点介绍了实施身份正则器的 CycleGAN 辅助网络:
![
A screenshot of a cell phone Description automatically generated
](
img/B14853_07_09.png
)
...
...
@@ -449,9 +449,9 @@ def build_discriminator(input_shape,
return
discriminator
```
使用生成器和判别器生成器,我们现在可以构建 CycleGAN。“列表 7.1.4”显示了构建器功能。 与上一节中的讨论一致,实例化了两个生成器
`g_source = F`
和
`g_target = G`
以及两个判别器
`d_source = D[x]`
和
`d_target = D[y]`
。 正向循环为
!
[](
img/B14853_07_036.png
)
`reco_source = g_source(g_target(source_input))`
。反向循环为!
[](
img/B14853_07_037.png
)
`
reco_target = g_target(g_source (target_input))`
。
使用生成器和判别器生成器,我们现在可以构建 CycleGAN。“列表 7.1.4”显示了构建器功能。 与上一节中的讨论一致,实例化了两个生成器
`g_source = F`
和
`g_target = G`
以及两个判别器
`d_source = D[x]`
和
`d_target = D[y]`
。 正向循环为
`x' = F(G(x)) = reco_source = g_source(g_target(source_input))`
。反向循环为
`y' = G(F(y)) =
reco_target = g_target(g_source (target_input))`
。
对抗模型的输入是源数据和目标数据,而输出是
!
[](
img/B14853_07_007.png
)
和!
[](
img/B14853_07_039.png
)
的输出以及重构的输入!
[](
img/B14853_07_040.png
)
和!
[](
img/B14853_07_002.png
)
。 在本示例中,由于由于灰度图像和彩色图像中通道数之间的差异,因此未使用身份网络。 对于 GAN 和循环一致性损失,我们分别使用建议的!
[](
img/B14853_07_042.png
)
和!
[](
img/B14853_07_043.png
)
损失权重。 与前几章中的 GAN 相似,我们使用 RMSprop 作为判别器的优化器,其学习率为
`2e-4`
,衰减率为
`6e-8`
。 对抗的学习率和衰退率是判别器的一半。
对抗模型的输入是源数据和目标数据,而输出是
`D[x]`
和
`D[y]`
的输出以及重构的输入
`x'`
和
`y'`
。 在本示例中,由于由于灰度图像和彩色图像中通道数之间的差异,因此未使用身份网络。 对于 GAN 和循环一致性损失,我们分别使用建议的
`λ1 = 1.0`
和
`λ2 = 10.0`
损失权重。 与前几章中的 GAN 相似,我们使用 RMSprop 作为判别器的优化器,其学习率为
`2e-4`
,衰减率为
`6e-8`
。 对抗的学习率和衰退率是判别器的一半。
“列表 7.1.4”:
`cyclegan-7.1.1.py`
...
...
@@ -956,7 +956,7 @@ def mnist_cross_svhn(g_models=None):
图 7.1.19:带有 MNIST 上的 PatchGAN 的 CycleGAN 与 SVHN(目标)的反向循环。 重建的目标与原始目标并不完全相似。 原始彩色照片可以在该书的
[
GitHub 存储库
](
https://github.com/PacktPublishing/Advanced-Deep-Learning-with-Keras/blob/master/chapter7-cross-domain-gan/README.md
)
中找到。
在“图 7.1.3”中,CycleGAN 被描述为具有周期一致性。 换句话说,给定源
`x`
,CycleGAN 将正向循环中的源重构为
!
[](
img/B14853_07_012.png
)
。 另外,在给定目标
`y`
的情况下,CycleGAN 在反向循环中将目标重构为!
[](
img/B14853_07_045.png
)
。
在“图 7.1.3”中,CycleGAN 被描述为具有周期一致性。 换句话说,给定源
`x`
,CycleGAN 将正向循环中的源重构为
`x'`
。 另外,在给定目标
`y`
的情况下,CycleGAN 在反向循环中将目标重构为
`y'`
。
重建了许多目标图像。 有些数字显然是相同的,例如最后两列(3 和 4)中的第二行,而有些数字却是相同的但是模糊的,例如前两列列中的第一行(5 和 2)。 尽管样式仍像第二行一样,但在前两列(从 33 和 6 到 1 以及无法识别的数字)中,有些数字会转换为另一数字。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录