本期课程到这里,博主就默认大家已经对BP、CNN、RNN等基本的神经网络属性以及训练过程都有相应的认知了,如果还未了解最基本的知识,可以翻看博主制作的深度学习的学习路线,按顺序阅读即可。
Hello,又是一个分享的日子,博主将在本期推文给大家介绍生成对抗网络(Generative Adversarial Network)。生成对抗网络书写了一个以假乱真的剧本。近年来AI换脸等技术火爆全球,离不开这个网络的点滴贡献。生成对抗网络能够学习数据的分布规律,并创造出类似我们真实世界的物件如图像、文本等。从以假乱真的程度上看,它甚至可以被誉为深度学习中的艺术家。好了,闲言少叙,我们这就走进生成对抗网络(GAN)的世界。
GAN开山之作
提取码:kd4j
https://pan.baidu.com/s/1tUDyx8flQd20svuyDvh88w
本文内容概要:
对抗生成网络(GAN)原理
对抗生成网络(GAN)网络结构
对抗生成网络(GAN)训练过程
对抗生成网络(GAN)实例
生成对抗网络的思想
原理
相信大家都会画画,不管画得好坏与否吧,但总归会对着图案勾上两笔,当我们临摹的次数越多,我们画的也就越像。最后,临摹到了极致,我们的画就和临摹的那副画一模一样了,以至于专家也无法分清到底哪幅画是赝品。好了,这个例子,我们将主人公换成生成对抗网络,画画这个操作换成训练,其实也是这么一回事。总体来说,就是这个网络学习数据分布的规律,然后弄出一个和原先数据分布规律的数据。这个数据可以是语音、文字和图像等等。
Gan的网络结构
Gan网络结构图
如上图,Gan网络结构拥有两个部分,一个是生成器(generator),另一个是辨别器(discriminator)。现在我们拿手写数字图片来举个例子。我们希望gan能临摹出和手写数字图片一样的图,达到以假乱真的程度。那么它整体的流程如下:
首先定义一个生成器(generator),输入一组随机噪声向量(最好符合常见的分布,一般的数据分布都呈现常见分布规律),输出为一个图片。
定义一个辨别器(discriminator),用它来判断图片是否为训练集中的图片,是为真,否为假。
当辨别器无法分辨真假,即判别概率为0.5时,停止训练。
其中,生成器和辨别器就是我们要组的神经网络,可以是CNN、RNN或者BP网络等,只要能完成任务即可。
具体的训练过程
初始化生成器G和辨别器D两个网络的参数
从训练集抽取n个样本,以及生成器利用定义的噪声分布生成n个样本。固定生成器G,训练辨别器D,使其尽可能区分真假。
循环更新k次辨别器D之后,更新1次生成器G,使辨别器尽可能区分不了真假。
多次更新迭代后,理想状态下,最终辨别器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