首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于使用冻结层进行训练的Keras问题

关于使用冻结层进行训练的Keras问题
EN

Stack Overflow用户
提问于 2019-06-27 21:04:06
回答 1查看 132关注 0票数 0

所以我正在学习this GAN教程,作者设置了一个这样的discriminator

代码语言:javascript
复制
model_discriminator = Sequential()
model_discriminator.add(net_discriminator)

其中net_discriminator是另一种Sequential模型。

然后,他像这样设置adversarial模型:

代码语言:javascript
复制
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_adversarialnet_discriminator部分的权重是如何通过训练model_discriminator来更新的。对我来说,它们是两个独立的网络,训练一个包含net_discriminator层的模型不应该影响另一个模型。此外,这些层在adversarial模型中是冻结的,所以这不是应该阻止它们被训练吗?

有人能给我解释一下这是如何工作的吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-06-27 21:49:56

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

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

因此,我认为他通过将model_discriminator模型添加到new Sequential()层来创建net_discriminator模型的方式是model_adversarialnet_discriminator部分的权重如何通过训练model_discriminator来更新的原因,因为在model_discriminator的训练期间,实际上是net_discriminator部分正在接受训练。

第二个问题的答案:

根据作者的说法,

如果我们在完整的对抗模型上使用正常的反向传播,我们将缓慢地推动鉴别器自我更新,并开始将假图像分类为真实图像。也就是说,对抗模型的目标向量由所有的1组成。为了防止这种情况,我们必须冻结属于鉴别器的模型部分。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56791682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档