关于冷冻蛋鸡训练的Keras问题

2024-04-25 20:58:12 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我要学习thisGAN教程,作者设置了一个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部分的权重是如何通过训练model_discriminator来更新的。对我来说,它们是两个独立的网络,训练一个包含net_discriminator层的模型不应该影响另一个。而且,层在adversarial模型中被冻结,所以这不应该阻止它们被训练吗?你知道吗

有没有人能给我一个低层次的解释?谢谢!你知道吗


Tags: in模型addlayernetmodellayers教程
1条回答
网友
1楼 · 发布于 2024-04-25 20:58:12

教程的作者已经在下面几行给出了第一个问题的答案,他说:

  • 需要注意的是,我们将鉴别器网络添加到 新的序列模型,不直接编译鉴别器 它自己。我们这样做是因为鉴别器在 下一步,我们可以这样做,添加到一个新的模型之前 编译。你知道吗
  • 我们的对抗模型使用随机噪声作为输入,并输出 在生成的图像上最终预测鉴别器。这就是为什么我们 在上一步中,我们将鉴别器添加到新模型中 我们可以重用这里的网络。你知道吗

因此,我认为他创建model_discriminator模型的方式是通过将net_discriminator模型添加到new Sequential()层,这就是model_adversarialnet_discriminator部分的权重如何通过训练model_discriminator得到更新的原因,因为在model_discriminator的训练过程中,它实际上是它的net_discriminator部分得到了训练。你知道吗

回答第二个问题:

据作者说

If we would use normal back propagation here on the full adversarial model we would slowly push the discriminator to update itself and start classifying fake images as real. Namely, the target vector of the adversarial model consists of all ones. To prevent this we must freeze the part of the model that belongs to the discriminator.

因此,作者的上述解释清楚地表明了为什么我们要冻结敌方模型中的鉴别器部分。adverserial模型同时包含generatordiscriminator网络。adverserial模型使用随机噪声作为输入,并在生成的图像上输出discriminator的最终预测。因此,这里已经训练过的discriminator网络只用于预测,不需要将其包含在训练中。你知道吗

相关问题 更多 >