ACGAN与CGAN的区别

本文详细对比了ACGAN与CGAN两种生成对抗网络的主要区别。ACGAN在输入时同样混入label,但在鉴别网络中不再直接混入label,而是通过反馈label信息提升鉴别能力。此外,ACGAN采用了深层卷积网络,生成的图片边缘更连续,视觉效果更佳。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ACGAN与CGAN的区别如下


1 与CGAN一样的是,在生成网络的输入都混入label;
2 不一样的是在鉴别网络输入时,ACGAN不再混入label,而是在鉴别网络的输出时,把label作为target进行反馈来提交给鉴别网络的学习能力。
3 另一个不一样的是,生成网络和鉴别网络的网络层不再是CGAN的全连接,而是ACGAN的深层卷积网络(这是在DCGAN开始引入的改变),卷积能够更好的提取图片的特征值,所有ACGAN生成的图片边缘更具有连续性,感觉更真实。


如下生成网络model,和CGAN的一模一样。

        noise = Input(shape=(self.latent_dim,))
        label = Input(shape=(1,), dtype='int32')
        label_embedding = Flatten()(Embedding(self.num_classes, 100)(label))
 
        model_input = multiply([noise, label_embedding])
        img = model(model_input)

如下鉴别网络model,传入还是img,但是输出包含两个部分:
1 validity,即鉴别图片是不是伪造的结果。
2 label,使用softmax激活,输出10维的结果即属于哪个数字。

        img = Input(shape=self.img_shape)
 
        # Extract feature representation
        features = model(img)
 
        # Determine validity and label of the image
        validity = Dense(1, activation="sigmoid")(features)
        label = Dense(self.num_classes, activation="softmax")(features)
 
        return Model(img, [validity, label])

所以在鉴别网络或生成网络训练的时候,提供了target img_labels和sampled_labels。

            # Train the discriminator
            d_loss_real = self.discriminator.train_on_batch(imgs, [valid, img_labels])
            d_loss_fake = self.discriminator.train_on_batch(gen_imgs, [fake, sampled_labels])
            d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)
 
            # ---------------------
            #  Train Generator
            # ---------------------
 
            # Train the generator
            g_loss = self.combined.train_on_batch([noise, sampled_labels], [valid, sampled_labels])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值