tensorflow2.2_实现DCGAN网络

DCGAN介绍

1. DCGAN原理

    生成对抗网络的核心思想是同时训练两个相互协作、相互竞争的深度神经网络,一个称为生成器(Generator),另一个称为判别器(Discriminator)。生成器用来生成假图片,而判别器用来判断图片的真假。

2. 转置卷积介绍

    普通卷积的卷积操作是一种下采样(Subsampled)操作,就是让图像的大小从大变小,而转置卷积就是一种上采样(Upsampling)操作,让图像大小从小变大。

3. DCGAN模型结构

                判别器
在这里插入图片描述
    判断器的作用是判断一张图片是真还是假,属于二分类问题,所以模型的最后输出只需要1个神经元。
                      生成器
在这里插入图片描述

    而生成器的作用是生成假图片,生成器的输入是一个100维的随机数,其实也可以不一定是100维,任意维度也是可以的。
    总的来说,将原始数据看作真图片,生成器生成的图片看作假图片。将真图片和假图片都传给判别器进行学习,提升判别器的判断能力,同时利用判别器来提升生成器的造假能力。

实现代码

from tensorflow.keras.layers import (
    Dense, BatchNormalization, LeakyReLU, Conv2DTranspose,
    Reshape, Conv2D, Dropout, Flatten
)
import tensorflow as tf
from plot_model import plot_model


# 定义生成器
def generator_model():
    noise_dim = 100
    model = tf.keras.Sequential()
    model.add(Dense(7*7*256, input_shape=(noise_dim,)))
    model.add(BatchNormalization())
    model.add(LeakyReLU())
    model.add(Reshape((7,7,256)))
    model.add(Conv2DTranspose(128, (5,5), strides=(1, 1), padding='same'))
    model.add(BatchNormalization())
    model.add(LeakyReLU())
    model.add(Conv2DTranspose(64, (5,5), strides=(2, 2), padding='same'))
    model.add(BatchNormalization())
    model.add(LeakyReLU())
    model.add(Conv2DTranspose(1, (5,5), strides=(2, 2), padding='same', activation='sigmoid'))
    return model


# 定义判别器
def discriminiator_model():
    model = tf.keras.Sequential()
    model.add(Conv2D(64, (5,5), strides=(2, 2), padding='same', input_shape=[28,28,1]))
    model.add(LeakyReLU())
    model.add(Dropout(0.3))
    model.add(Conv2D(128, (5,5), strides=(2,2), padding='same'))
    model.add(LeakyReLU())
    model.add(Dropout(0.3))
    model.add(Flatten())
    model.add(Dense(1, activation='sigmoid'))
    return model


if __name__ == '__main__':
    discriminiator_model = discriminiator_model()
    generator_model = generator_model()
    plot_model(
        discriminiator_model, to_file='./net_pic/discriminiator_model.png'
    )
    plot_model(
        generator_model, to_file='./net_pic/generator_model.png'
    )
    print('plot_model-------------->')
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值