昇思Mindspore25天学习打卡Day20:DCGAN生成漫画头像

news2024/9/24 1:20:18

昇思Mindspore25天学习打卡Day20:DCGAN生成漫画头像

  • 1 GAN基础原理
  • 2 DCGAN原理
  • 3 数据准备与处理
    • 数据处理
  • 4 构造网络
    • 4.1 生成器
    • 4.2 判别器
  • 5 模型训练
    • 损失函数
    • 优化器
    • 训练模型
  • 6 结果展示
  • 7 训练结束打上标签和时间

在下面的教程中,我们将通过示例代码说明DCGAN网络如何设置网络、优化器、如何计算损失函数以及如何初始化模型权重。在本教程中,使用的动漫头像数据集共有70,171张动漫头像图片,图片大小均为96*96.

1 GAN基础原理

这部分原理介绍参考Link:GAN图像生成

2 DCGAN原理

DCGAN(深度卷积对抗生成网络,Deep Convolutional Generative Adversarial Networks)是GAN的直接扩展。不同之处在于,DCGAN会分别在判别器和生成器中使用卷积和转置卷积层。

它最早由Radford等人在论文Link:Unsupervised Representation Learning With Deep Convolutional Generative Adversarial Networks中进行描述。判别器由分层的卷积层、BatchNorm层和LeakReLU激活层组成。输入是3x64x64的图像,输出是该图像为真图像的概率。生成器则是由转置卷积层、BatchNorm层和ReLU激活层组成。输入是标准正态分布中提取出的隐向量z,输出是3x64x64的RGB图像。

本教程将使用动漫头像数据集来训练一个生成式对抗网络,接着使用该网络生成动漫头像图片。

3 数据准备与处理

首先我们将数据集下载到指定目录下并解压。示例代码如下:
在这里插入图片描述

数据处理

在这里插入图片描述
定义 create_dataset_imagenet 函数对数据进行处理和增强操作.

在这里插入图片描述
通过 create dict iterator 函数将数据转换成字典迭代器,然后使用 matplotlib 模块可视化部分训练数据。
在这里插入图片描述

4 构造网络

当处理完数据后,就可以来进行网络的搭建了。按照DCGAN论文中的描述,所有模型权重均应从 mean为0,sigma为0.02的正态分布中随机初始化。

4.1 生成器

生成器 G的功能是将隐向量z 映射到数据空间。由于数据是图像,这一过程也会创建与真实图像大小相同的 RG8 图像。在实践场景中,该功能是通过一系列
Conv2dTranspose 转置卷积层来完成的,每个层都与 BatchNorm2d 层和 ReLu 激活层配对,输出数据会经过 tanh 函数,使其返回[-1,1]的数据范围内。

DCGAN论文生成图像如下所示:

在这里插入图片描述

  • 图片来源: Liuk:Unsupervised Representation Learning With Deep Convolutional Generative Adversarial Networks
    我们通过输入部分中设置的 nz、ngf 和 nc 来影响代码中的生成器结构。 nz 是隐向量 z的长度,
    ngf 与通过生成器传播的特征图的大小有关,nc 是输出图像中的通道数。
    以下是生成器的代码实现:
    在这里插入图片描述

4.2 判别器

如前所述,判别器D是一个二分类网络模型,输出判定该图像为真实图的概率。通过一系列的 conv2d、
BatchNorm2d 和 LeakyReLu 层对其进行处理,最后通过 Sigmoid 激活函数得到最终概率。
DCGAN论文提到,使用卷积而不是通过池化来进行下采样是一个好方法,因为它可以让网络学习自己的池化特征。
判别器的代码实现如下:
在这里插入图片描述

5 模型训练

损失函数

当定义了 D和G后,接下来将使用Mindspore中定义的二进制交叉熵损失函数Link:BCELoss
在这里插入图片描述

优化器

这里设置了两个单独的优化器,一个用于D,另一个用于G。这两个都是 1r=0.8002 和 beta1 = 0.5 的Adam优化器。
在这里插入图片描述

训练模型

训练分为两个主要部分:训练判别器和训练生成器.

  • 训练判别器
    训练判别器的目的是最大程度地提高判别图像真伪的概率。按照Goodfelow的方法,是希望通过提高其随机梯度来更新判别器,所以我们要最大化
    l o g D ( x ) + l o g ( 1 − D ( G ( z ) ) logD(x)+log(1-D(G(z)) logD(x)+log(1D(G(z))的值,
  • 训练生成器
    如DCGAN论文所述,我们希望通过最小化 l o g ( 1 − D ( G ( z ) ) ) log(1- D(G(z))) log(1D(G(z)))来训练生成器,以产生更好的虚假图像,。

在这两个部分中,分别获取训练过程中的损失,并在每个周期结束时进行统计,将 fixed_noise 批量推送到生成器中,以直观地跟踪 G的训练进度.

下面实现模型训练正向逻辑:
在这里插入图片描述
循环训练网络,每经过50次迭代,就收集生成器和判别器的损失,以便于后面绘制训练过程中损失函数的图像。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6 结果展示

运行下面代码,描绘 D和G损失与训练迭代的关系图
在这里插入图片描述
可视化训练过程中通过隐向量 fixed noise 生成的图像。
在这里插入图片描述
在这里插入图片描述
从上面的图像可以看出,随着训练次数的增多,图像质量也越来越好。如果增大训练周期数,当 num_epochs 达到50以上时,生成的动漫头像图片与数据集中的较为相似,下面我们通过加载生成器网络模型参数文件来生成图像,代码如下:

7 训练结束打上标签和时间

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1910560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Linux]安装+使用虚拟机

首先下载(提取码 : ssjf)虚拟机(应该是必须要下载17的了 , 我刚开始下载了15,16的在解决了不兼容的问题后频繁出现蓝屏的 ) 刚开始我遇见了 小问题 --》 在查看了以下两篇blog就解决了 虚拟机无法打开,…

STM32 IIC详解(软件模拟)

目录 一、IIC协议基本原理 1.IIC协议概述 2.时序图分析 二、代码分析 1.IIC初始化 2.IIC起始信号 3.IIC发送数据 4.获取应答信号 5.读一个字节 6.产生ACK应答 7.不产生ACK应答 IIC(Inter-Integrated Circuit)在嵌入式系统中是一种常见的数据通…

考研数学130+的强化复习规划(附暑假经验分享)

考研数学强化是最关键的提高阶段! 有的同学强化阶段做的好,甚至能冲击到130这个分数!所以,大家一定要重视考研数学强化,特别是暑期两个月的时间。 先说一下强化误区! 很多同学基本上就是6月结束基础&…

如何压缩视频大小不改变画质,视频太大怎么压缩变小

在现代生活中,视频已经成为我们记录生活、分享快乐的重要工具。但随之而来的问题就是视频文件体积过大,不仅占用大量存储空间,还难以在社交平台上快速分享。别担心,下面我就来教大家几种简单有效的方法,让视频文件轻松…

春秋杯 snack入土为安的第二天

不嘻嘻,签到题做了两天,先用pyinstxtractor.py(找最新版本。。红温)把exe转化为pyc,用在线反编译pycdc来反编译,最后的key在一个文件夹里key.pyc切记用python3.3版本(红温)。 # 假设…

在 PostgreSQL 里如何处理数据的版本跟踪和回滚?

文章目录 一、事务二、保存点三、使用版本控制扩展四、审计表和触发器五、使用时间戳列六、比较和还原数据七、考虑数据备份和恢复八、结论 在数据库管理中,数据的版本跟踪和回滚是非常重要的功能,有助于在数据操作出现错误或需要回滚到特定状态时进行有…

RAG的学习与实践——LangChain和LlamaIndex学习笔记

RAG RAG(Retrieval Augmented Generation)系统,代表“检索增强生成”。RAG由五个关键步骤组成: 加载:这是指将数据从其所在位置(无论是文本文件、PDF、其他网站、数据库还是 API)获取到您的管道中。LlamaHub提供数百…

自定义@AnonymousAccess注解

一.目的: 自定义AnonymousAccess注解,可以直接在controller上添加该注解使请求绕过权限验证进行匿名访问,便于快速调用调试以及部分不需要进行安全验证的接口。而不是每次都需要去SecurityConfig文件中进行修改。 二.流程: 三.实…

软件项目运维服务方案(Word原件)

1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 软件文档全套下载:本文末个人名片直接获取或者进主页。

【峟思】智能一体化水位监测系统的创新应用与优势解析

在全球气候变化与城市化加速的双重挑战下,极端天气事件频发,城市内涝、河流泛滥等水位灾害对社会安全和经济稳定构成了严峻威胁。为有效应对这些挑战,智能一体化水位监测系统应运而生,凭借其高效、精准、智能的技术特性&#xff0…

PostgreSQL 里怎样解决多租户数据隔离的性能问题?

文章目录 一、多租户数据隔离的性能问题分析(一)大规模数据存储和查询(二)并发访问和锁争用(三)索引维护成本高(四)资源分配不均 二、解决方案(一)数据分区&a…

行至第11年,追光动画距离“中国皮克斯”还有多远?

百花奖提名名单公布后,入围最佳影片大奖的唯一一部动画电影《长安三万里》,竟然成为了获奖呼声最高的电影。 去年暑期档上映的《长安三万里》以18.24亿票房一跃成为中国影史动画电影票房亚军,虽然这个数据在今年春节档被《熊出没逆转时空》超…

【苍穹外卖】Day2 手把手敲完细节

目录 1. 新增员工 1.1 需求分析和设计 1.2 代码开发 ①定义DTO类:(在sky-pojo里) ②EmployeeController中创建新增员工方法save() ③EmployeeService里声明save方法(altenter) ④EmployeeServiceImpl中实现save方法 ⑤在E…

喜讯丨美格智能通过国际EcoVadis平台认证企业社会责任并荣获承诺奖章,彰显可持续发展实力

作为全球领先的无线通信模组及解决方案提供商,美格智能在社会责任领域再创新高。近日,美格智能凭借在企业社会责任和可持续性采购发展方面的卓越表现,通过国际在线权威评价机构EcoVadis对公司环境、劳工与人权、商业道德、可持续采购等方面审…

线性回归笔记

https://blog.51cto.com/u_16213589/7682076 残差图 多元回归-最小二乘法-残差分析笔记 一.多元线性回归模型的假设 我们需要进行以下六个假设,这些假设是经典的多元线性回归模型有效的前提: 1、因变量Y和自变量X1,X2,…&#…

文献阅读:基于测序的空间转录组方法的系统比较

文献介绍 文献题目: Systematic comparison of sequencing-based spatial transcriptomic methods 研究团队: 田鲁亦(广州实验室)、刘晓东(西湖大学) 发表时间: 2024-07-04 发表期刊&#xff…

Python自动化测试系列[v1.0.0][自动化测试报告]

BeautifulReport测试报告 获取BeautifulReport模块 BeautifulReport 源码Clone地址为 BeautifulReport ,其中BeautifulReport.py和其template是我们需要的 BeautifulReport 如下代码是BeautifulReport.py的源码,其中几个注释的地方需要注意&#xff…

C编程使用clock函数实现计算一段代码的执行时间:毫秒单位

一、函数原型 在Linux系统中&#xff0c;clock()函数是一个非常重要且常用的函数&#xff0c;它主要用于测量程序运行的CPU时间。这个函数是C/C语言中的一个标准函数&#xff0c;其原型定义在<time.h>头文件中。以下是对clock()函数的详细解析&#xff1a; #include <…

Khoj 一个处在免费领域应用最佳的AI对话工具

文章目录 1. 了解 khoj1.1 文档1.2 价格1.3 代理人 2. 特点3. 应用3.1 全文搜索3.1.1 ChatGPT没有3.1.2 Khoj 3.2 APP 对话3.2.1 khoj & whatsApp3.2.2 ChatGPT 3.3 摘要总结3.3.1 ChatGPT3.3.2 Khoj 3.4 图片分析3.4.1 chatgpt3.4.2 khoj 3.5 格式转换3.5.1 ChatGPT3.5.2 …

基于STM主题模型的主题提取分析-完整代码数据

直接看结果: 代码: import re from collections import defaultdict import random import matplotlib.pyplot as plt import numpy as npimport pandas as pd import numpy as np import re from sklearn.feature_extraction.text import CountVectorizer from nltk.corpus…