之前读了A Method for Improving CNN-Based Image Recognition Using DCGAN.这篇论文接下来对这篇文章做一个总结,可能理解有一部分可能是错的,请大家自行分析。
先贴出DCGAN的整体结构如下图,这个图片是在github上找的
可以看出生成器与判别器都是由CNN组成的,但是在论文中作者对CNN做了一些改进,如下几点
1.加入了归一化层如BN层(这里不做过多讲解,会在之后的文章介绍各种归一化层的作用)
2.激活函数的不同,如生成器的激活函数RELU、TANH等等,这里不做详细的介绍,在图 上可以看出来
3.去掉了各种池化层。
接下来其实和原始的GAN没有什么区别了,损失函数都是一样的如下图,分别是判别器损失和生成器损失。
此外这篇论文中提出了一个想法就是在训练中不断减小学习率可以提高训练的精度,这一点是十分重要的,之前并没有在意这一点,后来在训练网络的时候有的时候会训练不动,损失一直无法减小,经过请教知道了这种方法,如下图
在代码中实现的话只需在训练的最开始进行修改就可以,之前讲过了,这里就不在重复了,只贴出修改的方法
最后理一下文章的整体思路如下图
文章做了一个实验,训练雷达图来对天气进行分类,一共有4类分别是(有风有雨)(有雨无风)(无雨有风)(无雨无风)。但是有的天气它的气象图其实不是很多,所以文章想要自己生成一些气象图与真实图混合来进行训练来看看效果。
首先先看下面的这部分,首先通过DCGAN生成一些图片,其实DCGAN本身有鉴别器,但在实验中又加了一个Test sample测试模块,又测试了一遍来看看生成效果。
紧接着看最上面的部分是真实的图片先进行预训练这里其实做了两次实验,分别是原始的CNN和改进的CNN进行训练,最后实验结果得出证明改进的好于原始的,之后又与最后混合图片的准确度进行对比。
最后一步是两种图片一起进行训练放入到了VGG中得到了分类,最后得出结论混合图片的效果其实比单独真实的图片效果好一点。如下图分别是没有混合和混合图片的结果。