【问题标题】:Do I have to recompile my Gan every batch, to prevent the discriminator from learning?我是否必须每批重新编译我的 Gan,以防止判别器学习?
【发布时间】:2019-01-05 23:52:46
【问题描述】:

我有这样的甘

generator = Model(g_in, g_out)
generator.compile(...)

discriminator = Model(d_in, d_out)
discriminator.trainable = True
discriminator.compile(..)

discriminator.trainable = False

gan = Model(inputs=.., outputs=..)
gan.compile(..)

#iterate over epochs and batches, without compiling

它学习并给出可接受的输出。但是我收到警告:

"keras\engine\training.py:490: UserWarning: Discrepancy between trainable weights and collectable weights, you set model.trainable without call model.compile after ? '可训练权重与收集的可训练权重之间的差异'"

如果我每批次都重新编译判别器和 gan,警告就会消失,但一次迭代需要更长的时间并且训练速度会更慢。

for epoch:
  for batch:

    fakes=generator.predict_on_batch(batch)

    discriminator.trainable = True
    discriminator.compile(..)

    discriminator.train_on_batch(batch, ..)
    discriminator.train_on_batch(fakes, ..)

    discriminator.trainable = False
    discriminator.compile(..)
    gan.compile(..)

    gan.train_on_batch(batch,..)

哪一个是正确的?

【问题讨论】:

    标签: keras generative-adversarial-network


    【解决方案1】:

    这是意料之中的,无需重新编译每个批次。 Keras 对此有一个公开的错误:https://github.com/keras-team/keras/issues/8585

    那里的回复有一些如何绕过警告的示例,我不打算在这里重复它们。如果您不确定模型的具体细节,还有一个回复就如何验证您是否真的在训练您应该训练的内容提供了很好的建议:https://github.com/keras-team/keras/issues/8585#issuecomment-385729276

    【讨论】:

      猜你喜欢
      • 2011-01-03
      • 2011-02-26
      • 1970-01-01
      • 2013-12-23
      • 2021-03-30
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      相关资源
      最近更新 更多