我正在使用Tensorflow创建一个GAN。我决定使用Keras来构建生成器和判别器,因为层结构变得复杂(在Keras中定义层更容易)。我有用于GAN的Tensorflow中的损失和训练代码,但我不知道如何使用这些代码来训练Keras模型。
D_loss_real = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=D_logit_real, labels=tf.ones_like(D_logit_real)))D_loss_fake = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=D_logit_fake, labels=tf.zeros_like(D_logit_fake)))D_loss = D_loss_real + D_loss_fakeG_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=D_logit_fake, labels=tf.ones_like(D_logit_fake)))D_solver = tf.train.AdamOptimizer().minimize(D_loss,var_list = ?)G_solver = tf.train.AdamOptimizer().minimize(G_loss,var_list = ?)
我在var_list中传递了tf.Variables
(这些变量是在使用tf构建GAN时使用的)。然而,我不知道如何最小化Keras模型,因为Keras会自动管理权重。
我无法使用Keras的compile和fit函数,因为在训练过程中生成器和判别器过于相互依赖。
如何使用上述显示的损失来训练我的Keras模型?
回答:
这篇文章会有所帮助。 基本上,你只需要将你的Keras会话设置为与你的Tensorflow相同即可。