生成对抗网络项目实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-28 13:49:49

点击下载

作者:(印) 凯拉什·阿伊瓦(Kailash Ahirwar)

出版社:人民邮电出版社有限公司

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

生成对抗网络项目实战

生成对抗网络项目实战试读:

前言

生成对抗网络(generative adversarial network,GAN)可用于构建新一代模型,因为它可以模拟任何数据分布方式。它是目前发展最迅速的机器学习(machine learning,ML)领域之一,并且有很多相关的重要研发工作正在开展。本书将介绍神经网络模型无监督训练的相关技术,带领读者从零开始构建7个完整的GAN项目。

本书首先介绍构建高效项目所涉及的概念、工具和库,其后不同的项目会用到不同类型的数据集。每一章在复杂程度和操作难度上都逐步提升,最终帮助读者熟练掌握GAN。

本书将介绍3D-GAN、DCGAN、StackGAN、CycleGAN等流行技术,并且通过实际实现来理解生成模型的架构和功能。

本书旨在介绍如何在工作或项目中构建、训练并优化完整的GAN模型。读者对象

本书适合数据科学家、机器学习开发者、深度学习从业者,以及希望通过项目指南构建实际的GAN模型来检验自己的知识和专业技能的AI爱好者阅读。本书内容

第1章,生成对抗网络简介。这一章首先介绍GAN相关概念,包括判别网络、生成网络、博弈论等。然后介绍生成网络和判别网络的架构与目标函数、GAN的训练算法、Kullback-Leibler散度和Jensen-Shannon散度、GAN的评估矩阵、GAN存在的各种问题、梯度消失和梯度爆炸问题、纳什均衡、批归一化,以及GAN正则化。

第2章,使用3D-GAN生成图形。这一章简单介绍3D-GAN和其架构细节。这一章会训练一个可以生成现实世界3D图形的3D-GAN。编写代码获取3D ShapeNets数据集,进行数据清洗和训练预处理后,使用深度学习库Keras构建3D-GAN模型。

第3章,使用cGAN实现人脸老化。这一章介绍cGAN(conditional generative adversarial network,条件生成对抗网络)和Age-cGAN。首先介绍数据准备过程,包括数据下载、数据清洗以及数据格式处理。届时会用到IMDb Wiki Images数据集。然后编写代码,使用Keras框架构建一个Age-cGAN模型,并在IMDb Wiki Images数据集上进行训练。最后,用训练好的模型生成图片,只需输入年龄作为参数,模型就可以生成一个人在不同年龄的面部图像。

第4章,使用DCGAN生成动画人物。这一章首先介绍DCGAN以及数据准备过程,包括获取动画人物的数据集、数据清洗以及训练预处理。我们会在Jupyter Notebook内使用Keras构建一个DCGAN模型。然后介绍训练DCGAN的各种技术,以及超参数调优。最后使用训练好的模型生成动画人物,并讨论DCGAN的实际应用。

第5章,使用SRGAN生成逼真图像。这一章介绍如何训练SRGAN生成逼真图像。训练流程的第一步是收集数据集,然后是数据清洗和数据格式处理。这一章会介绍如何收集数据集、清洗数据,以及将数据处理成训练所需的格式。

第6章,StackGAN:基于文本合成逼真图像。这一章首先介绍StackGAN,然后介绍如何收集数据集、清理数据以及转换数据格式。数据准备好后,在Jupyter Notebook内编写代码用Keras构建StackGAN,并在CUB数据集上训练该模型。训练好的模型可以基于文本生成逼真图像。最后讨论StackGAN在行业中的应用,以及在生产环境中的部署。

第7章,使用CycleGAN将绘画转换为照片。这一章介绍如何训练一个CycleGAN模型将绘画转换为照片。首先介绍CycleGAN及其各种用法,然后讲解数据收集、数据清洗和数据格式处理的各种技术,接着在Jupyter Notebook内使用Keras构建CycleGAN,并在预备好的数据集上训练CycleGAN模型,之后检验模型将绘画转换为照片的水平,最后介绍CycleGAN的实际应用。

第8章,使用cGAN实现图像对图像变换。这一章介绍如何训练cGAN来实现图像对图像变换。首先介绍cGAN和各种数据处理技术,包括数据收集、数据清洗和数据格式处理,接着在Jupyter Notebook内使用Keras构建cGAN,然后介绍如何在预备好的数据集上训练cGAN。训练中会尝试不同的超参数。最后测试cGAN,并讨论图像对图像变换的实际应用。

第9章,预测GAN的未来。介绍过GAN的基本原理并且完成了7个项目之后,最后这一章来预测GAN的前景:首先介绍近几年GAN应用所取得的成就和受欢迎程度,然后谈一下我对GAN未来的看法。如何使用本书

阅读本书需要熟悉深度学习和Keras,并对TensorFlow有一定了解。如果有Python 3的编程经验会更好。下载示例代码文件

如果你是从http://www.packtpub.com网站购买的图书,登录自己的账号后就可以下载所有已购图书的示例代码。如果你是从其他地方购买的图书,请访问http://www.packtpub.com/support网站并注册,我们会将代码文件直接发送到你的电子邮箱。

你可以通过以下步骤下载代码文件。

(1) 在我们的网站上登录或注册。

(2) 选择SUPPORT标签。

(3) 点击Code Downloads & Errata。

(4) 在Search框中输入书名并按屏幕上的提示操作。

文件下载后,使用以下工具的最新版本来解压缩或提取文件夹。● WinRAR/7-Zip(Windows)● Zipeg/iZip/UnRarX(Mac)● 7-Zip/PeaZip(Linux)

本书代码也托管在GitHub上,访问https://github.com/PacktPublishing/Generative-Adversarial-Networks-Projects即可获取1。Packt拥有丰富的图书和视频资源,相关代码见GitHub仓库:https://github.com/PacktPublishing/。欢迎查阅!

1可以直接访问本书中文版页面,下载本书项目的源代码:http://www.ituring.com.cn/book/2681。——编者注排版约定

本书使用了多种文本样式。

正文中的代码采用以下样式:“使用scipy的loadmat()函数来检索体素。”

代码块的样式如下所示。import scipy.io as iovoxels = io.loadmat("path to .mat file")['instance']

命令行输入或输出如下所示。pip install -r requirements.txt

黑体字:用于新术语或重要的词语。 此图标表示警告或需要特别注意的内容。 此图标表示提示或技巧。联系我们

一般反馈:发送邮件至feedback@packtpub.com并在主题处注明书名。如果对于本书有任何疑问,请发送邮件至questions@packtpub.com。

勘误:尽管我们尽力确保内容准确,但出错仍在所难免。如果你在书中发现错误,不管是文本还是代码,请告知我们,我们不胜感激。如果你发现任何错误,请访问http://www.packtpub.com/submit-errata,选择书名,点击Errata Submission Form链接,并输入详细说明。

反盗版:如果你发现我们的作品在互联网上被以任何形式非法复制,请立即向我们提供地址或网站名称,非常感谢。请把可疑盗版材料的链接发至copyright@packtpub.com。

成为作者:如果你掌握某个领域的专业知识,并且有兴趣写作图书,请访问authors.packtpub.com。评论

欢迎评论。阅读、使用本书后,请在购买网站上留下评论。这样潜在读者可以参考你的意见来决定是否购买,Packt可以了解你对该产品的看法,作者也能看到你对本书的反馈。谢谢!

想了解关于Packt的更多信息,请访问packtpub.com。电子书

扫描如下二维码,即可购买本书电子版。第 1 章 生成对抗网络简介

本章介绍生成对抗网络(GAN),这是一种使用无监督机器学习算法生成数据的深度神经网络架构。2014年,Ian Goodfellow、Yoshua Bengio和Aaron Courville在论文“Generative Adversarial Nets”中首次提出了GAN。GAN有多种应用,包括图像生成和药物开发等。

本章会介绍GAN的核心组件及其工作原理、GAN背后的重要概念和技术、GAN的优势和缺陷,以及GAN的实际应用。

本章将探讨以下主题。● 什么是GAN● GAN架构● GAN相关的重要概念● GAN的不同变体● GAN的优缺点● GAN的实际应用1.1 什么是GAN

GAN是一种由生成网络和判别网络组成的深度神经网络架构。通过在生成和判别之间多次循环,两个网络相互对抗,试图胜过对方,从而训练了彼此。1.1.1 什么是生成网络

生成网络使用现有数据生成新数据,比如使用现有图像来生成新图像。生成网络的核心任务是从随机生成的由数字构成的向量(称为“潜在空间”,latent space)中生成数据(比如图像、视频、音频或文本)。在构建生成网络时需要明确该网络的目标,例如生成图像、文本、音频、视频,等等。1.1.2 什么是判别网络

判别网络试图区分真实数据和由生成网络生成的数据。对于输入的数据,判别网络需要基于事先定义的类别对其分类。这可能是多分类或二分类。通常,GAN中进行的是二分类。1.1.3 GAN通过对抗竞赛进行训练

GAN中的网络通过对抗竞赛进行训练:两个网络互相竞争。例如用GAN生成艺术品赝品。

(1) 第一个网络,即生成网络,并未见过艺术品实物,但试图生成形似艺术品实物的作品。

(2) 第二个网络,即判别网络,试图判断一件艺术品是真品还是赝品。

(3) 生成网络在不断迭代中生成看起来更加真实的艺术品,试图骗过判别网络,让它相信这些生成的赝品是真品。

(4) 判别网络不断优化区分真假的标准,试图胜过生成网络。

(5) 在每轮迭代中,它们会将自己所做调整中的成功尝试反馈给对方,这就是GAN的训练过程。

(6) 最终,在判别网络的帮助下,生成网络已经训练得让判别网络无法区分哪件是真品、哪件是赝品了。

在该竞赛中,两个网络是同时受训的。当判别网络无法区分真品和赝品时,该网络就进入了一种名为“纳什均衡”的状态。本章稍后会详述。1.2 GAN的实际应用

GAN的一些实际应用非常实用,例如下面这些。● 图像生成。在简单的图像数据上训练后的生成网络可生成逼真的

图像。例如想生成新的狗狗图像,就可以在成千上万的狗狗图像

的数据集上训练一个GAN。训练完成之后,生成网络就可以生

成一些不同于训练集的新图像。图像生成可用于市场营销、logo

制作、娱乐和社交媒体等领域。下一章会介绍动画人物面部图像

的生成。● 文本到图像的合成。GAN的一个有趣应用是基于文本生成图

像。这对于电影行业来说很有用,因为GAN可以基于一段文本

生成新的图像数据。对于漫画行业,它甚至可以自动生成一段故

事。● 人脸老化。该应用对娱乐行业和监控领域都很有用,尤其是对于

人脸验证方面,因为企业无须在员工的年龄增长之后更新安防系

统了。Age-cGAN可以生成不同年龄的图像,可用于构建强大的

人脸验证模型。● 图像到图像的变换。图像到图像的变换可用于将白天拍摄的图像

转换成夜晚拍摄的图像,将草图转换成绘画,将图像转换成毕加

索或者梵高的风格,将航拍图自动转换成卫星图像,以及把马的

图像转换成斑马的图像,等等。这些应用有助于节约时间,非常

具有开创性。● 视频合成。GAN也可以用于生成视频。用GAN生成内容快于人

工创作,可以提高电影制作效率,也能帮助那些希望在业余时间

制作创意视频的爱好者。● 高清图像生成。GAN可以为用低像素相机拍摄的照片生成高清

版,同时不损失任何关键细节。这有助于设计网站。● 补全缺损图像。如果图像缺失了某些部分,GAN可以帮助恢

复。1.3 GAN的具体架构

GAN主要由两部分构成:生成网络和判别网络。每个网络都可以是任何神经网络,比如普通的人工神经网络(artificial neural network,ANN)、卷积神经网络(convolutional neural network,CNN)、循环神经网络(recurrent neural network,RNN)或者长短期记忆(long short term memory,LSTM)网络。判别网络则需要一些全连接层,并且以分类器收尾。

下面详细介绍GAN架构的组件。以一个简单的GAN为例。1.3.1 生成网络的架构

这个简单的GAN中的生成网络是一个5层的简单前馈神经网络(feed-forward neural network),含1个输入层、3个隐藏层以及1个输出层,具体配置见表1-1。

表 1-1层序层名称配置号input_shape=(batch_size, 100), 1输入层output_shape=(batch_size, 100)neurons=500, input_shape=(batch_size, 100), 全连接2output_shape=(batch_size, 500)层neurons=500, input_shape=(batch_size, 500), 全连接3output_shape=(batch_size, 500)层neurons=784, input_shape=(batch_size, 500), 全连接4output_shape=(batch_size, 784)层input_shape=(batch_size, 784), 5输出层output_shape=(batch_size, 28, 28)

上表列出了网络中输入层、隐藏层以及输出层的配置情况。

图1-1展示了生成网络里的张量(tensor)流,以及每一层输入和输出的张量的形状。

图1-1 生成网络的架构

该前馈神经网络通过正向传播处理信息的过程如下。● 输入层从正态分布采样一个100维的向量,不做任何修改,直接

传递给第一个隐藏层。● 3个隐藏层分别是具有500、500和784个单元的全连接层。第1个

隐藏层将一个形状为(batch_size, 100)的张量变换成(batch_size,

500)。● 第2个隐藏层(基于上一层输出的结果)将张量形状变换为

(batch_size, 500)。● 第3个隐藏层继续将张量形状变换为(batch_size, 784)。● 最后的输出层将张量的形状从(batch_size, 784)变换为

(batch_size, 28, 28)。这意味着该神经网络会生成一批图像,其

中每张图像的形状为(28, 28)。1.3.2 判别网络的架构

该GAN中的判别网络是一个5层的前馈神经网络,包括1个输入层、1个输出层以及3个全连接层。判别网络是一个分类器,和生成网络有些区别。它会处理图像,然后输出该图像属于某个类别的概率。

图1-2展示了判别网络中的张量流,以及每一层输入和输出的张量的形状。

图1-2 判别网络的架构

判别网络在训练过程中利用正向传播来处理数据的过程如下。

(1) 首先读取一个形状为28×28的张量输入。

(2) 输入层接收形状为(batch_size, 28, 28)的输入张量,不做任何修改,直接传递给第一个隐藏层(扁平化层)。

(3) 扁平化层将该张量转换成784维,然后将其传递给第一个隐藏全连接层。经过前两个隐藏层的处理,张量转换成了500维。

(4) 最后一层是输出层,也是全连接层,只有一个单元(神经元),使用sigmoid激活函数。它只输出0或1:输出0意味着判别网络认为输入图像是假的;输出1意味着判别网络认为输入图像是真的。1.3.3 GAN相关重要概念

前面介绍了GAN的架构,下面简单介绍一些重要概念。首先介绍KL(Kullback-Leibler)散度和JS(Jensen-Shannon)散度,它们是评估模型质量的重要手段;然后介绍纳什均衡,这是在训练过程中希望达到的状态;最后重点介绍目标函数,理解目标函数有助于实现GAN。1. KL散度KL散度,也称相对熵,用于判定两个概率分布之间的相似

度。它可以测量一个概率分布相对于另一个概率分布的偏离。如下公式用于计算两个概率分布和之间的KL散度。如果和处处相等,则此时KL散度为0,达到最小值。由于KL散度具有不对称性,因此不用于测量两个概率分布

之间的距离,因此也不用作距离的度量(metric)。2. JS散度JS散度,也称信息半径(information radius,IRaD)或者平

均值总偏离(total divergence to the average),是测量两个概率

分布之间相似度的另一种方法。它基于KL散度,但具有对称

性,可用于测量两个概率分布之间的距离。对JS散度开平方即

可得到JS距离,所以它是一种距离度量。计算两个概率分布和之间JS散度的公式如下。其中,是和的中点测度,是KL散度。介绍过了KL散度和JS散度,下面介绍GAN中的纳什均衡。3. 纳什均衡博弈论中的纳什均衡描述了一种在非合作博弈中可以达到的

特殊状态。其中每个参与者都试图基于对其他参与者行为的预判,

选择使自己获益最多的最佳策略。最终形成的局面是,所有参与

者都基于其他参与者的选择,采取了对自己来说最佳的策略,此

时已经无法通过改变策略获益了。这种状态就称为纳什均衡。达到纳什均衡的一个著名例子是囚徒困境。两名犯罪嫌疑人(A和B)因为犯罪被逮捕了,分别关在不同的牢房,无法互相交

流。检察官的证据只够将他们以较小的罪名定罪,而无法以主要

罪行定罪(如果可以的话就会在监狱里关很久)。为了能以主要

罪行定罪,检察官给他们提供了如下选择。● 如果A和B同时检举对方的主要罪行,他们都会被关押2年。● 如果A检举了B而B选择保持沉默,A会被直接释放,而B会被关押3年(反之亦然)。● 如果A和B都选择保持沉默,他们会因为较小罪名而都被关押1年。从这3种结果来看,对于A、B两人整体而言,最佳结果显然

是都选择保持沉默,然后都被关押1年。然而选择保持沉默的风

险在于,他俩都不知道对方是否也会选择保持沉默。这样对于两

人来说最佳策略其实是检举对方,因为在任何情况下这样做都是

好处更大而惩罚更小。这样的局面一旦形成,任何罪犯都无法通

过改变策略来获得任何好处,也就达到了纳什均衡。4. 目标函数为了使生成网络生成的图像能以假乱真,应尽量提高生成网

络所生成数据和真实数据之间的相似度。可使用目标函数测量这

种相似度。生成网络和判别网络各有目标函数,训练过程中也分

别试图最小化各自的目标函数。GAN最终的目标函数如下所

示。其中,是判别网络模型,是生成网络模型,是真实数据分布,

是生成网络生成的数据分布,是期望输出。在训练过程中,(判别网络,discriminator)试图最大化公

式的最终取值,而(生成网络,generator)试图最小化该值。

如此训练出来的GAN中,生成网络和判别网络之间会达到一种

平衡,此时模型即“收敛”了。这种平衡状态就是纳什均衡。训

练完成之后,就得到了一个可以生成逼真图像的生成网络。1.3.4 评分算法

GAN的准确度容易计算。GAN的目标函数不是均方误差(mean-square error)或者交叉熵(cross entropy)这样确定的函数,而是在训练过程中习得的。研究者们提出了多种可以测量模型准确度的评分算法,下面介绍其中几个。1. Inception分数Inception分数(IS)是应用最广泛的GAN评分算法。它使用

一个在Imagenet上预训练过的Inception V3网络分别提取真实图

像和生成图像的特征。Shane Barrat和Rishi Sharma在论文“A

Note on the Inception Score”中首次提出了该方法。IS测量生成

图片的质量和多样性。计算IS的公式如下。其中,表示一个概率分布,表示是该概率分布中的一个抽样。

是条件类别分布,是边缘类别分布。计算Inception分数的步骤如下。(1) 首先从模型生成的图像中抽取个样本,记为。(2) 然后使用如下公式构建边缘类别分布。(3) 接着使用如下公式计算KL散度以及期望值。(4) 最后计算上述结果的指数,即可得到IS。IS越高,说明模型质量越好。IS虽然是重要的测度(measure),却也存在一些问题。比如模型对于每个类别只生成

一张图像,其IS仍然可以很高,但这样的模型缺乏多样性。为了

解决该问题,人们又提出了其他一些性能测度,稍后会介绍其中

一种。2. Fréchet Inception距离为了克服Inception分数的一些缺陷,Martin Heusel等人在论

文“GANs Trained by a Two Time-Scale Update Rule Converge

to a Local Nash Equilibrium”中提出了Fréchet Inception距离(Fréchet Inception Distance,FID)。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载