李宏毅 HW6 作业及WGAN解析

HW06

代码

任务描述: 用GAN来生成卡通人物头像。

sample code 使用DCGAN,网络框架如下,训练也像正常训练GAN一样
在这里插入图片描述

WGAN

这个是本次任务的核心内容,GAN其实是不太好训练的,WGAN可以让这个过程变的容易一下。我大致阐述一下我关于WGAN的理解,具体的更详细的解释建议看李宏毅老师的课程。这部分讲的真的很好。
GAN的目的就是训练一个生成器,能够生成图片以假乱真,GAN用JS divergence 来衡量生成图片和真实图片之间的距离,生成器的目标就是要最小化这个距离,但是使用JS divergence会遇到一个问题,如下图:
在这里插入图片描述
当生成数据 P G P_G PG和真实数据 P d a t a Pdata Pdata完全没有重合的时候,它们的KL divergence始终为最大值log2,但是我们可以观察到图一和图二生成数据和真实数据的相似度显然不一样,这也就说明了KL divergence不能用来衡量生成数据与真实数据的相似程度了。同时,在这种情况下,Discriminate会很容易区分真实数据和生成数据(因为它们没有重叠,非常容易找到一条线将它们分开),并且在之后的迭代过程中就不会更新了(因为loss始终为-log2),那么Discrimate的正确率始终为1,你也不知道GAN训练的好坏。(一个好的GAN的Discriminate的正确率应该为0.5左右)。
既然一切的问题都是由JS divergence引起的,那么换个度量不就行了吗?
WGAN的想法正是如此。WGAN 使用Wasserstein distence作为生成数据和真实数据之间的距离度量。
这个度量在其没有重叠时也会根据它们的分布给出距离。然后是代码实现,因为若完全实现Wasserstein distence的话,计算量太大,因此一般实现WGAN是在原有的基础上应用四个技巧就可以模拟实现WGAN。如下:
在这里插入图片描述
体现在hw6的代码里面表现如下:
1. 去掉判别器最后一层的sigmoid层
在这里插入图片描述
2. 计算损失函数的时候不要加上log。
在这里插入图片描述
3. 将判别器的参数限制为两个常数之间的范围内。clip_value=0.01
. 在这里插入图片描述
4. 使用RMSProp 或者 SGD作为optimizer。
在这里插入图片描述

实验结果

不知道为什么JudgeBoi上我的得分刷新一下就会变,很不可靠,所以给大家看一下生成效果吧。
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值