DCGAN——菜鸟实现

收获

​ 在复现这个项目以前,我算是一个完全不入门的人。

​ 所以,第一遍我花里很大的精力取读懂代码,第二遍根据视频去理清思路,第三遍根据tensorflow框架的学习去代码中寻找他的身影。所以,整个项目下来,写的可能水平参差不齐,我不清楚要怎么表达,怎么表达出来,更多的是这个过程的记录,你会看到各个过程的身影。

​ 首先,我明白了顺序的重要性。先看论文,再看代码是一个不错的选择。这一次由于没有思路,所以先看代码,再看得论文,所以第一遍有无数疑惑在脑中,直到第二遍才理清楚。

​ 其次,抵消了对tensorflow代码的恐惧。人对未知的事物总是感到不安,对我而言,以前复现代码时总是担忧着,我只是能跑出来,但这代码是什么样的?这回终于安心里,他的代码结构是这个样子,当然,掌握的还不够熟练,以后肯定需要多次温习。

​ 再然后,简单学习了tensorflow框架,体会到了框架的美妙和强大,简洁的背后是巧妙地封装。

​ 最后,这次并没有将整个项目代码,一行一行解读完,只重点解读了main.py和model.py这两个最重要的文件,其余文件中涉及到的函数大部分也都有说明。

​ 最最后,很欣慰自己做了这件事儿,我觉得这才算我真正的Hello world!

代码思路

​ 感觉从代码里学了很多,虽然没有完全消化完。

​ 这份代码,并不算是源代码,怎么说,整个下来一遍,个人觉得,代码里有部分删减痕迹。当然这不是坏处,因为不删减我们可能跑不了,因为可能作者写代码时,基于的是自己的电脑配置,GPU情况等。

​ 整个代码最后给我的感觉是,很严谨,你会发现作者很多地方都在注意tensorflow的版本问题,即注意代码兼容性,对比以前跑过的代码,这可能是比较良心的一个了。

​ 这份代码的本质并不难,就是GAN的本质。首先看G——generator,作用就是输入一个维度定好的噪声向量Z,根据反卷积,当然,是原论文的反卷积框架(PS:我看到的所有的DCGAN的代码解释,都没有说这个框架为什么这样,只是说原论文怎样,这里我没有仔细拜读,就不再解释),反卷积,就是一个上采样,通俗的说一个[1,10]大小的向量怎么变成[256,256]的图片,就是通过上采样实现的,更通俗讲就是不断让它变大,而这里用反卷积实现,它的权重参数等等都是自动学习,也就是,你需要花点功夫考虑反卷积的维度大小的设计和组合,其他的都交给框架和电脑。当然,其中还有激活函数,batch_norm等等细节就不介绍了。对于这些细节我只知道怎么用,知道他们的优点,但为什么用这个不用其他的,我也爱莫能助。最后总结一下:GAN中generotor目的就是生成图片,这里我们只不过把这个过程用反卷积实现了。

​ 作者代码里另外有一个sampler(这里没有细细研究),结构甚至代码和generotor一模一样,不明白他这样设计有啥用,当然,他的作用没有体现在train里面,体现在显示里面了。换句话说,你根据已有的模型或者训练好的模型看生成图片效果,或者训练过程中看效果,它的作用就体现出来了。

​ D—discriminator算是最简单的了,正常的卷积操作,最后输出结果一个(0—1)评分值。这也是GAN的原理,对于discriminator而言,输入一张图片,网络给他打分,即输出一个数,整个过程跟CNN多像。当然这里DCGAN也确实用了卷积。

​ 优化,论文这里用了Adam,恕我直言,以前我只知道SGD这种东西,学习完,知道这东西还可以加冲量,作用就是穿越峡谷,避免震荡(具体自己学习吧),总的来说就是这里用起来比SGD好。当然,在这之前你要去求网络损失,代码里用交叉熵,它求了两个(GAN原理),利用D分别去给维度一样的真实图片和生成图片打分,分别和期望分值,前者为1后者为0,求交叉熵,然后构造Adma优化器优化。(这里,我尤记得学过的GAN优化是分别固定G和D的参数去优化另一个,这里用了tesnroflow框架,我着实没有看出这个效果,不过它确实有这个趋势,先优化d_loss再优化g_loss,不过细节没看出来)

​ ok,你以为完了?不,你前面所有的都是在搭积木,tensorflow的静态图设计理念就是这样,先搭好积木,再去运算。

​ 运算时就涉及到了数据下载,打乱,分batch,然后循环喂给run(),当然,一定循环次数下去保存模型和生成一定维度的样本图片看效果。

​ 大部分过程就这样,有的我可能也没注意到,当然最主要是时间有限,不允许我再花时间再这个上了,具体代码里还有很多关于可视化,参数共享,GPU限速,版本兼容,命令行参数,数据读取,图片处理(等等),这些零碎的东西有兴趣的可以自己看,放在这里太乱了。当然不嫌弃乱的话可以去看我写的md文件——贼乱。


  • 补充: 由于我都是线下写的,其他都有图片,放上来不能正常显示,只能放上这两个,而且为什么这排版会变成这样…
已标记关键词 清除标记
相关推荐
<p style="font-size:16px;"> 本课程适合具有一定深度学习基础,希望发展为深度学习之计算机视觉方向的算法工程师和研发人员的同学们。<br /> <br /> 基于深度学习的计算机视觉是目前人工智能最活跃的领域,应用非常广泛,如人脸识别和无人驾驶中的机器视觉等。该领域的发展日新月异,网络模型和算法层出不穷。如何快速入门并达到可以从事研发的高度对新手和中级水平的学生而言面临不少的挑战。精心准备的本课程希望帮助大家尽快掌握基于深度学习的计算机视觉的基本原理、核心算法和当前的领先技术,从而有望成为深度学习之计算机视觉方向的算法工程师和研发人员。<br /> <br /> 本课程系统全面地讲述基于深度学习的计算机视觉技术的原理并进行项目实践。课程涵盖计算机视觉的七大任务,包括图像分类、目标检测、图像分割(语义分割、实例分割、全景分割)、人脸识别、图像描述、图像检索、图像生成(利用生成对抗网络)。本课程注重原理和实践相结合,逐篇深入解读经典和前沿论文70余篇,图文并茂破译算法难点, 使用思维导图梳理技术要点。项目实践使用Keras框架(后端为Tensorflow),学员可快速上手。<br /> <br /> 通过本课程的学习,学员可把握基于深度学习的计算机视觉的技术发展脉络,掌握相关技术原理和算法,有助于开展该领域的研究与开发实战工作。另外,深度学习之计算机视觉方向的知识结构及学习建议请参见本人CSDN博客。<br /> <br /> 本课程提供课程资料的课件PPT(pdf格式)和项目实践代码,方便学员学习和复习。<br /> <br /> 本课程分为上下两部分,其中上部包含课程的前五章(课程介绍、深度学习基础、图像分类、目标检测、图像分割),下部包含课程的后四章(人脸识别、图像描述、图像检索、图像生成)。 </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdn.net/201902221256508000.gif" alt="" /><img src="https://img-bss.csdn.net/201902221257045928.gif" alt="" /><img src="https://img-bss.csdn.net/201902221257156312.gif" alt="" /><img src="https://img-bss.csdn.net/201902221257252319.gif" alt="" /> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页