用各种GAN生成MNIST数字

数据获取

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}


生成效果

用各种GAN生成MNIST数字
用各种GAN生成MNIST数字

完整代码

https://github.com/SongDark/GAN_collections

相关文章:

  • 2022-12-23
  • 2021-06-24
  • 2021-09-14
  • 2022-01-14
  • 2022-01-13
  • 2021-11-14
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-14
  • 2021-04-27
  • 2021-12-31
  • 2021-10-26
  • 2022-12-23
  • 2021-05-18
相关资源
相似解决方案