对抗神经网络(二)——DCGAN

本文介绍了DCGAN(深度卷积生成对抗网络),它将卷积技术应用于GAN模型,改进了生成器和判别器的结构。在生成器中,使用ReLU和Tanh激活函数,去除全连接层,采用反卷积;判别器则用转置卷积替代池化层,并使用LeakyReLU激活函数。DCGAN还引入批量归一化,并使用Adam优化算法。通过人脸数据集的训练,随着Epoch增加,模型逐渐生成更清晰的人脸图像。然而,在训练过程中可能会出现模型爆炸问题,需要进一步优化解决。
摘要由CSDN通过智能技术生成

一、DCGAN介绍

DCGAN即使用卷积网络的对抗网络,其原理和GAN一样,只是把CNN卷积技术用于GAN模式的网络里,G(生成器)网在生成数据时,使用反卷积的重构技术来重构原始图片。D(判别器)网用卷积技术来识别图片特征,进而做出判别。同时,CDGAN中的卷积神经网络也做了一些结构的改变,以提高样本的质量和收敛速度。

DCGAN的generator网络结构图如下:

  • G网中使用ReLU作为激活函数,最后一层使用Tanh作为激活函数。
  • 去掉了FC层,使网络变为全卷积网络。

DCGAN的discriminator网络结构图如下:

  • D中取消所有的池化层,使用转置卷积(transposed convolutional layer)并且步长大于等于2进行上采样。
  • D网中也加入stride的卷积代替pooling。
  • 在D网和G网中均使用批量归一化(batch normalization),而在最后一层时通常不会使用batch normalization,这是为了保证模型能够学习到数据的正确均值和方差。
  • D网络中使用LeakyReLU作为激活函数。
  • DCGAN中换成了两个卷积神经网络(CNN)的G和D,可以刚好的学习对输入图像层次化的表示,尤其在生成器部分会有更好的模拟效果。DCGAN在训练过程中会使用Adam优化算法。

三、网络实现

以人脸数据为例

1、环境配置(Environments

  • window10
  • python3.6.4
  • TensorFlow1.13.1

2、数据准备

数据集:face-swap

数据可以从网上自行下载,或者利用自己的数据,这里对数据的没有严格要求。我是采用了网络上的数据集,这里给出数据的下载地址:https://anonfile.com/p7w3m0d5be/face-swap.zip将解压的数据分别放入文件夹A和文件夹B

3、超参数设置(Hyper-Parameters

  • Image Size = 64x64 
  • Batch Size = 64 
  • Learning Rate = 0.00005
  • Adam_beta1 = 0.5
  • z_dim = 100
  • Epoch = 500 
# 导入需要的包
from PIL import Image  # Image 用于读取影像
#from skimage import io  # io也可用于读取影响,效果比Image读取的更好一些

import tensorflow as tf  # 用于构建神经网络模型
import matplotlib.pyplot as plt  # 用于绘制生成影像的结果
import numpy as np  # 读取影像
import os  # 文件夹操作
import time  # 计时

# 设置相关参数
is_training = True
input_dir = "./face/"  # 原始数据的文件夹路径

# 设置超参数 hyper parameters
batch_size = 64
image_width = 64
image_height = 64
image_channel = 3
data_shape = [64, 64, 3]
data_length = 64 * 64 * 3

z_dim = 100
learning_rate = 0.00005
beta1 = 0.5
epoch = 500

4、读取数据并将原始数据数据resize成64*64*3的格式,原始图像大小为256*256*3

# 读取数据的函数
def prepare_data(input_dir, floder):
    '''
    函数功能:通过输入图像的路径,读取训练数据
    :参数 input_dir: 图像数据所在的根目录,即"./face"
    :参数 floder: 图像数据所在的子目录, 即"./face/A"
    :return: 返回读取好的训练数据
    '''

    # 遍历图像路径,并获取图像数量
    images = os.listdir(input_dir + floder)
    image_len = len(images)

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值