赞
踩
这两天一直在训练自己的GAN模型,训练过程中鉴别器极其不稳定,训练的几个epoch之后经常出现NAN,在加入WGAN中的梯度惩罚和鉴别器的参数裁剪之后,模型似乎变得可以训练了。
解决方案:
1.使用WGAN中的loss代替原始GAN中的损失函数,去掉原始GAN损失函数中的log
2.适当地进行梯度惩罚
3.使用hinge loss
在模型变得可以训练之后,生成器和鉴别器的loss如图所示:
鉴别器和生成器的对抗损失呈现相反的趋势,并且两者一直都处于比较稳定的状态,于是我中断了训练。出现这种问题的可能原因是模型在训练过程中出现了模式崩塌,它发生的原因之一是G只要学会欺骗D就可以了,所以G其实可以只生成小量真实数据即可,极端情况下甚至可以只生成一个真实数据就可以欺骗D了。出现这种情况的可能原因是生成器和鉴别器的模型复杂度(或者参数)不在一个层级,鉴别器过于强势,我发现我的模型中生成器的参数大概为四千万,鉴别器的参数来大概为七千五百万,几乎相差了两倍。
解决方案:
1.权衡好生成器和鉴别器的模型复杂度,复杂度不在一个层面的话,模型几乎无法学习到任何东西
2.可以尝试每更新几次生成器再更新一次鉴别器
3.每迭代几个epoch后就输出生成的额图片
4.注意观察训练过程中的loss曲线
reference:
1.https://www.zhihu.com/question/416797108/answer/1472929170
2.https://zhuanlan.zhihu.com/p/25071913
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。