一、数据

下载地址1 CSDN 0积分下载:https://download.csdn.net/download/sdbyp/87586295
下载地址2 Kaggle:https://www.kaggle.com/datasets/soumikrakshit/anime-faces

二、实现代码

import glob
import torch
from PIL import Image
from torch import nn
from torch.utils import data
from torchvision import transforms
import torch.nn.functional as F
import matplotlib.pyplot as plt
import numpy as npimages_path = glob.glob('./data/anime-faces/*.png')transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
])class FaceDataset(data.Dataset):def __init__(self, images_path):self.images_path = images_pathdef __getitem__(self, index):image_path = self.images_path[index]pil_img = Image.open(image_path)pil_img = transform(pil_img)return pil_imgdef __len__(self):return len(self.images_path)BATCH_SIZE = 32
dataset = FaceDataset(images_path)
data_loader = data.DataLoader(dataset, batch_size=BATCH_SIZE, shuffle=True)
image_batch = next(iter(data_loader))# 定义生成器
class Generator(nn.Module):def __init__(self):super(Generator, self).__init__()self.linear1 = nn.Linear(100, 256*16*16)self.bn1 = nn.BatchNorm1d(256*16*16)self.deconv1 = nn.ConvTranspose2d(256, 128, kernel_size=3, padding=1)  # 输出:128*16*16self.bn2 = nn.BatchNorm2d(128)self.deconv2 = nn.ConvTranspose2d(128, 64, kernel_size=4, stride=2, padding=1)  # 输出:64*32*32self.bn3 = nn.BatchNorm2d(64)self.deconv3 = nn.ConvTranspose2d(64, 3, kernel_size=4, stride=2, padding=1)  # 输出:3*64*64def forward(self, x):x = F.relu(self.linear1(x))x = self.bn1(x)x = x.view(-1, 256, 16, 16)x = F.relu(self.deconv1(x))x = self.bn2(x)x = F.relu(self.deconv2(x))x = self.bn3(x)x = F.tanh(self.deconv3(x))return x# 定义判别器
class Discrimination(nn.Module):def __init__(self):super(Discrimination, self).__init__()self.conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=2)  # 64*31*31self.conv2 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, stride=2)  # 128*15*15self.bn1 = nn.BatchNorm2d(128)self.fc = nn.Linear(128*15*15, 1)def forward(self, x):x = F.dropout(F.leaky_relu(self.conv1(x)), p=0.3)x = F.dropout(F.leaky_relu(self.conv2(x)), p=0.3)x = self.bn1(x)x = x.view(-1, 128*15*15)x = torch.sigmoid(self.fc(x))return xdevice = "cuda:0" if torch.cuda.is_available() else "cpu"
print(device)
gen = Generator().to(device)
dis = Discrimination().to(device)
loss_fn = torch.nn.BCELoss()
gen_opti = torch.optim.Adam(gen.parameters(), lr=0.0001)
dis_opti = torch.optim.Adam(dis.parameters(), lr=0.00001)# 定义可视化函数
def generate_and_save_images(model, epoch, test_noise_):predictions = model(test_noise_).permute(0, 2, 3, 1).cpu().numpy()fig = plt.figure(figsize=(20, 160))for i in range(predictions.shape[0]):plt.subplot(1, 8, i+1)plt.imshow((predictions[i]+1)/2)# plt.axis('off')plt.show()test_noise = torch.randn(8, 100, device=device)#############################
D_loss = []
G_loss = []# 开始训练
for epoch in range(500):D_epoch_loss = 0G_epoch_loss = 0batch_count = len(data_loader)   # 返回批次数for step, img, in enumerate(data_loader):img = img.to(device)size = img.shape[0]random_noise = torch.randn(size, 100, device=device)  # 生成随机输入# 固定生成器,训练判别器dis_opti.zero_grad()real_output = dis(img)d_real_loss = loss_fn(real_output, torch.ones_like(real_output, device=device))d_real_loss.backward()generated_img = gen(random_noise)# print(generated_img)fake_output = dis(generated_img.detach())d_fake_loss = loss_fn(fake_output, torch.zeros_like(fake_output, device=device))d_fake_loss.backward()dis_loss = d_real_loss + d_fake_lossdis_opti.step()# 固定判别器,训练生成器gen_opti.zero_grad()fake_output = dis(generated_img)gen_loss = loss_fn(fake_output, torch.ones_like(fake_output, device=device))gen_loss.backward()gen_opti.step()with torch.no_grad():D_epoch_loss += dis_loss.item()G_epoch_loss += gen_loss.item()with torch.no_grad():D_epoch_loss /= batch_countG_epoch_loss /= batch_countD_loss.append(D_epoch_loss)G_loss.append(G_epoch_loss)print("Epoch:", epoch)generate_and_save_images(gen, epoch, test_noise)plt.plot(range(1, len(D_loss)+1), D_loss, label="D_loss")
plt.plot(range(1, len(D_loss)+1), G_loss, label="G_loss")
plt.xlabel('epoch')
plt.legend()
plt.show()

三、截图结果

epoch0

epoch20

epoch40

epoch60

epoch80

epoch89

DCGAN生成二次元头像实战,Anime Faces数据集下载相关推荐

  1. DCGAN生成二次元头像(Pytorch)

    任务:基于Pytorch搭建DCGAN网络进行训练自动生成二次元头像的模型 文章目录 简介 网络介绍 代码详解 实验结果 参考 简介 好久没发Blog了,发个Pytorch的入门项目一起happy下~ ...

  2. DCGAN 生成二次元头像

    8.  DCGAN    2019/11/10 GAN, 又称生成对抗网络, 也是 Generative Adversarial Nets 的简称 我们知道自然界的生物无时无刻都不在相互对抗进化,生物 ...

  3. 【机器学习PAI实战】—— 玩转人工智能之利用GAN自动生成二次元头像...

    模型训练与在线预测服务.推荐算法四部曲.机器学习PAI实战.更多精彩,尽在 开发者分会场 [机器学习PAI实战]-- 玩转人工智能之综述 [机器学习PAI实战]-- 玩转人工智能之商品价格预测 [机器 ...

  4. 【机器学习PAI实战】—— 玩转人工智能之利用GAN自动生成二次元头像

    前言 深度学习作为人工智能的重要手段,迎来了爆发,在NLP.CV.物联网.无人机等多个领域都发挥了非常重要的作用.最近几年,各种深度学习算法层出不穷, Generative Adverarial Ne ...

  5. 【菜鸟窝免费视频】如何生成数字、人脸和二次元美少女头像(AI生成二次元头像)

    阿里百度人工智能大神精讲的人工智能视频课程,领取地址:https://www.cniao5.com/course/10239 或欢迎勾搭运营小姐姐(微信 id:BT474849)免费领取63讲精品机器 ...

  6. pytorch实现GAN(生成对抗网络)生成二次元头像(附代码)

    目录 GAN基本概念 GAN算法流程 代码实现与讲解 1.准备数据集 代码实现 定义鉴别器 定义生成器 训练 补充 附完整代码 参考链接及书目 GAN基本概念 GAN, 全称Generative Ad ...

  7. 【MindSpore】DCGAN生成漫画头像-----利用华为云modelarts云终端实现

    前言 本人对于 mindspore 一点也不熟悉 但是 对于 学习新事物的心情和动力 一直都很澎湃 本次参加 mindSpore 的 DCGAN生成漫画头像 社区活动,希望能够增长见识 关注 证明图 ...

  8. Mindspore体验dcgan生成漫画头像

    第一章 MindSpore框架的体验与部署 第二章Mindspore体验dcgan生成漫画头像 目录 前言 一.官方文档 二.使用体验 1.下载notebook并打开 GAN基础原理 DCGAN原理 ...

  9. 华为开源自研AI框架昇思MindSpore应用实践:DCGAN生成漫画头像

    目录 一.原理说明 1.GAN基础原理 2.DCGAN原理 二.环境准备 1.进入ModelArts官网 2.使用CodeLab体验Notebook实例 三.数据准备与处理 1.数据处理 四.创建网络 ...

最新文章

  1. 离开网易的转型之路3:热爱测试之路-路上的风景
  2. 一起学nRF51xx 18 -  蓝牙协议栈烧录
  3. 如何提升JavaScript的任务效率?学会后教给你同事
  4. 学习进行中,快over了
  5. hibernate框架学习笔记11:Criteria查询详解
  6. js中获取 table节点各tr及td的内容方法
  7. opencv之cv::Mat像素遍历
  8. Python自动化开发学习的第四周------函数进阶
  9. 闽江学院2015-2016学年下学期《软件测试》课程-第四次博客作业
  10. java导出出行客人到Excel
  11. 【Go系列】Go安装与环境配置,The selected directory is not a valid home for Go SDK
  12. SEO过程中外链的误区
  13. Android安卓的发展史
  14. NXP JN5169使用EEPROM/片上FLASH/随机数/内部NVM
  15. C++多线程:thread_local
  16. JSON-spirit用法
  17. 方程的近似解c语言程序,C语言实现二分法(方程近似解)
  18. BeanFacotry中的ApplicationContext
  19. HTML中img标签的src属性为绝对路径时,在IE中图片可显示,在firefox中不行
  20. word2013打开后一直未响应完美解决方案

热门文章

  1. 淘宝网店利用邮件营销免费引流量
  2. EasyRecovery16MAC苹果版本Photo最新版数据恢复软件
  3. scrapy框架爬取京东前后一周商品信息
  4. oracle数据库offline,oracle中删除offline状态的数据文件
  5. CPU和GPU的关系
  6. 如何识别和调节他人的情绪
  7. If you have database settings to be loaded from a particular profile you may need to activate it
  8. iftop 监控网卡流量
  9. 私域视频号的运营小技巧
  10. SQL SERVER导出模型图