Python 在TensorFlow中使用LSTM-CGAN生成MNIST数
受此启发,我正在尝试构建一个条件GAN,它将使用LSTM生成MNIST编号。我希望我使用的架构与下图中相同(除了双向RNN in鉴别器,摘自): 当我运行这个模型时,我得到了非常奇怪的结果。此图显示了我的模型在每个历元后生成的编号3。它应该看起来更像。真糟糕 我的鉴别器的丢失网络下降速度非常快,接近于零。然而,my发电机的损耗在某个固定点附近振荡(可能缓慢发散)。我真的不知道发生了什么事。以下是我的代码(完整代码)中最重要的部分:Python 在TensorFlow中使用LSTM-CGAN生成MNIST数,python,tensorflow,neural-network,lstm,recurrent-neural-network,Python,Tensorflow,Neural Network,Lstm,Recurrent Neural Network,受此启发,我正在尝试构建一个条件GAN,它将使用LSTM生成MNIST编号。我希望我使用的架构与下图中相同(除了双向RNN in鉴别器,摘自): 当我运行这个模型时,我得到了非常奇怪的结果。此图显示了我的模型在每个历元后生成的编号3。它应该看起来更像。真糟糕 我的鉴别器的丢失网络下降速度非常快,接近于零。然而,my发电机的损耗在某个固定点附近振荡(可能缓慢发散)。我真的不知道发生了什么事。以下是我的代码(完整代码)中最重要的部分: 我的模型很可能有问题。有人能帮我使发电机网络融合吗?您可以做
我的模型很可能有问题。有人能帮我使发电机网络融合吗?您可以做一些事情来改进您的网络架构和培训阶段
tf.nn.sigmoid(logit)
。只返回pred
D_loss_real = tf.nn.sigmoid_cross_entropy_with_logits(
logits=D_real,
labels=tf.ones_like(D_real))
D_loss_fake = tf.nn.sigmoid_cross_entropy_with_logits(
logits=D_fake,
labels=tf.zeros_like(D_fake))
D_loss = -tf.reduce_mean(D_loss_real + D_loss_fake)
G_loss = -tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(
logits=D_real,
labels=tf.ones_like(D_real)))
一旦你修正了损耗并使用了数值稳定的函数,事情就会变得更好。此外,根据经验,如果损失中有太多噪音,则降低学习率(ADAM的默认lr在训练GANs时通常过高)。
希望它有帮助可能有用,即使它们是为简单的GANs编写的。您的问题是鉴别器的学习速度如此之快,它确实允许生成器进行改进。这是一个普遍的问题。如果您的代码没有明显的错误,那么该链接将帮助您解决问题。我想知道生成器是否需要更多信息来创建有意义的数字?它似乎在每一行输出非常相似的东西?@JacquesKvam在某些情况下,它比上面的图片要糟糕得多。生成器仅返回垂直直线,顶部仅有几行噪声。
D_loss_real = tf.nn.sigmoid_cross_entropy_with_logits(
logits=D_real,
labels=tf.ones_like(D_real))
D_loss_fake = tf.nn.sigmoid_cross_entropy_with_logits(
logits=D_fake,
labels=tf.zeros_like(D_fake))
D_loss = -tf.reduce_mean(D_loss_real + D_loss_fake)
G_loss = -tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(
logits=D_real,
labels=tf.ones_like(D_real)))