为啥我们在编译组合 GAN (SRGAN) 网络时使用两个损失

Posted

技术标签:

【中文标题】为啥我们在编译组合 GAN (SRGAN) 网络时使用两个损失【英文标题】:Why we use two losses while compiling the combined GAN (SRGAN) network为什么我们在编译组合 GAN (SRGAN) 网络时使用两个损失 【发布时间】:2020-11-01 05:31:20 【问题描述】:

我正在研究 SRGAN(超分辨率 GAN)。我遇到了一个代码,其中作者在编译鉴别器时使用了 MSE 损失。和两个损失,即二元交叉熵和 MSE,同时编译组合 GAN 模型。我不明白这些损失函数的用途。这是代码。 编译判别器的代码是:

discriminator = build_discriminator()
discriminator.compile(loss='mse', optimizer=common_optimizer, metrics=['accuracy']

而编译组合GAN模型的代码是:

adversarial_model = Model([input_low_resolution, input_high_resolution], [probs, features])
adversarial_model.compile(loss=['binary_crossentropy', 'mse'], loss_weights=[1e-3, 1],
                      optimizer=common_optimizer)

还有一件事.. 对于下面的代码行,我得到如下所示的输出。我不明白这个输出是什么意思。

g_loss = adversarial_model.train_on_batch([low_resolution_images, high_resolution_images],
                                          [real_labels, image_features])

Result of the above mentioned code

【问题讨论】:

【参考方案1】:

如果是生成器生成的假图像,则对真实图像进行 MSE 损失。如果是判别器判断的假图像,使用BCE损失。

【讨论】:

我两者都用,结合损失,使网络更强大,经过验证。

以上是关于为啥我们在编译组合 GAN (SRGAN) 网络时使用两个损失的主要内容,如果未能解决你的问题,请参考以下文章

SRGAN 学习心得

GAN生成对抗网络(一)

将 torch.backward() 用于 GAN 生成器时,为啥 Pytorch 中的判别器损失没有变化?

ECCV 2018 | UBC&腾讯AI Lab提出首个模块化GAN架构,搞定任意图像PS组合

生成式对抗网络GAN(一)

这些资源你肯定需要!超全的GAN PyTorch+Keras实现集合