Keras关于冷冻层训练的问题

时间:2019-06-27 13:04:06

标签: python tensorflow keras

因此,我正在阅读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模型中,难道不应该阻止这些图层的训练吗?

有人可以向我提供有关此工作原理的下层解释吗?谢谢!

1 个答案:

答案 0 :(得分:0)

本教程的作者已经在以下几行中给出了第一个问题的答案:

  • 请务必注意,我们将鉴别器网络添加到 新的顺序模型,不直接编译鉴别器 本身。我们这样做是因为在 下一步,我们可以通过将其添加到新模型中来做到这一点 编译。
  • 我们的对抗模型使用随机噪声作为输入,并输出 鉴别器最终在生成的图像上的预测。这就是为什么我们 通过在上一步中将鉴别器添加到新模型中,我们 可以在这里重用网络。

因此,我认为他通过将model_discriminator模型添加到net_discriminator层来创建new Sequential()模型的方式是{ {1}}通过培训net_discriminator得到更新,就像在model_adversarial的培训期间一样,实际上model_discriminator的一部分正在接受培训。

回答第二个问题:

根据作者

  

如果我们在整个对抗中使用正常的反向传播   模型,我们将慢慢推动鉴别器进行自我更新,   开始将假图片分类为真实图片。即,目标向量   对抗模型由所有模型组成。为了防止这种情况,我们必须   冻结模型中属于鉴别器的部分。

因此,作者的上述解释清楚地表明了为什么我们要冻结逆向模型的鉴别器层。 model_discriminator模型包含net_discriminatoradverserial网络。 generator模型使用随机噪声作为其输入,并在生成的图像上输出discriminator的最终预测。因此,这里已经训练过的adverserial网络仅用于预测,而无需参与训练。