- 归一化图像输入到[-1,1]之间。
- 生成器最后一层使用tanh激活函数。
- 生成器的Loss采用min(log(1-D))。因为原始的生成器Loss存在梯度消失问题
- 训练生成器的时候,考虑反转标签,real=fake,fake=real。
- 不要在均匀分布上采样,应该在高斯分布上采样。
- 一个Mini-batch里面必须只有正样本,或者负样本。不要混在一起训练。
- 如果用不了Batch Norm,可以用Instance Norm避免稀疏梯度,即少用ReLU,MaxPool。可以用LeakyReLU替代ReLU。
- 下采样可以用Average Pooling或者Convolution + stride替代。上采样可以用PixelShuffle,ConvTranspose2d + stride。
- 平滑标签或者给标签加噪声。平滑标签,即对于正样本,可以使用0.7-1.2的随机数替代;对于负样本,可以使用0-0.3的随机数替代。给标签加噪声:即训练判别器的时候,随机翻转部分样本的标签。
- 如果可以,可以使用DCGAN或者混合模型:KL+GAN,VAE+GAN。
- 生成器使用Adam,判别器使用SGD。
- 尽快发现错误:比如判别器Loss为0,说明训练失败了;如果生成器Loss稳步下降,说明判别器没发挥作用。
- 不要试着通过比较生成器和判别器的Loss的大小来解决训练过程中的模型坍塌问题。比如:Loss D > Loss G:train D。Loss G > Loss D:train G。
- 如果有标签,请尽量利用标签信息来训练。
- 给判别器的输入加入一些噪声,给G的每一层加一些人工噪声。
- 多训练判别器,尤其是加了噪声的时候。
- 对于生成器,在训练和测试的时候使用dropout。
深度学习_GAN_GAN模型训练的优化技巧
猜你喜欢
转载自blog.csdn.net/Rocky6688/article/details/103660597
今日推荐
周排行