了解生成式对抗网络

时间:2020-02-03 16:02:22

标签: machine-learning keras deep-learning generative-adversarial-network

我从Keras的Paper Edge-Connect(https://github.com/knazeri/edge-connect)实现了提议的GAN模型,并在KITTI数据集上进行了一些培训。现在,我试图弄清楚模型内部发生了什么,因此我有几个问题。

1。初步培训(100个时期,500个批次/时期,10个样本/批次)

首先,我按照论文中的建议训练了模型(包括样式损失,感知损失,L1和对抗损失)

乍一看,该模型收敛到不错的结果:

Text Text

这是被屏蔽的输入(右)的生成器(左)的输出

张量板上的大多数图形看起来也很不错: (这些都是GAN模型中的所有值,包含生成器的总损耗(GENERATOR_Loss),基于生成的图像(L1,perc,样式)的不同损耗以及对抗性损耗(DISCRIMINATOR_loss)

仔细观察鉴别器时,情况看起来会有所不同。所生成图像的鉴别器的对抗损失稳步增加。 训练鉴别器(50/50假/真实示例)时的损失根本不会改变:

当查看鉴别器输出激活的直方图时,它始终输出约0.5的值。

在我的问题/结论中,感谢您的反馈:

  • 所以我现在假设,我的模型学到了很多东西,但没有从鉴别器中学到什么,对吗?结果全部基于其他损失 比对抗损失还重要?
  • 似乎鉴别器跟不上生成更好图像的生成器。我认为辨别器的激活应该以某种方式尽早移至0(假标签)和1(真实标签)附近的两个峰值并保持在那里?
  • 我知道我的最终目标是,鉴别器输出0.5的真假概率...但是当这种情况从一开始就发生并且在训练过程中没有变化时,这意味着什么? strong>
  • 我是否过早停止训练?判别器能否赶上(因为发电机的输出不再发生太大变化)并消除发电机的最后微小故障?

2。。因此,我开始了第二次训练,这次仅使用生成器中的对抗损失! (〜16个纪元,每个纪元500个批次,每个批次10个样本)

这一次,鉴别器似乎能够在一段时间后区分真假。 (prob_real是分配给真实图像的平均概率,反之亦然) 激活的直方图看起来也不错:

enter image description here

但是在大​​约4k Samples之后,东西以某种方式开始发生变化,并且在大约7k时出现了发散... 同样,来自生成器的所有样本都如下所示:

enter image description here

谈到我的第二部分问题/结论:

  • 我是否应该对鉴别器进行预训练,使其抢先一步?我想它需要以某种方式能够区分真假(输出大概率真假,反之亦然),以便生成器可以从中学习有用的东西?出于相同的原因,我应该在对生成器进行一步训练的同时对鉴别器进行多次训练吗?
  • 第二次培训发生了什么?鉴别器的学习率是否太高?(选择:ADAM,lr = 1.0E-3)
  • 互联网上有许多培训GAN的提示,旨在提高鉴别器工作的难度(标签噪声/标签翻转,实例噪声,标签平滑等)。 (->我还训练了Disc而不改变发生器,并且收敛很好)

谢谢大家的投入!

1 个答案:

答案 0 :(得分:0)

如果辨别器在网络开始时直接输出0.5的概率,则意味着该辨别器的权重未更新,并且在训练中不起作用,这进一步表明它无法区分即将来临的真实图像和伪造图像从发电机。为了解决此问题,请尝试将高斯噪声添加为鉴别器的输入或进行标签平滑,这是非常简单有效的技术。 在回答您的问题时,结果都是基于对抗性损失以外的损失,可以使用的技巧是尝试先对网络进行除对抗性损失之外的所有损失的训练,然后对对抗性进行微调损失,希望对您有所帮助。 对于您问题的第二部分,生成的图像似乎面临着模式collapase的问题,在这种模式下,它们倾向于学习颜色,从1张图像退化并将其传递给其他图像,请尝试通过减小批大小来解决它或使用展开的甘斯