小言_互联网的博客

以假乱真的对抗生成网络(GAN)

186人阅读  评论(0)

本期课程到这里,博主就默认大家已经对BP、CNN、RNN等基本的神经网络属性以及训练过程都有相应的认知了,如果还未了解最基本的知识,可以翻看博主制作的深度学习的学习路线,按顺序阅读即可。


深度学习的学习路线:

    

        Hello,又是一个分享的日子,博主将在本期推文给大家介绍生成对抗网络(Generative Adversarial Network)。生成对抗网络书写了一个以假乱真的剧本。近年来AI换脸等技术火爆全球,离不开这个网络的点滴贡献。生成对抗网络能够学习数据的分布规律,并创造出类似我们真实世界的物件如图像、文本等。从以假乱真的程度上看,它甚至可以被誉为深度学习中的艺术家。好了,闲言少叙,我们这就走进生成对抗网络(GAN)的世界。

GAN开山之作 

提取码:kd4j

https://pan.baidu.com/s/1tUDyx8flQd20svuyDvh88w

文内容概要:

  1. 对抗生成网络(GAN)原理

  2. 对抗生成网络(GAN)网络结构

  3. 对抗生成网络(GAN)训练过程

  4. 对抗生成网络(GAN)实例

生成对抗网络的思想

 原理                                                                                     

        相信大家都会画画,不管画得好坏与否吧,但总归会对着图案勾上两笔,当我们临摹的次数越多,我们画的也就越像。最后,临摹到了极致,我们的画就和临摹的那副画一模一样了,以至于专家也无法分清到底哪幅画是赝品。好了,这个例子,我们将主人公换成生成对抗网络,画画这个操作换成训练,其实也是这么一回事。总体来说,就是这个网络学习数据分布的规律,然后弄出一个和原先数据分布规律的数据。这个数据可以是语音、文字和图像等等。

 Gan的网络结构                                                                                     

      

Gan网络结构图

    如上图,Gan网络结构拥有两个部分,一个是生成器(generator),另一个是辨别器(discriminator)。现在我们拿手写数字图片来举个例子。我们希望gan能临摹出和手写数字图片一样的图,达到以假乱真的程度。那么它整体的流程如下:

  1. 首先定义一个生成器(generator),输入一组随机噪声向量(最好符合常见的分布,一般的数据分布都呈现常见分布规律),输出为一个图片。

  2. 定义一个辨别器(discriminator),用它来判断图片是否为训练集中的图片,是为真,否为假。

  3. 当辨别器无法分辨真假,即判别概率为0.5时,停止训练。

其中,生成器和辨别器就是我们要组的神经网络,可以是CNN、RNN或者BP网络等,只要能完成任务即可。

 具体的训练过程                                                                                    

  1. 初始化生成器G辨别器D两个网络的参数

  2. 从训练集抽取n个样本,以及生成器利用定义的噪声分布生成n个样本。固定生成器G,训练辨别器D,使其尽可能区分真假。

  3. 循环更新k次辨别器D之后,更新1次生成器G,使辨别器尽可能区分不了真假。

  4. 多次更新迭代后,理想状态下,最终辨别器D无法区分图片到底是来自真实的训练样本集合,还是来自生成器G生成的样本即可,此时辨别的概率为0.5,完成训练。

论文伪代码

实验

实验环境                                                                                          

  • Anaconda Python 3.7 

  • Jupyter Notebook

  • Keras

    开发环境安装在之前的推文中已经介绍,还没安装的小伙伴可以翻一下。

 

代码                                                                                                 

Git链接

代码

https://github.com/ChileWang0228/DeepLearningTutorial/blob/master/GAN/GAN.ipynb

训练结果                                                                                             

辨别器与生成器的loss趋势图

生成器产生的手写数字体

小伙伴们可以试着调下面这几个参数,让结果更加的好看~

    1.batch size  

    2.adam优化器的learning rate  

    3.迭代次数nb_epoch  

    4.生成器generat和辨别器discriminator的网络结构 

视频版                                                                                        

视频版包含了代码讲解部分,不过博主的代码都做了相应的注释,相信大家都能看懂,喜欢视频版的小伙伴可以去观看~~~

bilibili值得拥有~(っ•̀ω•́)っ✎⁾⁾ 我爱学习

https://space.bilibili.com/299585150


总结

        好了,到这里,我们就已经将对抗生成网络(GAN)的知识点讲完了。大家在掌握了整个流程之后,就可以在博主的代码上修修补补,训练自己的GAN模型了。

       最后,博主在本期推文介绍的GAN只是2014年的开山之作,后面有很多人基于GAN提出了许多有趣的实验,这里就不一一赘述了。而且GAN的应用范围非常广阔,比如市面上很火的“换脸”软件,大多都是基于GAN的原理去做的。甚至我们也可以利用GAN去做数据增强,比如在我们缺少训练集的时候,可以考虑用GAN去生成一些数据,扩充我们的训练样本

        如果本期推文有用,那就点个赞吧,你们的点赞是博主持续更新的动力,感谢每一位小伙伴的关注~

    


转载:https://blog.csdn.net/Chile_Wang/article/details/100815465
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场