【发布时间】:2018-08-29 15:30:40
【问题描述】:
我正在尝试在 keras 中实现对抗性损失。 该模型由两个网络组成,一个自动编码器(目标模型)和一个鉴别器。这两个模型共享编码器。
我通过设置一个 keras 变量来创建自动编码器的对抗性损失
def get_adv_loss(d_loss):
def loss(y_true, y_pred):
return some_loss(y_true, y_pred) - d_loss
return loss
discriminator_loss = K.variable()
L = get_adv_loss(discriminator_loss)
autoencoder.compile(..., loss=L)
在训练期间,我将train_on_batch 和discriminator 和autoencoder 交错以更新discriminator_loss
d_loss = disciminator.train_on_batch(x, y_domain)
discriminator_loss.assign(d_loss)
a_loss, ... = self.segmenter.train_on_batch(x, y_target)
但是,我发现在编译模型时这些变量的值被冻结了。我试图在训练期间重新编译模型,但会引发错误
节点“IsVariableInitialized_13644”:未知输入节点 'training_12/Adam/变量'
我猜这意味着我不能在训练期间重新编译?关于如何在自动编码器中注入鉴别器损失的任何建议?
【问题讨论】:
标签: python keras deep-learning generative-adversarial-network