epsilon = tf.placeholder(tf.float32, shape=(batch_size, 1, 1, 1)) x_hat = epsilon * _x + (1.0- epsilon) * _g_z # gradient penalty gradients = tf.gradients(discriminator_model(x_hat), [x_hat]) _gradient_penalty =10.0* tf.square(tf.norm(gradients[0], ord=2) -1.0) # calculate discriminator's loss _disc_loss = em_loss(tf.ones(batch_size), discriminator_model(_g_z)) - \ em_loss(tf.ones(batch_size), discriminator_model(_x)) + \ _gradient_penalty 在TensorFlow中执行Wasserstein距离与梯度惩罚 终于,我们可以说,这是我们第一次训练各种GAN架构,而几乎没有超参数调整,包括101层ResNets和离散数据的语言模型! 使用Wasserstein距离的好处之一就是,随着评论者的改进,生成器将会从中得到改善后的梯度。当使用Jensen-Shannon分流时,随着鉴别器的改进,梯度将会消失,而生成器无法从中学习(这是训练不稳定的主要来源)。 如果对这个问题感兴趣,想对这些概念有一个坚实的理论认识,我建议大家阅读这两篇论文: Wasserstein GAN(https://arxiv.org/pdf/1701.07875.pdf) Improved training of Wasserstein GANs(https://arxiv.org/pdf/1704.00028.pdf) 实现 详见github中开源代码:https://github.com/wayaai/GAN-Sandbox/tree/wGAN 结论 对抗学习使我们能够从我们对问题领域的了解存在的任何限制或局限中,释放我们的模型——对于要学习的内容没有任何预想,而且模型可以自由地探索数据。 (责任编辑:本港台直播) |