GAN网络从入门教程(一)之GAN网络介绍
GAN网络从入门教程(一)之GAN网络介绍
稍微的开一个新坑,同样也是入门教程(因此教程的内容不会是从入门到精通,而是从入门到入土)。主要是为了完成数据挖掘的课程设计,然后就把挖掘榔头挖到了GAN网络这里来了。当然,我也是新手上路,如有任何问题,欢迎在评论区留言。
生成式对抗网络是20年来机器学习领域最酷的想法。 ——Yann LeCun
GAN网络概要
GAN网络全称generative adversarial network,翻译为生成式对抗网络,是一种机器学习方法。由Ian J. Goodfello 等人于2014年在Generative Adversarial Nets 论文中提出。其中在GAN网络中,有两个模型——生成模型( generative model G),判别模型(discriminative model D)。
a generative model G that captures the data distribution, and a discriminative model D that estimates the probability that a sample came from the training data rather than G
我们以生成图片为例子,本教程的最终的目标是实现使用GAN网络生成动漫头像。
G就是一个生成图片的网络,它接受一个随机的噪声\(z\),然后通过这个噪声生成图片,生成的数据记做\(G(z)\)。
D是一个判别网络,判别一张图片是不是“真实的”(是否是捏造的)。它的输入参数是\(x\),\(x\)代表一张图片,输出\(D(x)\)代表\(x\)为真实图片的概率,如果为1,就代表绝逼是真实的图片,而输出为0,就代表不可能是真实的图片。
在训练的过程中,生成网络G的目标就是生成假的图片去骗过判别网络D,而判别网络D的目标就是能够分辨出某一张图片是不是由\(G\)生成的。这就变成了一个博弈的过程。同时G和D的能力也在训练的过程中逐渐提高。在最理想的情况下, 则就是\(D(G(z)) = 0.5\)。
看到一个比较形象的说法:一个生成器(“艺术家”)学习创造看起来真实的图像,而判别器(“艺术评论家”)学习区分真假图像。训练过程中,生成器在生成逼真图像方面逐渐变强,而判别器在辨别这些图像的能力上逐渐变强。当判别器不再能够区分真实图片和伪造图片时,训练过程达到平衡。

因此,在训练的过程中,我们会对判别器和生成器进行学习。
判别器的学习
首先我们初始化生成器 G,然后输入一组随机向量(Randomly sample a vactor),生成器会根据输入的向量产生一些图片,我们把这些图片标注成 0(假图片)。同时把已有训练集中真实的图片标注成 1(真图片)。两者同时丢进判别器 D 中,以此来训练判别器 D。使得当输入是真图片的时候,判别器给高分(分数接近于1),而输入假图片的时候,判别器给低分(接近于 0 )。

了解深度学习的同学应该就知道了,我们有标记为1的真实图片和标注为0的假的图片,这个时候,我们就可以很轻易的对\(D\)进行训练(有了\(x\)和\(y\))。
生成器的学习
针对于\(D\)我们有标记为1和0的数据,因此我们可以对其进行训练。那么对于生成器,有\(x\)(也就是随机噪声\(z\)),那么\(y\)在哪里呢?
对于生成器,我们的目的是使得其能够生成真实的图片,换句话说,我们是希望生成的图片能够骗过\(D\)。那么如何通过判别器来产生所谓的\(y\)??我们可以这样做:
我们通过随机向量(噪声数据)经由生成网络产生一组假图片,我们将这些假图片都标记为 1(也就是说,人为的把假的图片当作真实的),然后将这些假图片输入到判别器中,判别器在对这些图片进行判别的时候,会发现这些图片是假的图片,然后给出低分,这样就产生了误差(因为标记的为1,但是判别器给了低分)。
因此,在训练生成器的时候,这个网络是串接的。而在训练生成器的时候,一个很重要的操作就是保持判别器网络的参数不发生改变,只是把误差一直方向传播,传到生成网络那块后更新生成网络的参数,这样就完成了生成网络的训练了。

在完成生成器的训练之后,我们又可以产生新的假的图片去对判别器进行训练。我们把这个过程称作为单独交替训练。同时要定义一个迭代次数,交替迭代到一定次数后停止即可。
总结
GAN网络的入门介绍就到这里,下一篇博客将会对GAN网络的原理进行介绍。数据挖掘杀我!!!

参考
GAN网络从入门教程(一)之GAN网络介绍的更多相关文章
- GAN网络从入门教程(二)之GAN原理
在一篇博客GAN网络从入门教程(一)之GAN网络介绍中,简单的对GAN网络进行了一些介绍,介绍了其是什么,然后大概的流程是什么. 在这篇博客中,主要是介绍其数学公式,以及其算法流程.当然数学公式只是简 ...
- GAN网络之入门教程(五)之基于条件cGAN动漫头像生成
目录 Prepare 在上篇博客(AN网络之入门教程(四)之基于DCGAN动漫头像生成)中,介绍了基于DCGAN的动漫头像生成,时隔几月,序属三秋,在这篇博客中,将介绍如何使用条件GAN网络(cond ...
- GAN网络之入门教程(四)之基于DCGAN动漫头像生成
目录 使用前准备 数据集 定义参数 构建网络 构建G网络 构建D网络 构建GAN网络 关于GAN的小trick 训练 总结 参考 这一篇博客以代码为主,主要是来介绍如果使用keras构建一个DCGAN ...
- esri-leaflet入门教程(1)-leaflet介绍
esri-leaflet入门教程(1)-esri leaflet介绍 by 李远祥 关于leaflet,可能很多人比较陌生,如果搭上esri几个字母,可能会有更多的人关注.如果没有留意过leaflet ...
- GAN网络从入门教程(三)之DCGAN原理
目录 DCGAN简介 DCGAN的特点 几个重要概念 下采样(subsampled) 上采样(upsampling) 反卷积(Deconvolution) 批标准化(Batch Normalizati ...
- flask的模板引擎jinja入门教程 包含一个通过网络实时传输Video视频流的示例
本文首发于个人博客https://kezunlin.me/post/1e37a6/,欢迎阅读最新内容! tutorial to use python flask jinja templates and ...
- Dapper入门教程(一)——Dapper介绍
Dapper是什么? Dpper是一款.Net平台简单(Simple)的对象映射库,并且Dapper拥有着"微型ORM之王"的称号.就速度而言与手写ADO.NET SqlDateR ...
- Adaboost入门教程——最通俗易懂的原理介绍(图文实例)
https://blog.csdn.net/px_528/article/details/72963977 写在前面 说到Adaboost,公式与代码网上到处都有,<统计学习方法>里面有详 ...
- Docker入门教程(一)介绍
http://dockone.io/article/101 Docker入门教程(一)介绍 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第一篇,介绍了 ...
随机推荐
- Java实现 LeetCode 47 全排列 II(二)
47. 全排列 II 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] class Solut ...
- Java实现 洛谷 P1738 洛谷的文件夹
题目描述 kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现. 洛谷的网页端,有很多文件夹,文件夹还套着文件夹. 例如:/luogu/application/c ...
- java实现数组转置
** 数组转置** 编写程序将2行3列的数组行列置换复制给3行2列的数组(即数组的转置).已经写了如下代码,请完善之: class y{ public static void main(String[ ...
- java实现识别复制串
** 识别复制串** 代码的目标:判断一个串是否为某个基本串的简单复制构成的. 例如: abcabcabc,它由"abc"复制3次构成,则程序输出:abc aa 由"a& ...
- Java实现打印回型嵌套
*********** * * * ******* * * * * * * * *** * * * * * * * * * * *** * * * * * * * ******* * * * **** ...
- java代码(15) ---java8 Function 、Consumer 、Supplier
Java8 Function.Consumer.Supplier 有关JDK8新特性之前还有三篇博客: 1,java代码(1)---Java8 Lambda 2,java代码(2)---Java8 S ...
- python—面向对象设计
一:三大编程范式 1.面向过程编程 2.函数式编程 3.面向对象编程 (类:把一类事物的相同的特征和动作整合到一起就是类,类是一个抽象的概念) (对象:就是基于类而创建的一个具体的事物 [具体存在的] ...
- MIPI CSI-2
目录 1 MIPI简介 2 MIPI CSI-2简介 2.1 MIPI CSI-2 的层次结构 2.2 CSI-2协议层 2.3 打包/解包层 2.4 LLP(Low Level Protocol)层 ...
- Modern C++
microsoft: Modern C++ 目录 1. auto 关键字 2. 智能指针(smart pointers) 3. std::string & std::string_view 4 ...
- LR脚本信息函数-lr_get_host_name
lr_get_host_name() 返回主机的名称. char * lr_get_host_name(); lr_get_host_name函数返回执行脚本的机器的名称. 示例:lr_get_hos ...