昇思25天学习打卡营第21天|应用实践之GAN图像生成

基本介绍

         今日要实践的模型是GAN,用于图像生成。使用的MNIST手写数字数据集,共有70000张手写数字图片,包含60000张训练样本和10000张测试样本,数字图片为二进制文件,图片大小为28*28,单通道,图片已经预先进行了尺寸归一化和中心化处理。本文会先简单介绍GAN图像生成的原理,然后展示自己的运行结果,不作代码展示,最后进行总结。

GAN基本原理

该部分内容来自官方文档,非原创

        生成式对抗网络(Generative Adversarial Networks,GAN)是一种生成式机器学习模型。最初,GAN由Ian J. Goodfellow于2014年发明,并在论文Generative Adversarial Nets中首次进行了描述,其主要由两个不同的模型共同组成——生成器(Generative Model)和判别器(Discriminative Model):

  • 生成器的任务是生成看起来像训练图像的“假”图像;
  • 判别器需要判断从生成器输出的图像是真实的训练图像还是虚假的图像。

        GAN通过设计生成模型和判别模型这两个模块,使其互相博弈学习产生了相当好的输出。GAN模型的核心在于提出了通过对抗过程来估计生成模型这一全新框架。在这个框架中,将会同时训练两个模型——捕捉数据分布的生成模型𝐺和估计样本是否来自训练数据的判别模型𝐷。在训练过程中,生成器会不断尝试通过生成更好的假图像来骗过判别器,而判别器在这过程中也会逐步提升判别能力。这种博弈的平衡点是,当生成器生成的假图像和训练数据图像的分布完全一致时,判别器拥有50%的真假判断置信度。

        用𝑥代表图像数据,用𝐷(𝑥)表示判别器网络给出图像判定为真实图像的概率。在判别过程中,𝐷(𝑥)需要处理作为二进制文件的大小为1×28×28的图像数据。当来自训练数据时,𝐷(𝑥)数值应该趋近于 ;而当𝑥来自生成器时,𝐷(𝑥)数值应该趋近于0。因此𝐷(𝑥)也可以被认为是传统的二分类器。用𝑧代表标准正态分布中提取出的隐码(隐向量),用𝐺(𝑧):表示将隐码(隐向量)𝑧映射到数据空间的生成器函数。函数𝐺(𝑧)的目标是将服从高斯分布的随机噪声𝑧通过生成网络变换为近似于真实分布 𝑝𝑑𝑎𝑡𝑎(𝑥)的数据分布,我们希望找到 θθ 使得 𝑝𝐺(𝑥;𝜃)和 𝑝𝑑𝑎𝑡𝑎(𝑥)尽可能的接近,其中𝜃代表网络参数。

        𝐷(𝐺(𝑧))表示生成器 𝐺 生成的假图像被判定为真实图像的概率,如Generative Adversarial Nets中所述,𝐷和𝐺在进行一场博弈,𝐷想要最大程度的正确分类真图像与假图像,也就是参数 log𝐷(𝑥);而𝐺试图欺骗𝐷来最小化假图像被识别到的概率,也就是参数log(1−𝐷(𝐺(𝑧)))。因此GAN的损失函数为:

从理论上讲,此博弈游戏的平衡点是𝑝𝐺(𝑥;𝜃)=𝑝𝑑𝑎𝑡𝑎(𝑥),此时判别器会随机猜测输入是真图像还是假图像。下面我们简要说明生成器和判别器的博弈过程:在训练刚开始的时候,生成器和判别器的质量都比较差,生成器会随机生成一个数据分布。

  1. 判别器通过求取梯度和损失函数对网络进行优化,将靠近真实数据分布的数据判定为1,将靠近生成器生成出来数据分布的数据判定为0。
  2. 生成器通过优化,生成出更加贴近真实数据分布的数据。
  3. 生成器所生成的数据和真实数据达到相同的分布,此时判别器的输出为1/2

GAN代码实践

        官方给的代码实践是经典的深度学习流程。即数据集预处理,模型搭建,模型训练,模型评估,模型推理。这个流程中重点是模型搭建中的生成器和判别器,这二者是GAN的核心,最好结合代码和原理进行学习理解。详细的可直接参考官方的代码实践,这里给出我自己的运行结果和部分代码

  • 数据集部分可视化结果

  • 模型训练结果:由于训练时长,这里只训练了12轮,每4轮可视化一次生成的图像

如果将训练过程可视化,训练过程生成的图像的gif图如下:可以看出随着训练次数的增多,图像质量也越来越好。如果增大训练周期数,当 epoch 达到100(该数据来自官方文档)以上时,生成的手写数字图片与数据集中的较为相似

  • 描绘DG损失与训练迭代的关系图

  • 模型推理结果:通过加载生成器网络模型参数文件来生成图像,可以看出,由于训练轮次的不足,从而导致生成的图像质量非常差,有的甚至看不出是什么数字,像是经历了上百年的风化一样,有时间多训练个几十轮。

总结

        GAN的基本思想不难,核心是生成器和判别器,其数学原理是概率统计,公式比较复杂,不同的GAN模型的生成器和判别器是不同的。今天初步了解了GAN的原理,并结合代码对其生成器和判别器有了大概的了解,顺利完成今天的实践,希望后面的不会太难。

Jupyter运行情况

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redislnsight-v2远程连接redis

redis安装内容添加: Linux 下使用Docker安装redis-CSDN博客 点击添加 添加ip地址,密码,端口号 创建完成 点击查看内容:

CAN总线学习

can主要用于汽车、航空等控制行业,是一种串行异步通信方式,因为其相较于其他通信方式抗干扰能力更强,更加稳定。原因在于CAN不像其他通信方式那样,以高电平代表1,以低电平代表0,而是通过电压差来表示逻辑10…

ESP32CAM人工智能教学13

ESP32CAM人工智能教学13 openCV 安装 小智发现openCV是一款非常出色的机器视觉软件,可以配合ESP32Cam的摄像头,开发出许许多多的人工智能应用情境。 下载视频服务驱动库 OpenCV是开源的计算机视觉驱动库,可以应用于机器人的图形处理、机器学…

JDK,JRE,JVM三者之间的关系

Java程序不是直接在操作系统之上运行,而是运行在JVM(java虚拟机)之上。 Java源代码(.java文件)经编译器编译成字节码(.class文件),JVM本质上就是一个负责解释执行Java字节码的程序。…

旷野之间20 - Google 研究的推测 RAG

为什么选择 RAG 新兴能力 直到最近,人们发现 LLM 具有新兴能力,即在与用户或任务交互过程中出现的意外功能。 这些功能的示例包括: 解决问题: LLM 可以利用其语言理解和推理能力,为未经过明确培训的任务提供富有洞…

Unity UGUI Image Maskable

在Unity的UGUI系统中,Maskable属性用于控制UI元素是否受到父级遮罩组件的影响。以下是关于这个属性的详细说明和如何使用: Maskable属性 Maskable属性: 当你在GameObject上添加一个Image组件(比如UI面板或按钮)时&…

网络请求优化:如何让你的API飞起来

网络请求优化:如何让你的API飞起来 亲爱的开发者朋友们,你是否曾经遇到过这样的场景:用户疯狂点击刷新按钮,你的服务器却像老年人散步一样慢吞吞地响应。或者,你的应用像个贪吃蛇,疯狂吞噬用户的流量包。如果你对这些情况再熟悉不过,那么恭喜你,你正需要…

Redis分布式锁-Redisson可重入锁原理的个人见解。

记录Redisson可重入锁的个人见解。 文章目录 前言一、什么叫做锁的重入?二、Redisson可重入锁原理 前言 ⁣⁣⁣⁣ ⁣⁣⁣⁣ 之前在写项目的时候,注意到Redisson可重入锁的一个问题,随即在网上搜索其对应的资料,下面就记录一下个…

AI发展下的伦理挑战,应当如何应对?

引言 人工智能(AI)技术的迅猛发展给我们带来了前所未有的便利和创新,但也伴随着一系列复杂的伦理挑战。从侵犯数据隐私到制造“信息茧房”,AI的应用在许多方面都引发了伦理和社会问题。随着AI技术逐渐渗透到社会各个领域&#xf…

C双指针元素去重

需求 在尾部插⼊、删除元素是⽐较⾼效的&#xff0c;时间复杂度 是 O(1)&#xff0c;但是如果在中间或者开头插⼊、删除元素&#xff0c;就会涉及数据的搬移&#xff0c;时间复杂度为 O(N)&#xff0c;效率较低。 代码 #include <stdio.h>// 相邻元素去重 int remove…

3d复制的模型怎么渲染不出来?----模大狮模型网

在展览3D模型设计领域&#xff0c;技术的进步和创新使得模型的复杂性和精细度有了显著提升。然而&#xff0c;有时设计师们在尝试渲染复杂的3D复制模型时&#xff0c;却面临着无法正确呈现的问题。模大狮将探讨这一现象的可能原因&#xff0c;并提供相应的解决方案和建议&#…

最值得推荐的10款Windows软件!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频播放量破百万https://aitools.jurilu.com/1.音乐播放器——Dopamine Dopamine是一款音乐播放器&#xff0c;设计简洁美观。它支持多种音频格式&#xff0c;包括wav、mp3、ogg…

Maven学习笔记——如何在pom.xml中通过坐标为项目导入jar包

注意&#xff1a;我们只导入了一个jar包坐标&#xff0c;但右边项目中确多出来了好几个jar包&#xff0c;这是因为我们导入的该jar包所依赖其他jar包&#xff0c;maven自动帮我们导入了进来

python+Selenium自动化之免登录(cookie及token)

目录 cookie免登录 通过接口获取cookie 启用浏览器绕过登录 添加token 使用登录可以减去每次登录的重复操作&#xff0c;直接操作系统登录后的菜单页面&#xff0c;也可以减少安全验证登录&#xff0c;如图像验证登录的操作。注意&#xff1a;cookie和token都有有效期。 c…

LinK3D: Linear Keypoints Representation for 3D LiDAR Point Cloud【SLAM-翻译与解读】

LinK3D: Linear Keypoints Representation for 3D LiDAR Point Cloud 摘要 特征提取和匹配是许多机器人视觉任务的基本组成部分&#xff0c;如 2D 或 3D 目标检测、识别和配准。2D 特征提取和匹配已取得巨大成功。然而&#xff0c;在 3D 领域&#xff0c;当前方法由于描述性差…

最新 Kubernetes 集群部署 + Containerd容器运行时 + flannel 网络插件(保姆级教程,最新 K8S 1.28.2 版本)

资源列表 操作系统配置主机名IP所需插件CentOS 7.92C4Gk8s-master192.168.60.143flannel-cni-plugin、flannel、coredns、etcd、kube-apiserver、kube-controller-manager、kube-proxy、 kube-scheduler 、containerd、pause 、crictlCentOS 7.92C4Gk8s-node01192.168.60.144f…

在VSCode上创建Vue项目详细教程

1.前期环境准备 搭建Vue项目使用的是Vue-cli 脚手架。前期环境需要准备Node.js环境&#xff0c;就像Java开发要依赖JDK环境一样。 1.1 Node.js环境配置 1&#xff09;具体安装步骤操作即可&#xff1a; npm 安装教程_如何安装npm-CSDN博客文章浏览阅读836次。本文主要在Win…

yolo格式数据集之野生动物类4种数据集已划分好|可以直接使用|yolov5|v6|v7|v8|v9|v10通用

本数据为野生动物类检测数据集&#xff0c;数据集数量如下&#xff1a; 总共有:1504张 训练集&#xff1a;1203张 验证集&#xff1a;150张 类别数量&#xff1a;4 测试集&#xff1a;151 类别名&#xff1a; [‘buffalo’, ‘elephant’, ‘rhino’, ‘zebra’] 占用空间&…

阿里云ECS服务器安装jdk并运行jar包,访问成功详解

安装 OpenJDK 8 使用 yum 包管理器安装 OpenJDK 8 sudo yum install -y java-1.8.0-openjdk-devel 验证安装 安装完成后&#xff0c;验证 JDK 是否安装成功&#xff1a; java -version设置 JAVA_HOME 环境变量&#xff1a; 为了确保系统中的其他应用程序可以找到 JDK&…

【自监督学习】iBOT in ICLR 2022

一、引言 论文&#xff1a; iBOT&#x1f916;: Image BERT Pre-Training with Online Tokenizer 作者&#xff1a; ByteDance 代码&#xff1a; iBOT 注意&#xff1a; 该方法是在另一个自监督预训练方法基础上的改进&#xff0c;学习之前建议掌握DINO。 特点&#xff1a; 对…