《DCGANs (Deep Convolutional Generative Adversarial Networks)》
生成对抗网络最有趣的部分之一是生成器网络的设计。生成器网络能够获取随机噪声并将其映射为图像,从而使鉴别器无法分辨出哪些图像来自数据集以及哪些图像来自生成器。
这是神经网络非常有趣的应用。通常,神经网络将输入映射为二进制输出(1或0),可能是回归输出(一些实数值),甚至是多个分类输出(例如MNIST或CIFAR-10 / 100)。
在本文中,我们将看到神经网络如何从随机噪声映射到图像矩阵,以及在生成器网络中使用卷积层如何产生更好的结果。
我们将在ICLR,一种生成卧室图片的生成器网络体系结构上,来回顾介绍DCGAN的论文,并且还将回顾GANs-in-Action repo中的一些Python / Keras代码。
这是LSUN场景建模论文中介绍的DCGAN生成器。该网络接收一个表示为z的100x1噪声矢量,并将其映射到64x64x3的输出 G(Z)中。
第一层扩展随机噪声的方式特别有趣。网络从100x1变为1024x4x4。该层称为“投影 project 和reshape”。
我们看到,在此层之后,应用了经典的卷积层,这些卷积层使用(N + P_F)/ S + 1等式,经典地讲授了卷积层来reshape网络。在上图中,我们可以看到N参数(高度/宽度)从4到8,到16,到32,似乎没有任何填充 padding,kernel filter参数F为5x5,stride是2。您可能会发现此方程对于设计您自己的卷积层以定制输出大小很有用。
我们看到网络来自
100x1 1024x4x4 512x8x8 256x16x16 128x32x32 64x64x3
上面是本文介绍的网络的输出,理由是这是经过5个epochs的训练之后得出的。
现在,让我们看一些python代码:
这段代码出自于Jakub Langr和Vladimir Bok创建的gans-in-action repo,据我所知,这是在Keras中实现GAN的最佳入门代码。
下面的代码是我如何运行我的第一个GAN网络(并没有实现DCGAN):
下面的架构并不太复杂,实际上在MNIST数据集上确实产生了不错的结果。该模型接收噪声矢量,并将其映射到一个紧密连接的层,该层映射到一个输出层,该输出层是一个扁平的784x1矢量,该矢量被reshape为28x28 MNIST数字矩阵。
现在,让我们将其与gans-in-action repo中提供的DCGAN代码进行对比:
我们看到上面的架构与ICLR,LSUN场景生成器论文中介绍的DCGAN非常相似。将输入从100x1噪声投影到7x7x256张量,然后对其进行卷积,直到达到28x28x1 MNIST数字输出为止。
再次,我们看到了相同的项目并进行了reshape,然后在入门代码中将卷积层卷入了图的输出中。
结论
我希望本文能帮助您开始构建自己的DCGAN。我认为它至少可以很好地说明高级体系结构应如何工作。剩下的挑战在于为卷积层以及投影和reshape层找到正确的参数。
领取专属 10元无门槛券
私享最新 技术干货