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

昇思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.mzph.cn/web/42454.shtml

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

相关文章

为什么裁员先裁技术人员?网友给答复

网友1:技术岗本身就是项目制的,项目完成,后续项目运营的收益与技术无关。之前是项目多,所以收益持续走高,现在都在减项目,自然先减技术岗。 网友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…

在Morelogin中使用IPXProxy海外代理IP的设置指南

Morelogin指纹浏览器是市场上较受欢迎的指纹浏览器,允许用户管理多个账号并进行自动化操作。它提供免费环境供用户进行体验,并且操作起来非常简单。大多数人都会将Morelogin指纹浏览器和海外代理IP进行使用,来应用于多种场景,如电…

用ce修改植物大战僵尸杂交版银币

第一步打开游戏 用ce打开图中进程 第二步 输入你原始银币 点首次搜索 第三步 找到这个地址 把地址拖下来 第四步 双击直接修改下面数值即可 金币 钻石 都和这个方法一样 不一样的是首次搜索可能会有很多地址 我们改变游戏里面的值 然后再次搜索游戏被改变的值即可准确找到地址

MySQL中字段的实际长度

在MySQL中,字段的实际长度(即存储数据的实际字节数)可能因数据类型和存储的具体内容而异。对于字符类型(如CHAR, VARCHAR, TEXT等)字段,实际长度取决于存储的字符串长度以及字符集的编码方式(如…

新加坡工作和生活指北:租房篇

本文首发于公众号 Keegan小钢 前段时间已经分享了工作篇,现在接着聊聊生活篇。因为生活这块涉及到多个方面,内容比较多,所以我再细分了一下,本篇先聊聊租房。 先来看看新加坡的地区分布图,如下: 上图将新加…

使用Python绘制累积直方图并分析数据

使用Python绘制累积直方图并分析数据 在这篇博客中,我们将探讨如何使用Python中的pandas库和matplotlib库来绘制累积直方图,并分析数据文件中的内容。累积直方图是一种常用的图表类型,用于展示数据的累积分布情况。 数据: 链接…

(C++链表01) 移除链表元素

203、移除链表元素 不带头节点 class Solution { public:ListNode* removeElements(ListNode* head, int val) {while(head ! NULL && head->val val) {ListNode* tem head;head head->next;delete tem;}ListNode* cur head;while(cur ! NULL && c…

LDA算法进行相似性分析

import gensim from gensim import corpora from gensim.models import LdaModel from gensim.matutils import cossim import nltk from nltk.corpus import stopwords from nltk.tokenize import word_tokenize import string# 如果您尚未下载nltk的停用词列表,请…

使用sklearn的基本流程

scikit-learn,通常简称为 sklearn,是一个开源的Python库,是基于 Python 编程语言的一个非常流行的机器学习库。它建立在 NumPy 和 SciPy 这两个科学计算库之上,并与 Matplotlib 配合使用,为数据预处理、模型训练、评估…

Atom编辑器插件Minimap使用样例

Atom编辑器插件Minimap是一个强大的工具,它为开发者提供了快速、直观的代码预览功能。以下是Minimap的使用样例和一些关键特性的介绍: 1. 安装Minimap 首先,你需要在Atom编辑器中安装Minimap插件。这通常可以通过Atom的插件市场&#xff08…

vue缓存页面,当tab切换时保留原有的查询条件

需求: 切换tab时,查询条件不变 路由页面: 单个页面上加这句话:

bert-base-chinese模型离线使用案例

import torch import torch.nn as nn from transformers import BertModel, BertTokenizer# 通过torch.hub(pytorch中专注于迁移学的工具)获得已经训练好的bert-base-chinese模型 # model torch.hub.load(huggingface/pytorch-transformers, model, bert-base-chinese) model…

超过35岁的网工,你该何去何从?

在网络工程师这个职业中,35岁往往被视为一个重要的门槛,这个年龄段的工程师,既拥有丰富的经验和技能,也面临着职业发展的诸多挑战。 随着技术的飞速发展和年轻一代的不断涌入,不少35岁以上的网工都在迷茫的路口&#x…

雅思词汇7~9

生活类词汇 英文中文fridge冰箱washing machine洗衣机dishwasher洗碗机water heater热水器microwave oven微波驴stereo system音箱radiator电暖炉toaster烤面包机dryer烘干机air conditioner空调accmodation住宿,膳宿tenant租客landlord房东couple夫妇veterinarian…

【资源下载】《数据仓库工具箱》

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 欢迎关注微信公众号:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&a…

SpringBoot报错:The field file exceeds its maximum permitted size of 1048576 bytes

报错信息 The field file exceeds its maximum permitted size of 1048576 bytes原因是 SpringBoot内嵌的 tomcat 默认的所有上传的文件大小为 1MB 解决办法 修改配置 spring:servlet:multipart:max-file-size: 50MBmax-request-size: 50MB或者 spring.servlet.multipart.…

拖地机检测液位的原理-管道液位传感器

在现代洗地机中,确保水箱液位充足是保证清洁效率和质量的关键之一。为了实现这一功能,洗地机通常配备了管道光电液位传感器,这种传感器利用先进的光学感应原理来准确检测水箱中的液位情况。 管道光电液位传感器的工作原理基于光学传感技术&a…

VOS历史话单的非法呼叫话单解决方案,IPSS模块安装到VOS服务器,可大幅度提高安全性!

由于VOS的普及性,不得不承认VOS确实是非常优秀的软交换,但是很多客户在使用过程中都会遇到各种安全问题,比如话费被盗用了,历史话单一堆的非法呼叫话单,严重的影响到了话务安全,并不是那点话费的事了&#…

Flutter【组件】标签

简介 flutter 标签组件。标签组件是一种常见的 UI 元素,用于显示和管理多个标签(或标签集合)。 github地址: https://github.com/ThinkerJack/jac_uikit pub地址:https://pub.dev/packages/jac_uikit 使用方式&…