目前来说,GAN主要是做样本生成吧,我前几天复现了WGAN-GP以及DCGAN的模型,数据集是在mnist进行测试效果图一般吧(只是模型复现了一下,与实验结果还是有差距。另外图示并没有迭代足够轮数。
另外这篇论文是arxiv上的一篇文章WGAN-GP,这篇文章的不同主要表现在discriminator的loss function上
其中
是从generator上服从正态分布的数据中sample出来的数据,然后生成的图片
部分代码实现如下(tensorflow)(知乎代码排版好乱!
- def gan_loss(logits_real, logits_fake, batch_size, x, G_sample): D_loss = - tf.reduce_mean(logits_real) + tf.reduce_mean(logits_fake) G_loss = - tf.reduce_mean(logits_fake) lam = 10 eps = tf.random_uniform([batch_size,1], minval=0, maxval=1) x_hat = eps*x+(1-eps)*G_sample with tf.variable_scope('',reuse=True) as scope: grad_D_x_hat = tf.gradients(discriminator(x_hat), [x_hat])[0] grad_norm = tf.sqrt(tf.reduce_sum(tf.square(grad_D_x_hat),axis = 1)) grad_pen = tf.reduce_mean(tf.square(grad_norm-1)) D_loss += lam*grad_pen return D_loss, G_loss
复制代码 对比之前的GAN,在此基础上增加正则项的效果,可以使训练效果更加稳定,减少了训练过程中梯度消失或者梯度爆炸的训练问题,通过这几天的复现模型,我觉得GAN就是从原来的样本分布中拟合出新的样本,拟合出的新的样本服从训练样本。至于你说的图像风格转移,这个主要用到特征可视化和tranfer learning以及特征迁移的东西,GAN涉及的应该不是很多吧。至于学习GAN,多去arxiv上看看相关的论文就好了。(欢迎前辈指正O(∩_∩)O!!!
|