因此,我正在阅读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
同时训练两个模型。
我不了解的是net_discriminator
的{{1}}部分的权重是如何通过训练model_adversarial
来更新的。对我来说,它们是两个独立的网络,训练包含model_discriminator
层的模型应该不会影响另一个模型。另外,这些图层会冻结在net_discriminator
模型中,难道不应该阻止这些图层的训练吗?
有人可以向我提供有关此工作原理的下层解释吗?谢谢!
答案 0 :(得分:0)
本教程的作者已经在以下几行中给出了第一个问题的答案:
因此,我认为他通过将model_discriminator
模型添加到net_discriminator
层来创建new Sequential()
模型的方式是{ {1}}通过培训net_discriminator
得到更新,就像在model_adversarial
的培训期间一样,实际上model_discriminator
的一部分正在接受培训。
回答第二个问题:
根据作者
如果我们在整个对抗中使用正常的反向传播 模型,我们将慢慢推动鉴别器进行自我更新, 开始将假图片分类为真实图片。即,目标向量 对抗模型由所有模型组成。为了防止这种情况,我们必须 冻结模型中属于鉴别器的部分。
因此,作者的上述解释清楚地表明了为什么我们要冻结逆向模型的鉴别器层。 model_discriminator
模型包含net_discriminator
和adverserial
网络。 generator
模型使用随机噪声作为其输入,并在生成的图像上输出discriminator
的最终预测。因此,这里已经训练过的adverserial
网络仅用于预测,而无需参与训练。