赞
踩
https://github.com/soumith/ganhacks
把信号归一化到-1 到1
generator的最后一层输出用Tanh
在GAN的文章中,generator的损失函数是min(log 1-D) 但是在实际中会用max(log D)
在实际中的好方法:
训练生成器时翻转标签:real = fake, fake = real
G的初始值不从均匀分布中采样,从高斯分布中采样
torch.randn(*size) 从标准正态分布(均值为0,方差为1)中抽取的一组随机数。应该是高斯分布
进行插值时,请通过大圆而不是从A点到B的直线进行插值
为真实数据和生成数据构造不同的mini batch,即每个mini batch仅需要包含所有真实图像或所有生成的图像。
如果不使用batch norm,则使用标准化(对于每个样本,减去均值并除以标准差)。
如果梯度稀疏,GAN的稳定性会受到影响
LeakyReLU =好(在G和D中)
对于下采样,使用:平均池化,Conv2d +stride
对于上采样,使用:PixelShuffle,ConvTranspose2d + stride
PixelShuffle:https://arxiv.org/abs/1609.05158
标签平滑,即如果您有两个目标标签:Real = 1和Fake = 0,则对于每个传入样本,如果它是真实的,则将标签替换为介于0.7和1.2之间的随机数,如果它是虚假的 ,将其替换为0.0和0.3。
比如
使标签对discriminator产生干扰:训练鉴别器时偶尔翻转标签
如果能用就用DCGAN吧,这个能行!
如果不能使用DCGAN并且没有稳定的模型,可以使用混合模型:KL + GAN或VAE + GAN
Pfau & Vinyals (2016)
optim.Adam规则
Radford et. al. 2015
使用SGD训练D,ADAM训练G
D loss为0,失败 (D太强了,以至于G没有动力去产生好的fake数据,他觉得自己太垃圾于是索性放弃了)
检查梯度的范数:如果大于100就坏掉了 (梯度也不能太大,D或G,不希望D和G性能差距太大,他们应该同时进步)
网络正常时,D的loss曲线的方差较小,并且随着时间的推移而下降或者有大的方差并且有尖峰
如果G的loss稳定上升,那么G就是在用垃圾愚弄D
不要尝试去找到一个(number of G/number of D)时间表去展开训练
很困难,我们都尝试过
如果你想尝试,请基于规则,而不是直觉
举例
- while lossD > A:
- train D
- while lossG > B:
- train G
如果有可用的标签,请训练鉴别器以对样本进行分类:auxillary GANs
13.给输入加上随时间衰减的噪声
给D的输入加上人工噪声 Arjovsky et. al., Huszar, 2016
给G的每层加上高斯噪声 Zhao et. al. EBGAN
特别是有噪声的情况下
找到到底训练D和G多少次非常困难
(意思是可以训练5次D,训练1次G,但至于准确确定训练多少次D再训练G非常困难)
混合的结果
(不知道这一条什么意思)
使用embedding层
往图像中加入条件信道
控制embedding的维度较低并且上采样去匹配图像信道的大小
在dropout(50%)中提供噪声
在G的几层中用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。