昇思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,一经查实,立即删除!

相关文章

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

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

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

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

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

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…

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

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

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

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

Flutter【组件】标签

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

中科驭数HADOS 3.0:以四大架构革新,全面拥抱敏捷开发理念,引领DPU应用生态

一家成功的大算力芯片公司,其核心壁垒必须是软硬兼备的,既要有芯片架构的强大技术壁垒,更要有持久投入的、生态兼容完备的软件护城河。HADOS,就是中科驭数的软件护城河。 ——中科驭数高级副总裁 张宇 近日,在DPU基础…

关于MySQL mvcc

innodb mvcc mvcc 多版本并发控制 在RR isolution 情况下 trx在启动的时候就拍了个快照。这个快照是基于整个数据库的。 其实这个快照并不是说拷贝整个数据库。并不是说要拷贝出这100个G的数据。 innodb里面每个trx有一个唯一的trxID 叫做trx id .在trx 开始的时候向innodb系…

嵌入式音频处理技术的现在发展及未来的方向

嵌入式音频处理技术:从音频流媒体到声音识别 嵌入式音频处理技术的迅猛发展正在改变我们的生活方式,从音频流媒体到声音识别,这个领域为人们的生活和工作带来了巨大的影响。本文将探讨嵌入式音频处理技术的最新趋势和应用,以及提…

逻辑回归模型(非回归问题,而是解决二分类问题)

目录: 一、Sigmoid激活函数:二、逻辑回归介绍:三、决策边界四、逻辑回归模型训练过程:1.训练目标:2.梯度下降调整参数: 一、Sigmoid激活函数: Sigmoid函数是构建逻辑回归模型的重要激活函数&am…

openlayers更改点坐标

我现在的需求是无人机点位根据ws传输的经纬度改变位置,在网上查了很多资料,终于是做出来了,如果有问题请指出。 效果图,无人机可以来回移动 这里是核心代码 // 添加飞机点位图层let vectorLayerpointfunction DronepointLayer()…

Kafka(三)Producer第二篇

一,生产者架构 生产者客户端由两个线程协调运行,分别为主线程和Sender线程(发送线程)。 主线程:KafkaProducer创建消息,通过拦截器、序列化器和分区器之后缓存到消息收集器RecordAccumulator中;…

大语言模型的直接偏好优化(DPO)对齐在PAI-QuickStart实践

直接偏好优化(Direct Preference Optimization,DPO)算法是大语言模型对齐的经典算法之一,它巧妙地将奖励模型(Reward Model)训练和强化学习(RL)两个步骤合并成了一个,使得训练更加快…

【算法】单调队列单调栈

一、单调队列 用来维护一段区间内的最大值或最小值,例如滑动窗口、区间最值等问题。 基本概念 单调队列是一种存储数据的队列,其中元素的顺序是单调递增或单调递减的。在算法竞赛中,我们一般使用两个单调队列,一个维护单调递增序…

【版面费优惠丨ACM独立出版丨接受全文摘要投稿】2024年生物医药和智能技术国际学术会议(ICBIT 2024,8月23-25)

“2024年生物医药和智能技术国际学术会议(ICBIT 2024)”拟定于2024年8月23-25日于珠海召开。近年来,智能技术已经逐渐走入生物医药领域,并在与生物医药领域的融合创新中凸显出巨大的发展潜力和社会价值。人工智能技术在生物医药领…