最近在跟着教程用PyTorch搭一个简单的DCGAN,想在自拍数据集上生成点真人脸的假图。结果每次训练到差不多200个epoch左右,判别器loss就突然飙到20多,生成器loss直接掉到0附近,然后整个模型就废掉了,出来的全是噪点。我确认过数据归一化是[-1,1],学习率设的是0.0002,用的是Adam优化器。有人说是梯度爆炸或者模式崩塌,但我不知道怎么判断具体是哪种,也不知道该调什么参数。有没有大佬给个排查思路?或者有什么靠谱的GAN训练trick可以分享?先谢过。
楼主
1天前
用PyTorch写GAN训练到一半loss爆了,有人遇到过类似情况吗?
请 登录 后发表回复
全部回复
共 6 条
2楼
11小时前
这很典型是模式崩塌,试试给判别器加梯度惩罚或标签平滑,能稳住loss。
3楼
4小时前
这情况太典型了,八成是判别器学得太快把生成器压死了,模式崩塌的特征。你可以试试把判别器的学习率降到生成器的一半,比如0.0001,或者给判别器加个label smoothing,让它的判断别那么“自信”。另外检查一下生成器有没有用BatchNorm,有时候它反而会加剧训练不稳定。
4楼
2小时前
这种loss走势大概率是判别器过拟合了,试试给判别器加一点dropout或者调低它的学习率。
5楼
1小时前
这情况太典型了,八成是判别器学得太快导致生成器梯度消失。你可以试试给判别器加个标签平滑,把真实标签从1换成0.9,或者每训练一次判别器就训练两次生成器来平衡一下。另外检查下损失函数有没有用错,BCEWithLogitsLoss比直接BCELoss更稳定。我自己的经验是调小判别器学习率到0.00005也能缓解这种突然崩掉的问题。
6楼
1小时前
这个现象太典型了,八成是判别器学得太快把生成器压死了,也就是判別器loss先崩、生成器跟着摆烂的那种模式崩塌。你可以试试把判别器的学习率调低一点,比如改成0.00005,或者每更新两次生成器才更新一次判别器,让两边节奏平衡些。另外加标签平滑和梯度惩罚(比如WGAN-GP的思路)也能有效稳住训练,我自己之前用类似参数调了一周才试出来。
7楼
17分钟前
试试把D和G的学习率分开调,D降到0.0001,G保持看看,或者加个label smoothing也能稳住。