我正在阅读人们对 DCGAN 的实现,尤其是this one https://github.com/carpedm20/DCGAN-tensorflow在张量流中。
在该实现中,作者画出了判别器和生成器的损失,如下所示(图片来自https://github.com/carpedm20/DCGAN-tensorflow https://github.com/carpedm20/DCGAN-tensorflow):
鉴别器和生成器的损失似乎都不遵循任何模式。与一般神经网络不同,其损失随着训练迭代的增加而减少。如何解释训练 GAN 时的损失?
不幸的是,就像你对 GAN 所说的那样,损失是非常不直观的。大多数情况下,生成器和鉴别器相互竞争,因此一个的改进意味着另一个的损失更高,直到另一个更好地学习接收到的损失,这会搞砸其竞争对手,等等。
Now one thing that should happen often enough (depending on your data and initialisation) is that both discriminator and generator losses are converging to some permanent numbers, like this:
(it's ok for loss to bounce around a bit - it's just the evidence of the model trying to improve itself)
这种损失收敛通常意味着 GAN 模型找到了一些最佳值,但它无法进一步改进,这也意味着它已经学习得足够好了。 (另请注意,数字本身通常并不能提供太多信息。)
以下是一些旁注,希望对您有所帮助:
- 如果损失没有很好地收敛,并不一定意味着模型没有学到任何东西 - 检查生成的示例,有时它们足够好。或者,可以尝试更改学习率和其他参数。
- 如果模型收敛良好,仍然检查生成的示例 - 有时生成器会发现判别器无法与真实数据区分开的一个/几个示例。问题是它总是给出这几个,而不创建任何新的东西,这称为模式崩溃。通常为数据引入一些多样性会有所帮助。
- 由于普通 GAN 相当不稳定,我建议使用某些版本
DCGAN 模型 https://github.com/carpedm20/DCGAN-tensorflow,因为它们包含一些特征,例如卷积
层和批量归一化,这应该有助于
收敛的稳定性。 (上图是 DCGAN 而不是 vanilla GAN 的结果)
- 这是一些常识,但仍然是:就像大多数神经网络结构调整模型一样,即更改其参数或/和架构以满足您的某些需求/数据可以改进模型或搞砸它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)