传统GAN
判别器loss
d_loss = d_loss_real + d_loss_fake
d_loss_real = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_real, labels=tf.ones_like(d_logits_real) * (1 - smooth)))
d_loss_fake = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake, labels=tf.zeros_like(d_logits_fake)))
生成器loss
g_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake, labels=tf.ones_like(d_logits_fake)))
训练技巧
在GAN训练的过程中,为更好地泛化,一般会使用smooth参数将real的标签设为略小于1的值,如0.9(为了增强判别器discriminator的泛化能力,可以将labels设为0.9,而不是1.0);而对于生成器生成的fake,输入判别器的标签设为0.
WGAN
判别器
D_real = netD(inputPostive)
D_fake = netD(inputNegative)
D_loss = -D_real + D_fake
生成器
G_loss = -netD(inputNegative)
训练技巧
训练次数
一般来说,Discrimnator要训练的比Genenrator多:比如训练五次Discrimnator,再训练一次Genenrator。
判别器学习率
判别器学习速率不能过大,一般要比Genenrator的速率小一点。
优化器
Optimizer的选择不能用基于动量法的,如Adam和momentum。
可使用RMSProp或者SGD。
其他
判别器最后一层去掉sigmoid
生成器和判别器的loss不取log
每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c
不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行
LSGAN----Least Squares GANs
判别器
生成器
设置
常数a、b分别表示真实图片和生成图片的标记;c是生成器为了让判别器认为生成图片是真实数据而定的值。
作者设置a=c=1,b=0。
来源:CSDN
作者:雾暗篷
链接:https://blog.csdn.net/weixin_42847126/article/details/104010033