Generative Adversarial Nets
DCGANs in TensorFlow
carpedm20/DCGAN-tensorflow 我们定义网络结构:
1 |
|
当我们初始化这个类时,我们将使用这些函数来创建模型。 我们需要两个版本的鉴别器共享(或重用)参数。 一个用于来自数据分布的图像的minibatch,另一个用于来自发生器的图像的minibatch。
1 | self.G = self.generator(self.z) |
接下来我们定义损失函数。我们在D的预测值和我们理想的判别器输出值之间使用交叉熵,而没有只用求和,因为这样的效果更好。判别器希望对“真实”数据的预测全部是1,并且来自生成器的“假”数据的预测全部是零。生成器希望判别器对所有假样本的预测都是1。
1 | self.d_loss_real = tf.reduce_mean( |
收集每个模型的变量,以便可以单独进行训练。
1 | t_vars = tf.trainable_variables() |
现在我们准备好优化参数,我们将使用ADAM,这是一种在现代深度学习中常见的自适应非凸优化方法。ADAM通常与SGD竞争,并且(通常)不需要手动调节学习速率,动量和其他超参数。
1 | d_optim = tf.train.AdamOptimizer(config.learning_rate, beta1=config.beta1) \ |
我们已经准备好了解我们的数据。在每个epoch中,我们在每个minibatch中采样一些图像,并且运行优化器更新网络。有趣的是,如果G仅更新一次,判别器的损失则不会为零。另外,我认为d_loss_fake
和d_loss_real
在最后的额外的调用回到是一点点不必要的计算,并且是冗余的,因为这些值是作为d_optim
和g_optim
的一部分计算的。作为TensorFlow中的练习,您可以尝试优化此部分并将RP发送到原始库。
1 | for epoch in xrange(config.epoch): |
Generative Adversarial Networks代码整理
InfoGAN-TensorFlow:InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets
iGAN-Theano:Generative Visual Manipulation on the Natural Image Manifold
SeqGAN-TensorFlow:SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient
DCGAN-Tensorflow:Deep Convolutional Generative Adversarial Networks
dcgan_code-Theano:Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks
improved-gan-Theano:Improved Techniques for Training GANs
chainer-DCGAN:Chainer implementation of Deep Convolutional Generative Adversarial Network