2

我有一个像这样的甘

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, did you set model.trainablewithout call model.compileafter?'可训练权重和收集的可训练权重之间的差异'”

如果我每批次重新编译鉴别器和 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,..)

其中哪一项是正确的?

4

1 回答 1

1

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

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

于 2019-01-05T14:58:33.260 回答