我有两个Keras网络。为了便于说明,我的模型类似于GAN。因此,我们有一个鉴别器(D)和一个发生器(G)。
显然,为了训练(G),应该冻结(D)层。
如果我使用D.trainable = False
冻结了它们,那么在训练(D)时应该反转此参数吗?
Keras中model.trainable
的范围是什么?
我看过只更改一次该参数状态的代码:
https://github.com/nairouz/Keras-GAN/blob/master/gan/gan.py
怎么可能呢?有什么解释吗?
答案 0 :(得分:1)
来自How can I "freeze" Keras layers?:
此外,您可以在实例化后将图层的可训练属性设置为
True
或False
。为使此方法生效,您需要在修改可训练属性后在模型上调用compile()
。
同样适用于模型。这意味着,当您设置D.trainable = False
时,直到您编译D
(或任何其他利用D
的模型)后,该设置才会生效,因此不会影响您之前拥有的模型