赞
踩
注:因为硬件原因,这次的实验并没有生成图片,但是代码应该是没有问题的,可以参考学习一下。
本次基于DCGAN实现动漫人物的生成。最终的效果可以参考大神**K同学啊**的博客。与上篇文章基于DCGAN生成手写数字的步骤基本一致。
import tensorflow as tf
import numpy as np
import glob,imageio,os,PIL,pathlib
import matplotlib.pyplot as plt
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
data_dir = "E:/tmp/.keras/datasets/car_face_photos"
data_dir = pathlib.Path(data_dir)
pic_paths = list(data_dir.glob('*'))
pic_paths = [str(path) for path in pic_paths]
img_count = len(list(pic_paths))#共21551张图片
plt.figure(figsize=(10, 5))
plt.suptitle("数据示例", fontsize=15)
for i in range(40):
plt.subplot(5, 8, i + 1)
plt.xticks([])
plt.yticks([])
# 显示图片
images = plt.imread(pic_paths[i])
plt.imshow(images)
plt.show()
查看图片:
数据预处理:
1.归一化到[-1,1]之间
2.调整图片大小为[64,64]
3.将数据按照batch_size划分开,并打乱
#数据处理
def preprocess_image(image):
image = tf.image.decode_jpeg(image,channels=3)
image = tf.image.resize(image,[64,64])
return (image - 127.5)/127.5
def load_and_preprocess_image(path):
image = tf.io.read_file(path)
return preprocess_image(image)
path_ds = tf.data.Dataset.from_tensor_slices(pic_paths)
image_ds = path_ds.map(load_and_preprocess_image,num_parallel_calls=tf.data.experimental.AUTOTUNE)
buffer_size = 60000
batch_size = 256
dataset = image_ds.shuffle(buffer_size).batch(batch_size)
生成器采用tf.keras.layers.Conv2DTranspose(上采样层)从噪声数据中产生图片。以一个使用该种子作为输入的 Dense 层开始,然后多次上采样直到达到所期望的 64x64x3 的图片尺寸。
除了最后一层使用tanh作为激活函数外,其余的都采用LeakyReLU作为激活函数。
def Geberator_model():
model = tf.keras.Sequential([])
model.add(tf.keras.layers.Dense(4*4*1024,use_bias=False,input_shape=(100,)))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.LeakyReLU())
model.add(tf.keras.layers.Reshape((4,4,1024)))
assert model.output_shape == (None,4,4,1024)
#1
model.add(tf.keras.layers.Conv2DTranspose(512,(5,5)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。