我正在研究一个生成性的对抗性网络,在Keras中实现。我有我的生成器模型G和鉴别器D,它们都是由两个函数创建的,然后使用这两个模型创建GAN模型,就像代码中的这个简单示例:
gopt=Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
dopt=Adam(lr=0.00005, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
opt_gan = Adam(lr=0.00006, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
G= gmodel(......)
G.compile(loss=...., optimizer=gopt)
D=dmodel(..)
D.trainable = False
GAN=ganmodel(generator_model=G,discriminator_model=D,...)
GAN_model.compile(loss=["mae", "binary_crossentropy"], loss_weights=[0.5, 0.5], optimizer=opt_gan)
D.trainable = True
D.compile(loss='binary_crossentropy', optimizer=dopt)现在我的问题或者更好的问题是,当我们训练GAN模型时,优化将如何工作?更确切地说,我对学习速度感兴趣。当我训练GAN时,发电机上的学习率是多少?
由于我在把G发送到GAN模型之前已经编译了它,所以它的优化器不应该改变,所以学习率应该是0.0001?或者采用GAN的学习率,即0.00006?那鉴别器呢?
发布于 2022-02-18 09:38:25
发电机只通过GAN进行训练。因此,您不需要为生成器定义优化器,也不需要编译它。
当你训练发电机的时候,你实际上是在训练整个GAN。只有鉴别者是独立训练的。
为了回答你的问题,在训练GAN时使用GAN参数,在训练鉴别器时使用判别器参数。生成器参数永远不会使用,并且可以删除。
https://datascience.stackexchange.com/questions/49173
复制相似问题