用各种GAN生成MNIST数字

北战南征 提交于 2019-12-05 10:45:52

用各种GAN生成MNIST数字

完整代码https://github.com/SongDark/GAN_collections

数据获取

MNIST数据集的获取可以参考这篇博客:
https://blog.csdn.net/songbinxu/article/details/82992264
需要注意的是MNIST数据的值域范围,有的源是原本的[0,255][0,255],有的归一化到了[0,1][0,1]


生成器和判别器

实现了CNN和MLP两种版本。CNN结构参考自这里,MLP结构参考自这里


有关 Spectral Norm

dense层、conv2d层和deconv2d层中都实现了Spectral Normalization,可以自由选择或取消。Spectral Normalization是用来限制判别器D的,不应该加到生成器G中。

有关 Gradient Clipping

所谓 Gradient Clipping(GC) 就是将参数限制在某个范围内,比如(0.01,0.01)(-0.01,0.01),它也是用来限制判别器D的,不应该加到生成器G中。WGAN的原始版本必须加GC,以保证判别器D满足Lipschiz连续条件。我的经验是,即使是其他GAN类型,有时候加上GC也有奇效,比如在LSGAN里,没有加GC时是无法生成MNIST的,加上之后就好了。


各种GAN的目标函数

目前涉及到的有GAN、WGAN、WGAN-GP、DRAGAN、LSGAN和CGAN。
以后有空再补其他的。

GAN

(1)LD=E[log(D(x))]+E[log(1D(G(z))]LG=E[log(D(G(z)))] \begin{matrix} L_D=E[log(D(x))] + E[log(1-D(G(z))] \\ \\ L_G=E[log(D(G(z)))] \\ \end{matrix} \tag{1}

WGAN

(2)LD=E[D(x)]E[D(G(z))]LG=E[D(G(z))]WDclip(WD,0.1,0.1) \begin{matrix} L_D=E[D(x)]-E[D(G(z))] \\ \\ L_G=E[D(G(z))] \\ \\ W_D\leftarrow clip(W_D,-0.1,0.1) \end{matrix} \tag{2}

WGAN-GP

(3)LD=LDWGAN+λE[(D(αx(1αG(z)))1)2]LG=LGWGAN \begin{matrix} L_D=L_D^{WGAN}+\lambda E[(|\bigtriangledown D(\alpha x-(1-\alpha G(z)))| - 1)^2] \\ \\ L_G=L_G^{WGAN}\\ \end{matrix} \tag{3}

LSGAN

(4)LD=E[(D(x)1)2]+E[D(G(z)2]LG=E[(D(G(z))1)2] \begin{matrix} L_D=E[(D(x)-1)^2] + E[D(G(z)^2] \\ \\ L_G=E[(D(G(z))-1)^2] \\ \end{matrix} \tag{4}

DRAGAN

(5)LD=LDGAN+λE[(D(αx(1αxp))1)2]LG=LGGAN \begin{matrix} L_D=L_D^{GAN}+\lambda E[(|\bigtriangledown D(\alpha x-(1-\alpha x_p))| - 1)^2] \\ \\ L_G=L_G^{GAN}\\ \end{matrix} \tag{5}

CGAN

(6)LD=E[log(D(x,c))]+E[log(1D(G(z),c)]LG=E[log(D(G(z),c))] \begin{matrix} L_D=E[log(D(x,c))] + E[log(1-D(G(z),c)] \\ \\ L_G=E[log(D(G(z),c))] \\ \end{matrix} \tag{6}


生成效果


完整代码

https://github.com/SongDark/GAN_collections

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!