Keras 我是否必须每批重新编译我的Gan,以防止鉴别器学习?
我有一只这样的鹅Keras 我是否必须每批重新编译我的Gan,以防止鉴别器学习?,keras,generative-adversarial-network,Keras,Generative Adversarial Network,我有一只这样的鹅 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
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:可训练重量和收集的可训练重量之间存在差异,您是否设置了model.trainiable
,而未调用model.compile
?
“可训练重量和收集的可训练重量之间的差异”
如果我重新编译鉴别器并对每一批进行扫描,警告就会消失,但一次迭代需要更长的时间,而且训练速度较慢
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对此有一个公开的bug: 那里的回复中有一些如何绕过警告的例子,我不打算在这里重复。还有一个回复,提供了很好的建议,如果您对模型的细节不确定,如何验证您是否真的在培训您应该培训的内容: