如何基于DCGAN网络模型使用tensorflow生成仿真的人脸图像?(CelebA数据集)
文章目录
- 如何基于DCGAN网络模型使用tensorflow生成仿真的人脸图像?(CelebA数据集)
-
- 1.GAN网络模型的设计思想?
- 2.数据集的准备?
- 3.如何一步一步构建我们的人脸fake模型?
-
- 1.相关库的导入。
- 2.设置训练图片数据集路径,拿到图片数量。设置好batch_size(读取数据的批次大小),z_dim(fake图片的原始随机点,后经过生成器(Generator)生成fake图片。),输入图片的宽和高,以及输出路径。
- 3.设置X(输入量),noise(随机噪声), is_training(是否进行训练,便于模型的保存和加载)的变量格式。
- 4.定义相关的激活函数,损失函数。
- 5.定义判别器(Discriminator)的网络结构。
- 6.定义生成器(Generator)的网络结构:
- 7.得到fake的假人脸图片,==经判别器映射之后的输入图片,未经sigmoid激活的输入图片的输出层数据,以及返回generator,discriminator中所有可训练的变量。==
- 8.定义生成器和判别器的Loss函数。
- 9.定义更新训练操作:
- 10.定义读取图片函数:
- 11.定义合并fake图片的函数:
- 12.定义session(),fake的原始随机点,loss以及samples。
- 13.写for in in range( )大循环,进行迭代训练。
- 14.保存模型
- 15.训练过程的GIF动态展示
1.GAN网络模型的设计思想?

GAN中的核心网络结构:
- 生成器(Generator):记作G,通过对大量样本的学习,能生成一些以假乱真的样本。
- 判别器(Discriminator):记作D,接受真实样本和G生成的样本,并进行判别和区分。
- G和D相互博弈,通过学习,G的生成能力和D的判别能力都逐渐增强并收敛。
【注】:GAN在实际的训练中,有很多苛刻的细节要求需要注意。
2.数据集的准备?
CelebA人脸图片数据集,共202599张人脸图片,图片的宽高比=178:218。(本文涉及的数据集与代码均已上传,链接提取密码:21re)
3.如何一步一步构建我们的人脸fake模型?
1.相关库的导入。
import tensorflow as tf
import numpy as np
import os
from imageio import imread, imsave
import cv2
import glob
2.设置训练图片数据集路径,拿到图片数量。设置好batch_size(读取数据的批次大小),z_dim(fake图片的原始随机点,后经过生成器(Generator)生成fake图片。),输入图片的宽和高,以及输出路径。
dataset = 'celeba' # CelebA的图片目录路径
images = glob.glob(os.path.join(dataset, '*.*')) # 对celeba图片目录下的所有图片进行遍历
print(len(images))
batch_size = 100#批次大小
z_dim = 100 # 每张图片的噪声维度
WIDTH = 64 # 输入图片的宽
HEIGHT = 64 # 输入图片的高
OUTPUT_DIR = 'samples_' + dataset # 输出路径
if not os.path.exists(OUTPUT_DIR):
os.mkdir(OUTPUT_DIR)
3.设置X(输入量),noise(随机噪声), is_training(是否进行训练,便于模型的保存和加载)的变量格式。
X = tf.placeholder(dtype=tf.float32, shape=[None, HEIGHT, WIDTH, 3], name='X')#None,图片的编号
noise = tf.placeholder(dtype=tf.float32, shape=[None, z_dim], name='noise') # noise是二维结构,与GAN的网络模型有关
is_training = tf.placeholder(dtype=tf.bool, name='is_training') # 是否能够训练
4.定义相关的激活函数,损失函数。
def lrelu(x, leak=0.2):
return tf.maximum(x, leak * x) # 优化relu激活函数
def sigmoid_cross_entropy_with_logits(x, y):
return tf.nn.sigmoid_cross_entropy_with_logits(logits=x, labels=y)#未处理的x,标签y
5.定义判别器(Discriminator)的网络结构。
def discriminator(image, reuse=None, is_training=is_training):
momentum = 0.9 # 指数平滑移动序列预测偏量
with tf.variable_scope('discriminator', reuse=reuse): # reuse是否进行迭代
h0 = lrelu(tf.layers.conv2d(image, kernel_size=5, filters=64, strides=2, padding='same'))
# strides在生成器中,width = width/2,height = height/2代替卷积网络的池化层操作。
h1 = tf.layers.conv2d(h0, kernel_size=5, filters=128, strides=2, padding='same')
h1 = lrelu(tf.contrib.layers.batch_norm(h1, is_training=is_training, decay=momentum))
h2 = tf.layers.conv2d(h1, kernel_size=5, filters=256, strides=2, padding='same')
h2 = lrelu(tf

本文介绍如何使用DCGAN网络模型和TensorFlow生成仿真的人脸图像,包括GAN网络模型的设计思想、CelebA数据集的准备及逐步构建人脸生成模型的过程。
最低0.47元/天 解锁文章





