没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
17页
生成对抗网络(Generative Adversarial Network,GAN)是一种由两个彼此对抗(因此有了名字中的对抗)的网络组成的深度神经网络结构。2014 年,Ian Goodfellow 和包括 Yoshua Benjio 在内的其他研究人员在蒙特利尔大学的一篇论文“Generative Adversarial Networks”中介绍了 GAN。提到 GAN,Facebook 的 AI研究总裁 Yann LeCun 称对抗训练是机器学习过去十年中最有趣的想法。GAN 潜力巨大,因为它可以学习模仿任何的数据分布。也就是说,可以训练 GAN 在包括图像、音乐、语言和文本在内的任何领域中创造与我们类似的世界。从某种意义上说,它们是机器人艺术家,它们的输出令人印象深刻(见 nytimes 网站)同时也让人们受到鼓舞。
资源推荐
资源详情
资源评论
生成对抗网络
生成对抗网络(Generative Adversarial Network,GAN)是一种由两个彼此对抗(因
此有了名字中的对抗)的网络组成的深度神经网络结构。
2014 年,Ian Goodfellow 和包括 Yoshua Benjio 在内的其他研究人员在蒙特利尔大学的
一篇论文“Generative Adversarial Networks”中介绍了 GAN。提到 GAN,Facebook 的 AI
研究总裁 Yann LeCun 称对抗训练是机器学习过去十年中最有趣的想法。
GAN 潜力巨大,因为它可以学习模仿任何的数据分布。也就是说,可以训练 GAN 在包
括图像、音乐、语言和文本在内的任何领域中创造与我们类似的世界。从某种意义上说,它
们是机器人艺术家,它们的输出令人印象深刻(见 nytimes 网站)同时也让人们受到鼓舞。
本章将主要包括以下几个主题。
直观介绍。
GAN 的简单实现。
深度卷积 GAN。
14.1 直观介绍
本节将会以非常直观的方式介绍生成对抗网络 GAN。为了了解 GAN 是如何运作的,
这里将采用一个获取活动门票的虚构场景。
故事从某个地方正在举行的非常有趣的活动开始,并且你很有兴趣参加。可你很晚
才听说这个活动,所有门票都已售罄,但是你想方设法也要参加活动。所以你想出了一
个主意。你想尝试伪造一张和原始门票完全相同或者非常相似的门票。但是生活并不是
国 14.2 GAN 的简单实现
313
这么容易的,这里还有另一个挑战:你不知道原始门票是什么样的。因此,根据你参加
此类活动的经验,你开始想象门票应该长什么样,并凭着想象开始设计门票。
你开始尝试设计门票,然后去参加活动并向保安人员出示门票,你希望他们能够相
信你并且放你进去。但是你不想多次向保安人员展示你的面孔,所以你决定从朋友那里
获取帮助,他们会带着你凭空设计的门票去参加聚会并向保安人员出示。如果保安人员
不让他进去,他将会通过查看一些拿着真实门票入场的人,来获取一些关于门票外观的
信息。你将会根据朋友的评论来调整门票,直到保安人员让他进去。此时,仅在此时,
你将设计另一张完全相同的门票,然后自己拿着它入场。
不要过多考虑这个故事有多么不现实,事实上 GAN 的运行方式就和这个故事非常
相似。GAN 如今非常流行,人们正在将它们用于计算机视觉领域的很多应用中。
有很多有趣的应用会使用到 GAN,这里将会提及并实现其中的一些。
GAN 中有两个主要组件,它们在众多计算机视觉领域取得了突破。第一个组件叫作
生成器,第二个叫作判别器,如图 14.1 所示。
生成器将会尝试从某个特定概率分布中产生数据样本,这与前面提到的尝试复制
活动门票的人非常相似。
判别器将会判别(就像前面试图通过在门票中找到漏洞,来判断门票真伪的安保
人员)输入是来自于原始的训练集(原始门票),还是来自于生成器部分(被尝
试复制原始门票的人设计出来的)。
图 14.1 GAN 通用结构
14.2 GAN 的简单实现
从伪造活动门票的故事中,可以非常直观地看出 GAN 的思想。为了清楚地理解 GAN
第 14 章 生成对抗网络
314
是如何工作的以及如何实现它们,本节将会在 MNIST 数据集上演示 GAN 的一个简单实现。
首先,需要构建 GAN 网络的核心,它由两个主要部分组成:生成器和判别器。生
成器将会尝试从某个特定的概率分布中想象或者伪造数据样本;而可以访问和查看实际
数据样本的判别器将会判断生成器的输出是在设计中存在缺陷还是它与原始数据样本非
常接近。与前面的活动场景相似,生成器的整个目的就是使得判别器相信生成的图像是
来自真实数据集的,以此来试图欺骗判别器。
训练过程和前面的故事有着相似的结尾,生成器最终将会设法生成与原始数据样本
看起来非常相似的图像。
图 14.2 显示了 GAN 的典型结构,将在 MNIST 数据集上训练 GAN。图 14.2 中的隐藏
样本部分是一个随机想法或者向量,生成器将会使用它来从真实图像中复制出虚假图像。
图 14.2 针对 MNIST 数据集的通用 GAN 架构
正如前文提到的,作为一个判断者,判别器将尝试从生成器设计的虚假图像中分
辨出真实图像。所以这个网络将产生一个二值输出,二值输出可以使用 sigmoid 函数
来表示(0 表示输入的是虚假图像,1 表示输入的是真实图像)。
现在继续实现这个架构,看它在 MNIST 数据集上的表现如何。
从导入此实现所需的库开始。
%matplotlib inline
import matplotlib.pyplot as plt
import pickle as pkl
import numpy as np
import tensorflow as tf
国 14.2 GAN 的简单实现
315
因为这里使用了 MNIST 数据集,所以将会使用 TensorFlow 辅助函数来获取数据集,
并将它存储在某处。
from tensorflow.examples.tutorials.mnist import input_data
mnist_dataset = input_data.read_data_sets('MNIST_data')
输出如下。
Extracting MNIST_data/train-images-idx3-ubyte.gz
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
14.2.1 模型输入
在深入构建由生成器和判别器表示的 GAN 的核心之前,先定义计算图的输入。如
图 14.3 所示,需要两个输入:一个输入是真实图像,会把它提供给判别器;另一个输入称
为隐空间,会将它提供给生成器,并用于生成虚假图像。
# Defining the model input for the generator and discrimator
def inputs_placeholders(discrimator_real_dim, gen_z_dim):
real_discrminator_input = tf.placeholder(tf.float32, (None,
discrimator_real_dim), name="real_discrminator_input")
generator_inputs_z = tf.placeholder(tf.float32, (None, gen_z_dim),
name="generator_input_z")
return real_discrminator_input, generator_inputs_z
图 14.3 在 MNIST 数据集上实现的 GAN 架构
下面开始深入构建 GAN 架构的两个核心组件。首先从构建生成器部分开始。如图
剩余16页未读,继续阅读
资源评论
- 护涵2024-01-22#完美解决问题 #内容详尽
- m0_682644212024-01-02这个资源对我启发很大,受益匪浅,学到了很多,谢谢分享~
- 普通网友2024-03-28资源很赞,希望多一些这类资源。
好知识传播者
- 粉丝: 492
- 资源: 4204
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功