所以我正在学习this GAN教程,作者设置了一个这样的discriminator:
model_discriminator = Sequential()
model_discriminator.add(net_discriminator)其中net_discriminator是另一种Sequential模型。
然后,他像这样设置adversarial模型:
model_adversarial = Sequential()
model_adversarial.add(net_generator)
# Disable layers in discriminator
for layer in net_discriminator.layers:
layer.trainable = False
model_adversarial.add(net_discriminator)其中net_generator是另一种sequential模型。
两个模型都是使用train_on_batch同时训练的。
我不明白的是,model_adversarial的net_discriminator部分的权重是如何通过训练model_discriminator来更新的。对我来说,它们是两个独立的网络,训练一个包含net_discriminator层的模型不应该影响另一个模型。此外,这些层在adversarial模型中是冻结的,所以这不是应该阻止它们被训练吗?
有人能给我解释一下这是如何工作的吗?谢谢!
发布于 2019-06-27 21:49:56
你的第一个问题的答案已经由本教程的作者在以下几行中给出了,他说:
因此,我认为他通过将model_discriminator模型添加到new Sequential()层来创建net_discriminator模型的方式是model_adversarial的net_discriminator部分的权重如何通过训练model_discriminator来更新的原因,因为在model_discriminator的训练期间,实际上是net_discriminator部分正在接受训练。
第二个问题的答案:
根据作者的说法,
如果我们在完整的对抗模型上使用正常的反向传播,我们将缓慢地推动鉴别器自我更新,并开始将假图像分类为真实图像。也就是说,对抗模型的目标向量由所有的1组成。为了防止这种情况,我们必须冻结属于鉴别器的模型部分。
因此,作者的上述解释清楚地表明了为什么我们要冻结对抗性模型的鉴别器部分。adverserial模型同时包含generator和discriminator网络。adverserial模型使用随机噪声作为其输入,并在生成的图像上输出discriminator的最终预测。因此,在这里,已经训练好的discriminator网络仅用于预测,不需要将其用于训练。
https://stackoverflow.com/questions/56791682
复制相似问题