专栏名称: 量子位
վ'ᴗ' ի 追踪AI行业和技术动态,这里更快一步!关注我们,回复“今天”,更多大新闻等你来发现
目录
相关文章推荐
zartbot  ·  从AI落地的视角看看Infra的需求 ·  昨天  
zartbot  ·  从AI落地的视角看看Infra的需求 ·  昨天  
黄建同学  ·  HeyGen ... ·  昨天  
爱可可-爱生活  ·  [LG]《Exploring ... ·  2 天前  
51好读  ›  专栏  ›  量子位

GAN入门教程 | 从0开始,手把手教你学会最火的神经网络

量子位  · 公众号  · AI  · 2017-06-17 13:36

正文

请到「今天看啥」查看全文



https://www.tensorflow.org/

在学习这个教程之前,希望你可以了解一些TensorFlow的知识。如果之前没有接触过它,建议你先看看相关的文章和教程。

加载MNIST数据

首先,我们需要给判别器输入一系列真实的手写数字图像,算是给判别器的一个参考。这里使用的是深度学习基准数据集MNIST,这是一个手写数字图片数据库,每一张都是0-9的单个数字,且每一张都是抗锯齿(Anti-aliasing)的灰度图。数据库中包含美国国家标准与技术研究所收集的人口调查局员工和高中生写的70000张数字图像。

MNIST数据集链接(英文):
http://yann.lecun.com/exdb/mnist/

我们从导入TensorFlow和其他有用的数据库开始讲起。首先我们需要用TensorFlow的便捷函数导入MNIST的图像,不妨把这个函数称为read_data_sets。

我们创造的MNIST的变量包含图像和标签,并将数据集分为训练集和验证集(不过在本教程里我们并不需要考虑标签这个事情)。我们可以通过调用mnist上的next_batch进行检索,现在我们先加载一张图片看看。

这张图像一开始被格式化为一列784像素,我们可以将它们改造成28×28像素的图像并且用PyPlot查看。

如果你再次运行上面的cell,你会发现和MNIST训练集不同的图像。

判别网络

判别器是一个卷积神经网络,接收图片大小为28×28×1的输入图像,之后返还一个单一标量值来描述输入图像的真伪——判断到底是来自MNIST图像集还是生成器。

判别器的结构与TensorFlow的样例CNN分类模型密切相关。它有两层特征为5×5像素特征的卷积层,还有两个全连接层按图像中每个像素计算增加权重的层。

创建了神经网络后,通常需要将权重和偏差初始化,这项任务可以在tf.get_variable中完成。权重在截断正态分布中被初始化,偏差在0处被初始化。

tf.nn.conv2d()是TensorFlow中的标准卷积函数,它包含四个参数:首个参数就是输入图像(input volume),也就是本示例中的28×28像素的图片;第二个参数是滤波器/权矩阵,最终你也可以改变卷积的“步幅”和“填充”。这两个参数控制着输出图像的尺寸大小。

其实上面这些就是一个普通简单的二进制分类器,如果你不是初次接触CNN,应该对此并不陌生。

定义了判别器之后,我们需要回头看看生成模型。我们将以Tim O’Shea编写的简单生成器代码为基础构建模型的整体结构。

Code链接:
https://github.com/osh/KerasGAN

其实你可以把生成器想象成反向卷积神经网络的一种。判别器就是一个典型的CNN,它能将二维或三维的像素值矩阵(matrix of pixel values)转化成一个概率。然而作为一个生成器,需要d-维度向量 d-dimensional vector ,并需要将其变为28*28的图像。ReLU和批量标准化(batch normalization)也经常用于稳定每一层的输出。







请到「今天看啥」查看全文