目录

1.初识GAN

什么是GAN?

GAN应用场景

2.GAN原理结构

(1)生成对抗网络子网络

(2)结构图

(1)生成器

(2)判别器

(3)训练技巧

3.GAN网络模型选择

(1)生成模型

(2)判别模型

4.GAN训练目标函数

(1)生成模型

(2)判别模型

5.训练算法

6.GAN代码实现

7.mainWindow窗口显示生成器生成的图片

拓展


1.初识GAN

  • 什么是GAN?

    • GAN(Generative Adversarial Networks):生成对抗网络;
    • GAN是当前人工智能领域最为重要的研究热点之一,并且应用非常的广泛;
  • 2014年,Universite de Montreal 大学Yoshua Bengio(2018年图灵奖获得者)的学生Ian Goodfellow提出 生成对抗网络(Generative adj-terminal networks,简称 GAN),从而开辟了深度学习最赤手可热的研究方向。
  • 从2014-2019年,GAN的研究稳步推进,研究捷报频传,最新的GAN算法在图片生成上的效果甚至达到了肉眼很难分辨的程度。由于GAN的发明,Ian Goodfello荣获GAN之父称号,并获得了2017年麻省理工大学科技评论颁奖的35 Innovators Goodfellow奖项。
  • 该方法利用了两个网络,一个称为生成网络,另一个称为鉴别网络,可用于以音频、视频和文本的形式产生不同寻常的创造性输出。他的这项研究,在人工智能文献中被广泛引用。
  • GAN应用场景

    • 图像编辑:给定一张图像,可以在该图像的基础之上生成各种各样的图像;
    • 恶意攻击检测:深度学习生成的模型是可以被黑客攻击,利用甚至控制的。为了对抗这样的逆向攻击(adversarial attacks),可以训练对抗神经网络去生成更多的虚假训练数据作为假想敌,让模型在演习中去识别出这些虚假数据,GAN生成的虚假数据让正在做分类的模型更加稳健;
    • 数据生成:例如医疗领域,缺少训练数据是应用深度学习的最大障碍。数据增强的传统做法是将原图像拉伸旋转剪切,但这毕竟还是原来的图像,通过使用GAN,能够生成更多类似的数据;
    • 注意力预测:人类在看一张图片时,往往只关注特定的部分,而通过GAN模型,可以预测出人类关心的区域在哪里。
    • 三位结构生成:pix2vox是一个基于GAN的开源工具,能够根据手绘的二维图片,生成对应的三维结构,不止有对应的形状,还会生成对应的颜色,有了这样的工具,就能降低3D建模的门槛,从而让3D打印更容易的落地。

2.GAN原理结构

提示:下面的原理解释可能对于读者来说比较枯燥无味,但是还是希望读者可以坚持看完原理,因为只有这样你才能真正的理解GAN的实现原理。

(1)生成对抗网络子网络

GAN包含:生成网络(Generator Network)和判别网络(Discriminator Network),其中生成网络Gen负责学习样本的真实分布,判别网络Dis负责将对生成网络生成的样本和真实样本分别进行判别。

(2)结构图

(1)生成器

生成模型以随机噪声(Random noise)或者类似的控制变量作为输入,生成器一般使用多层的神经网络实现,其输出为生成的样本,也就是一张假的图片(fake image);这样样本和真实给定的样本一起给判别器模型训练。

"""
@Author : Keep_Trying_Go
@Major  : Computer Science and Technology
@Hobby  : Computer Vision
@Time   : 2023/4/24 14:21
"""
import torch
import numpy as np
#对于生成器,输入的为正态分布随机数
#输出为: [1,28,28]图片class Generator(torch.nn.Module):def __init__(self):super(Generator, self).__init__()self.fc = torch.nn.Sequential(torch.nn.Linear(in_features=100,out_features=256),torch.nn.ReLU(),torch.nn.Linear(in_features=256,out_features=512),torch.nn.ReLU(),torch.nn.Linear(in_features=512,out_features=784),torch.nn.Tanh()#对于生成器使用tanh激活函数更好)def forward(self,input):x = self.fc(input)img = x.view(-1,28,28)return img

(2)判别器

判别器模型是一个二分类器,判别一个样本是真实的样本还是生成器生成的样本,一般也是使用神经网络实现。

"""
@Author : Keep_Trying_Go
@Major  : Computer Science and Technology
@Hobby  : Computer Vision
@Time   : 2023/4/24 14:21
"""
import torch
import numpy as np#判别器的输入为一张图片
#输出为二分类的概率值
#判别器对log(1 - D(G(z)))的判别作为生成器的损失值class Discriminator(torch.nn.Module):def __init__(self):super(Discriminator, self).__init__()self.fc = torch.nn.Sequential(torch.nn.Linear(in_features=784,out_features=512),torch.nn.LeakyReLU(),torch.nn.Linear(in_features=512,out_features=256),torch.nn.LeakyReLU(),torch.nn.Linear(in_features=256,out_features=1),torch.nn.Sigmoid())def forward(self,input):x = input.view(-1,784)x = self.fc(x)return x

(3)训练技巧

  • 对于生成模型:训练目标是让生成的数据尽可能的与真实数据相似,最小化判别模型的判别准确率。
  • 对于判别模型:训练目标是最大化判别准确率,即区分样本是真实样本还是生成器生成的样本。

可以发现,这个过程是矛盾的,因此:

  • 在训练的过程中采用交替优化的方式,每一次迭代时分为两个阶段:

    • 第一个阶段:首先固定判别模型,优化生成模型,使得生成的数据备判别模型判定为真样本的概率尽可能的高。
    • 第二个阶段:固定生成模型,优化盘被模型,提高判别模型的分类准确率。

提示:在训练过程中,生成器努力地让生成的图像更加的真实,而判别器则努力地识别生成器图片的真假,这是是一个相互博弈的过程,互相提升自己,也就是不断的进行对抗的过程。随着训练的进行,生成模型产生的样本和真实样本几乎没有什么差别,判别模型也无法准确的判别一个样本的真假,此时的分类错误率为0.5(那什均衡)

3.GAN网络模型选择

生成对抗网络是一个抽象的框架,并没有指定生成模型和判别模型具体为哪一种模型,可以是神经网络模型,也可以是卷积神经网络 模型或者其他的机器学习模型。

(1)生成模型

在本文中,生气模型选择是神经网络模型。根据类型等输入变量来生成图像之类的样本数据,生成模型接收的输入是类别之类的隐变量和随机噪声,输出与训练样本相似的样本数据(比如图片之类的)。

(2)判别模型

判别模型一般用分类问题的神经网络,用于区分样本的真假(给定的真实数据和生成器生成的数据),是一个二分类问题。

4.GAN训练目标函数

提示:在确定生成模型和判别模型之前,首先了解一下logistic回归模型:

logistic回归即对数概率回归,是一种二分类问题的分类算法,使用sigmoid函数估计出样本属于正样本的概率(关于细节推导,建议看《机器学习原理,算法与应用》)。

logistic回归似然函数:

  • 回归对数函数和生成对抗区别:

    • logistic回归在训练达到最优点处时,负样本的预测输出接近于0;
    • 生成对抗网络中判别模型对抗样本的输出概率值在最优点处接近于0.5,。

(1)生成模型

(2)判别模型

5.训练算法

6.GAN代码实现

提示:代码放在了Github上,读者自行下载:https://github.com/KeepTryingTo/Pytorch-GAN

7.mainWindow窗口显示生成器生成的图片

提示:这里编写了一个显示生成器显示图片的程序(mainWindow.py),加载之前训练之后保存的生成器模型,之后可使用该模型进行随机生成数字图片,如下:

(1)运行mainWindow.py 初始界面如下

(2)点击生成图片按钮,每一次的点击生成的数字都不是一样的。

拓展

pytorch中的detach作用

参考文章:

《TensorFlow深度学习》

《机器学习原理,算法与应用》

https://www.jiqizhixin.com/articles/2019-04-15-6

https://b23.tv/6P7M8mh

GAN原理及Pytorch框架实现GAN(比较容易理解)相关推荐

  1. 【通知】《生成对抗网络GAN原理与实践》代码开源,勘误汇总!

    有三上个月出版了新书<生成对抗网络GAN:原理与实践>,Generative Adversarial Networks(中文名生成对抗网络,简称GAN)自从被提出来后,其发展就非常迅猛,几 ...

  2. 生成对抗网络gan原理_必读!TOP10生成对抗网络GAN论文(附链接)

    来源:新智元 本文约2200字,建议阅读7分钟. 本文所选论文提供了一个易读的对GAN的介绍,帮助你理解GAN技术的基础. [ 导读 ]生成对抗网络 (GAN) 是深度学习中最有趣.最受欢迎的应用之一 ...

  3. GAN原理及简单mnist生成图片

    简单学习一下GAN,主要是为了扩增数据集,目前手上数据太少,一个类别30张图片进行数据增强(旋转,反转等)后的数据量也远远不够,因此试图采用GAN来进行生成数据,添加生成的数据再进行检测和分类不知道能 ...

  4. 图解 生成对抗网络GAN 原理 超详解

    生成对抗网络 一.背景 一般而言,深度学习模型可以分为判别式模型与生成式模型.由于反向传播(Back propagation, BP).Dropout等算法的发明,判别式模型得到了迅速发展.然而,由于 ...

  5. 【Pytorch】Cycle GAN实战(一):风格转换--真实风景图像转换为VanGogh风格

    文章目录 一.Cycle GAN(CGAN)原理 1.1Conditional GAN 1.2Unsupervised Conditional GAN No.1 Direct Transformati ...

  6. #教计算机学画卡通人物#生成式对抗神经网络GAN原理、Tensorflow搭建网络生成卡通人脸

    生成式对抗神经网络GAN原理.Tensorflow搭建网络生成卡通人脸 下面这张图是我教计算机学画画,计算机学会之后画出来的,具体实现在下面. ▲以下是对GAN形象化地表述 ●赵某不务正业.游手好闲, ...

  7. 深入浅出 GAN·原理篇文字版(完整)

    深入浅出 GAN·原理篇文字版(完整)|干货 机翼技术 百家号 05-29 02:02 导语 这次的内容主要是想梳理 GAN 从 NIPS 2014 被提出,到 2017年5月,都有哪些重要的从原理和 ...

  8. 深入浅出 GAN·原理篇文字版(完整)|干货

    这是一篇非常好的干货文章,深入浅出,所以我把它转载过来,分享给大家.也方便自己日后查看. 转载声明:本文转载自「程序媛的日常」,搜索「girlswhocode」即可关注. 导语 这次的内容主要是想梳理 ...

  9. 深入浅出 GAN·原理篇文字版(完整)| 干货

    首先来看看 GAN 现在能做到哪些惊艳的事呢? GAN 可以被用来学习生成各种各样的字体--也就是说,以后字迹辨认这种侦查手段很可能就不靠谱啦!这个工作还有很多动图,在 GitHub 上搜 zi2zi ...

最新文章

  1. Jvm面试题及答案 100道(持续更新)
  2. python gevent 协程
  3. 意念控制成现实:不开口,不动手,“瘫着”就能打游戏
  4. selector-UI元素状态伪类
  5. Keras Data augmentation(数据扩充)
  6. 树莓派使用STEP1:装系统
  7. THU: 成绩录入系统的bug
  8. VGG使用重复元素的网络
  9. 收费系统对接微信公账号流程
  10. CMake中cmake_minimum_required的使用
  11. bailian.openjudge 2746:约瑟夫问题
  12. JfreeChart常用图形实现
  13. 直播美颜SDK动态贴纸详解
  14. 免费临时邮箱,一次性邮箱
  15. 列主元高斯消去法(c语言)(可以实现所有阶的)(超级详细)
  16. 竞争学习神经网络详解
  17. 用STM32F407ZET6的HAL库写一个串口接收,发送代码,支持ringbuff
  18. 敏捷守破离:20%-200%-1200%的改善
  19. mt4电脑版如何下载安装
  20. 美国php空间推荐,美国php空间php空间推荐

热门文章

  1. z-index使用以及失效的处理方法
  2. overflow属性的用法
  3. [A001]兄弟连3天学会php
  4. 人工智能处理的几大基础任务、元宇宙和人工智能
  5. linux脚本的编写
  6. Java设计模式—模板模式(Template)
  7. 通达信l2数据接口如何开通?
  8. 军品研制阶段划分以及各阶段工作
  9. Python大数据分析(二):大数据技术基础
  10. Redis-SETNX命令简介