浅谈DCGAN

本文介绍了DCGAN(深度卷积生成对抗网络),它是GAN的升级版,利用卷积层提升表现。文章阐述了GAN的基本原理,即生成器G试图欺骗判别器D,而D则尽力区分真实与生成图像。DCGAN的四个关键特点是:D网络使用带步长卷积替代池化层,G网络采用上采样,激活函数为LeakyReLU,以及批量归一化。文中还提及在MNIST数据集上实现DCGAN的过程,并提到 Improved GAN 的思想。作者欢迎读者提出指正和建议。
摘要由CSDN通过智能技术生成

要想讲清楚DCGAN就要必须先说GAN,毕竟DCGAN是前者的升级版。

GAN也就是对抗生成网络,所谓对抗生成,也就是有两个网络,一个D(判别),另一个G(生成)。两个网络的目标函数,是不一样的。G网络的目标函数是让生成的图片,在D网络中尽量判别为真,而D网络的目标就是能最大限度的判别出输入图片,是由G网络生成的,还是非生成的。

DCGAN也是这样的思想,只不过加上了卷积层,来更好的实现。有4个特点:

1、D网络模型,使用的是带步长的卷积取代池化层,进行下采样。

2、G网络模型,使用,进行上采样。

3、激活函数为LeakyReLu

4、使用Batch Normalization标准化

下面展示一下用mnist数据集,实现DCGAN。

导入数据,定义真实输入和噪音向量。

import numpy as np
import tensorflow as tf
import pickle
import matplotlib.pyplot as plt

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets()

def get_inputs(noise_dim, image_height, image_width, image_depth):
    inputs_real = tf.placeholder(tf.float32, [None, image_height, image_width, image_depth], name='inputs_real')
    inputs_noise = tf.placeholder(tf.float32, [None, noise_dim], name='inputs_noise')
    return inputs_real, inputs_noise
定义一个生成网络,也就是G网络。注意只在最后使用Tanh激活函数,其他反卷积层都使用relu激活函数。
def get_generator(noise_img, output_dim, is_train=True):

    with tf.variable_scope("generator", reuse=(not is_train)):
        layer1 = tf.layers.dense(noise_img, 4*4*512)
        layer1 = tf.reshape(layer1, [-1, 4, 4, 512])
        #batch normalization
        layer1 = tf.layers.batch_normalization(layer1, training=is_train)
        layer1 = tf.nn.relu(layer1)
        #dropout
        layer1 = tf.nn.dropout(layer1, keep_prob=0.8)
        #conv
        layer2 = tf.layers.conv2d_transpose(layer1, 256, 4, strides=(1, 1), padding='valid')
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值