我目前正在用(大约)Wasserstein 损失在 keras 中训练 WGAN,如下所示:
def wasserstein_loss(y_true, y_pred):
return K.mean(y_true * y_pred)
Run Code Online (Sandbox Code Playgroud)
但是,这种损失显然可能是负数,这对我来说很奇怪。
我对 WGAN 进行了 200 个 epoch 的训练,得到了下面的评论家 Wasserstein 损失训练曲线。

上述损失计算为
d_loss_valid = critic.train_on_batch(real, np.ones((batch_size, 1)))
d_loss_fake = critic.train_on_batch(fake, -np.ones((batch_size, 1)))
d_loss, _ = 0.5*np.add(d_loss_valid, d_loss_fake)
Run Code Online (Sandbox Code Playgroud)
结果生成的样本质量很好,所以我认为我正确地训练了 WGAN。但是我仍然无法理解为什么 Wasserstein 损失可能为负并且模型仍然有效。根据原始WGAN论文,Wasserstein loss可以作为GAN的性能指标,那么我们应该如何解释呢?我有什么误解吗?
python machine-learning neural-network keras generative-adversarial-network