我想在 Keras 中训练 GAN。我的最终目标是开始,但我从最简单的目标开始。理解如何冷冻在这里,适当的权重是必要的,这就是我正在努力解决的问题。
在生成器训练期间,鉴别器权重可能不会更新。我想freeze and unfreeze判别器交替用于交替训练生成器和判别器。问题是设置可训练的参数设置为 false鉴别器模型甚至其权重并不会阻止模型训练(以及权重更新)。另一方面,当我在设置后编译模型时可训练的到 False 权重就变成不可冻结的。我无法在每次迭代后编译模型,因为这否定了整个训练的想法。
由于这个问题,许多 Keras 实现似乎都存在缺陷,或者由于旧版本中的一些非直观技巧或其他原因而无法工作。
几个月前我尝试过这个示例代码并且它有效:https://github.com/fchollet/keras/blob/master/examples/mnist_acgan.py https://github.com/fchollet/keras/blob/master/examples/mnist_acgan.py
这不是最简单的 GAN 形式,但据我记得,去除分类损失并将模型变成 GAN 并不太困难。
您不需要打开/关闭鉴别器的可训练属性并重新编译。只需创建并编译两个模型对象,其中一个带有trainable=True
(discriminator
在代码中)和另一个trainable=False
(combined
在代码中)。
当您更新鉴别器时,请调用discriminator.train_on_batch()
。当您更新生成器时,请调用combined.train_on_batch()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)