WGAN-GP与WGAN的区别

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: WGAN-GP与WGAN的区别

WGAN-GP与WGAN的区别

相比较WGAN,WGAN-GP不再使用clip野蛮的剪裁鉴别网络的梯度值,而是使用梯度惩罚来使梯度更新平滑,即满足1-lipschitz条件,解决了训练梯度消失梯度爆炸的问题。
WGAN视频讲解参考

1 使用随机方式把真实图片和伪造图片混合在一起。

class RandomWeightedAverage(_Merge):
    """Provides a (random) weighted average between real and generated image samples"""
    def _merge_function(self, inputs):
        alpha = K.random_uniform((32, 1, 1, 1))
        return (alpha * inputs[0]) + ((1 - alpha) * inputs[1])

继续阅读“WGAN-GP与WGAN的区别”本作品采用知识共享署名 4.0 国际许可协议进行许可。

WGAN与DCGAN的区别

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: WGAN与DCGAN的区别

WGAN与DCGAN的区别

1 它们的主要区别在于损失函数不一样,DCGAN使用的是二位交叉熵(binary_crossentropy),WGAN使用的是推土机距离(wasserstein_loss),即目标值与预测值乘积的均值,所以鉴别网络末端不再使用激活函数sigmoid,而是直接输出全连接网络的值。

    def wasserstein_loss(self, y_true, y_pred):
        return K.mean(y_true * y_pred)

这儿需要注意的是:
对于真实的图片,y_true即目标值是-1,参考如下代码。而预测值是0-1,所有预测为真时(鉴别成功),值为-1×1=-1,为伪造的图片时(鉴别失败),值为-1×0=0,即鉴别失败时损失大(0>-1);
对于伪造的图片,y_true即目标值是1,参考如下代码。而预测值是0-1,所有预测为真时(鉴别失败),值为1×1=1,为伪造的图片时(鉴别成功),值为1×0=0,即鉴别失败时损失大(1>0);

        # Adversarial ground truths
        valid = -np.ones((batch_size, 1))
        fake = np.ones((batch_size, 1))

继续阅读“WGAN与DCGAN的区别”本作品采用知识共享署名 4.0 国际许可协议进行许可。