使 用 D C G A N 生 成 动 漫 人 物 头 像 使用DCGAN生成动漫人物头像 使用DCGAN生成动漫人物头像

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import glob
import os
os.listdir('../input/anime-faces/data/data')[:10]
print('Tensorflow version: {}'.format(tf.__version__))
image_path = glob.glob('../input/anime-faces/data/data/*.png')
len(image_path)
def load_preprosess_image(path):image = tf.io.read_file(path)image = tf.image.decode_png(image, channels=3)
#    image = tf.image.resize_with_crop_or_pad(image, 256, 256)image = tf.cast(image, tf.float32)image = (image / 127.5) - 1return image
image_ds = tf.data.Dataset.from_tensor_slices(image_path)
AUTOTUNE = tf.data.experimental.AUTOTUNE
image_ds = image_ds.map(load_preprosess_image, num_parallel_calls=AUTOTUNE)
image_ds
BATCH_SIZE = 64
image_count = len(image_path)
image_ds = image_ds.shuffle(image_count).batch(BATCH_SIZE)
image_ds = image_ds.prefetch(AUTOTUNE)
def generator_model():model = tf.keras.Sequential()model.add(layers.Dense(8*8*256, use_bias=False, input_shape=(100,)))model.add(layers.BatchNormalization())model.add(layers.LeakyReLU())model.add(layers.Reshape((8, 8, 256)))   #8*8*256model.add(layers.Conv2DTranspose(128, (5, 5), strides=(1, 1), padding='same', use_bias=False))model.add(layers.BatchNormalization())model.add(layers.LeakyReLU())             #8*8*128model.add(layers.Conv2DTranspose(64, (5, 5), strides=(2, 2), padding='same', use_bias=False))model.add(layers.BatchNormalization())model.add(layers.LeakyReLU())             #16*16*128model.add(layers.Conv2DTranspose(32, (5, 5), strides=(2, 2), padding='same', use_bias=False))model.add(layers.BatchNormalization())model.add(layers.LeakyReLU())             #32*32*32model.add(layers.Conv2DTranspose(3, (5, 5), strides=(2, 2), padding='same', use_bias=False, activation='tanh'))#64*64*3return model
generator = generator_model()noise = tf.random.normal([1, 100])
generated_image = generator(noise, training=False)plt.imshow((generated_image[0, :, :, :3] + 1)/2)
def discriminator_model():model = tf.keras.Sequential()model.add(layers.Conv2D(32, (5, 5), strides=(2, 2), padding='same',input_shape=[64, 64, 3]))model.add(layers.LeakyReLU())model.add(layers.Dropout(0.3))      # 32*32*32model.add(layers.Conv2D(64, (5, 5), strides=(2, 2), padding='same'))model.add(layers.BatchNormalization())model.add(layers.LeakyReLU())model.add(layers.Dropout(0.3))      # 16*16*64model.add(layers.Conv2D(128, (5, 5), strides=(2, 2), padding='same'))model.add(layers.BatchNormalization())model.add(layers.LeakyReLU())
#    model.add(layers.Dropout(0.3))      # 8*8*128model.add(layers.Conv2D(256, (5, 5), strides=(2, 2), padding='same'))model.add(layers.BatchNormalization())model.add(layers.LeakyReLU())       # 4*4*256model.add(layers.GlobalAveragePooling2D())model.add(layers.Dense(1024))model.add(layers.BatchNormalization())model.add(layers.LeakyReLU())model.add(layers.Dense(1))return model
discriminator = discriminator_model()
decision = discriminator(generated_image)
print(decision)
cross_entropy = tf.keras.losses.BinaryCrossentropy(from_logits=True)
def discriminator_loss(real_output, fake_output):real_loss = cross_entropy(tf.ones_like(real_output), real_output)fake_loss = cross_entropy(tf.zeros_like(fake_output), fake_output)total_loss = real_loss + fake_lossreturn total_loss
def generator_loss(fake_output):return cross_entropy(tf.ones_like(fake_output), fake_output)
generator_optimizer = tf.keras.optimizers.Adam(1e-5)
discriminator_optimizer = tf.keras.optimizers.Adam(1e-5)
EPOCHS = 800
noise_dim = 100
num_examples_to_generate = 4seed = tf.random.normal([num_examples_to_generate, noise_dim])
@tf.function
def train_step(images):noise = tf.random.normal([BATCH_SIZE, noise_dim])with tf.GradientTape() as gen_tape, tf.GradientTape() as disc_tape:generated_images = generator(noise, training=True)real_output = discriminator(images, training=True)fake_output = discriminator(generated_images, training=True)gen_loss = generator_loss(fake_output)disc_loss = discriminator_loss(real_output, fake_output)gradients_of_generator = gen_tape.gradient(gen_loss, generator.trainable_variables)gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.trainable_variables)generator_optimizer.apply_gradients(zip(gradients_of_generator, generator.trainable_variables))discriminator_optimizer.apply_gradients(zip(gradients_of_discriminator, discriminator.trainable_variables))
def generate_and_save_images(model, epoch, test_input):# Notice `training` is set to False.# This is so all layers run in inference mode (batchnorm).predictions = model(test_input, training=False)fig = plt.figure(figsize=(6, 6))for i in range(predictions.shape[0]):plt.subplot(2, 2, i+1)plt.imshow((predictions[i, :, :, :] + 1)/2)plt.axis('off')#    plt.savefig('image_at_epoch_{:04d}.png'.format(epoch))plt.show()
def train(dataset, epochs):for epoch in range(epochs):for image_batch in dataset:train_step(image_batch)
#            print('.', end='')
#        print()if epoch%10 == 0:generate_and_save_images(generator,epoch + 1,seed)generate_and_save_images(generator,epochs,seed)
train(image_ds, EPOCHS)

使用DCGAN生成动漫人物头像相关推荐

  1. pytorch实现DCGAN生成动漫人物头像

    pytorch实现DCGAN生成动漫人物头像 DCGAN原理 参考这一系列文章 数据集 21551张64*64动漫人物头像 生成效果 训练1个epoch(emm-) 训练10个epoch(起码有颜色了 ...

  2. Pytorch 使用DCGAN生成动漫人物头像 入门级实战教程

    有关DCGAN实战的小例子之前已经更新过一篇,感兴趣的朋友可以点击查看 Pytorch 使用DCGAN生成MNIST手写数字 入门级教程 有关DCGAN的相关原理:DCGAN论文解读-----DCGA ...

  3. pytorch学习——DCGAN——生成动漫人物头像

    本文参考官方博客以及李宏毅老师讲解. 另参考https://blog.csdn.net/sunqiande88/article/details/80219842 关于其中转置卷积和卷积的问题,会另外开 ...

  4. python 动漫卡通人物图片大全,『TensorFlow』DCGAN生成动漫人物头像_下

    一.计算图效果以及实际代码实现 计算图效果 实际模型实现 相关介绍移步我的github项目. 二.生成器与判别器设计 生成器 相关参量, 噪声向量z维度:100 标签向量y维度:10(如果有的话) 生 ...

  5. 『TensorFlow』DCGAN生成动漫人物头像_下

    『TensorFlow』以GAN为例的神经网络类范式 『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上 『TensorFlow』通过代码理解gan网络_中 一.计算 ...

  6. 【GAN实战项目:DCGAN in Tensorflow生成动漫人物头像】代码学习

    目录 一.爬虫代码 二.头像截取 三.训练 四.遇到的问题及处理方法 五.生成效果 DCGAN的原理 和GAN是一样的,只是把G和D换成了两个卷积神经网络(CNN).但不是直接换就可以了,DCGAN对 ...

  7. 深度学习之基于DCGAN实现动漫人物的生成

    注:因为硬件原因,这次的实验并没有生成图片,但是代码应该是没有问题的,可以参考学习一下. 本次基于DCGAN实现动漫人物的生成.最终的效果可以参考大神**K同学啊**的博客.与上篇文章基于DCGAN生 ...

  8. 如何通过DCGAN实现动漫人物图像的自动生成?

    深度学习领域在近几年取得了重大突破,其中大部分研究成果都基于感知技术,计算机通过模仿人类的思维方式,感知物体.识别内容.生成对抗网络的理念由Goodfellow于2014年提出的,它的发展历程只有六年 ...

  9. 基础 | 如何通过DCGAN实现动漫人物图像的自动生成?

    点击上方"机器学习与生成对抗网络",关注"星标" 获取有趣.好玩的前沿干货! 文章来源:淘系技术 背景 基于生成对抗网络(GAN)的动漫人物生成近年来兴起的动漫 ...

最新文章

  1. java对于app版本号比较,Java对比APP版本号大小
  2. Activiti实战. 导读
  3. 李彦宏被提名工程院院士,而美女教授颜宁落选,当选为美国院士
  4. JQueryEasyUI validatebox 扩展其自带验证方法
  5. 2016年第七届蓝桥杯C/C++ A组国赛 —— 第三题:打靶
  6. java字节码指令简介(仅了解)
  7. 深度解析国内首个云原生数据库POLARDB的“王者荣耀”
  8. springboot 关于 Class path contains multiple SLF4J bindings.警告的解决
  9. java mysql存储过程_JAVA调用MySQL存储过程
  10. ElasticSearch之基于地理位置的搜索
  11. 做餐饮服务员有前途吗
  12. jackson set properties to default value (取消让jackson 赋予默认值)
  13. 常见linux服务器存储空间,全面了解linux服务器的常用命令总结
  14. Resource Hacker-资源替换工具
  15. 开发中使用第三方工具/服务
  16. 【平衡小车制作】(二)电机驱动(超详解)
  17. php木马伪装成图片,木马伪装图片运行的技巧
  18. 北航计算机考研经验_2018届考研
  19. 华为更新云空间配置 显示无法连接服务器,更新服务器连接失败
  20. Python-Flask-2023.1.22

热门文章

  1. 职场寒冬 请不要让码农只活在青春里~
  2. 直观了解图片的三通道像素值在三维数组中的表示(python)
  3. ps cs6 抠名字
  4. 中国人工智能研究领域开拓者刘叙华教授逝世,享年84岁
  5. Linux系统开启IPv6任播(anycast)地址
  6. 文件描述符与socket连接
  7. 【oracle】user_cons_columns表中position的具体含义
  8. 我的第一篇CSDN博客--微信小程序
  9. 安卓案例分析——实现简单的手机防盗软件
  10. chatgpt系列文章-23.2.15(主要还在发现chatgpt的不足,偏探索,像报告)