栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

手把手教你搭建一个GAN

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

手把手教你搭建一个GAN

一.GAN网络机理

        首先先从一幅图入手,如图1所示:

图1. GAN作用机理

        假设在训练开始时,真实样本分布生成样本分布以及判别模型分别是图中的黑线、绿线和蓝线,其中噪声就是图中的z,目的就是为了生成绿线。

        第二小图所示,固定生成样本,先让判断器判断准,以蓝线和黑线交点为起点,以右判断为真实,以左判断为假,感觉自己很聪明能够判断真假。

        然后来到第三小图,生成器去和真实样本数据做一个拟合,从而误导判决器,但判决器还是能辨认出来,生成器骗不了它。

        第四小图为,当生成器的数据概率分别和真实数据概率分布重合时,判决器从此就变得傻了,不能对其辨别真伪,判决器失败生成器成功,以假乱真。



二.分析问题

        图2为GAN流程图:

图2 GAN大体流程

          我们有了上述思路和流程图,就可以来确定问题去实现它了~(明确几个问题去解决):

        1.  目标函数该如何设定? 

        2.  如何生成图片? 

        3.  G(判决器)和D(生成器)应该如何设置? 

        4.  如何进行训练?



1.GAN目标函数确定

           判别模型的目标函数如下:

判别模型目标函数

        1. 整个式子由两项构成。x表示真实图片,z表示输入G网络的噪声,而G(z)表示G网络生成的图片。

        2. D(x)表示D网络判断真实图片是否真实的概率(因为x就是真实的。所以对于D来说,这个值越接近1越好)。而D(G(z))是D网络判断G生成的图片的是否真实的概率。

        3. G的目的:G应该希望自己生成的图片越接近真实越好。

        4. D的目的:D的能力越强,D(x)应该越大,D(G(x))应该越小。这时V(D,G)会变大。因此式子对于D来说是求最大(max_D)

         5. trick:为了前期加快训练,生成器的训练可以把log(1-D(G(z)))换成-log(D(G(z)))

2.GAN图片生成   训练方法

    以下为论文原文:

刚开始看是不是感觉不知如何下手,那么接下来换一种方式来看待它。

下图为形象化的GAN训练方案

形象化的训练方案

input1为真实数据;input2为生成数据

对于判决器而言,其标签认定,对于input1的输出正常应该为“1”,input2的输出正常应该为“0”

第一步,首先把左图的“T”(生成器)固定住,生成一批样本,然后和真实数据一块送至判决器判决,这步为训练的判决器,希望判决器能把它俩区分开,分别打上“1”和“0”标签

第二步,先把右图的“T”(判决器)固定住了,然后调节生成器,让生成的数据也为“1”,去把判决器混淆。这步为训练生成器。

注:我们所有的图片都是靠噪音来生成的


本文中展示的脚本都添加了注释,若难以理解,可参见keras文档

具体代码,参见github源码


3.GAN图片生成  生成器G


设置生成器G

以下是生成器G的脚本:


4.GAN图片生成  判别器D

参见github源码:https://github.com/jacobgi

设置判别器D

以下是判别器D的脚本:


5.GAN图片生成  辅助函数

把判别器D固定,使其能够调整生成器G。


6.GAN图片生成  训练

然后就可以开始进行训练了~~~


7.GAN图片生成  生成

这就形成了噪音经过一个G网络,生成了一个图像,这幅图像就成功骗过了判决器D。


三.总结

   以上就是浅谈了GAN网络的原理,并且搭建了一个原始的GAN网络。希望和大家共同努力进步。

   感兴趣的小伙伴~可以实现CGAN制定类的输出,DCGAN稳定训练网络,infoGAN实现等~~~



作者:hahazhen
链接:https://www.jianshu.com/p/51f969b7922f


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/221715.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号