TensorFlow练习24: GANs-生成对抗网络 (生成明星脸)

GANs是Generative Adversarial Networks的简写,中文翻译为生成对抗网络,它最早出现在2014年Goodfellow发表的论文中:Generative Adversarial Networks。GANs是目前深度学习领域最火的网络模型,苹果最近发布的第一篇论文就是关于GANs的:SimGAN。

简单来说,GANs会学着生成和训练数据相似的数据,一个最典型的应用是生成图像。假设你有一堆猫的图片,你使用这些图片训练GANs,之后它会生成和训练数据相类似的猫的图片(它习的了猫的特征)。

GANs用到机器学习的两种模型:Generative生成模型和Discriminative判别模型。

GANs类比:假设G是大伪艺术家,以制作古董赝品为生,G的终极目标是以假乱真。但是呢,又有一些人以鉴宝为生(D)。开始你给D展示了一些古董真品,告诉D这是正品。然后G开始制作赝品,想骗过D,让他分辨不出真假。随着D看到越来越多的真品,G要骗过D就越来越难,当然,G也不是吃闲饭的,它会加倍努力的试图骗过D。随着这种对抗的持续,不仅D鉴宝的本领提高了,G也会越来越擅长制作赝品。这就是名字中生成-对抗的意思。

判别模型可以判断数据属于哪一类,例如<TensorFlow练习23: 恶作剧>训练的CNN模型可以判断一张脸是不是我的脸。相反,生成模型不用预先知道分类,它可生成最符合训练样本分布的新样本。例如高斯混合模型,经过训练,它生成的随机数据符合训练样本的分布。

GANs简单图示:

生成对抗网络GANs

GAN相关代码实现:

一个TensorFlow代码示例(生成明星脸-EBGAN)

使用的数据集:Large-scale CelebFaces Attributes (CelebA) Dataset,这个数据集包含20万明星脸,可用来做人脸检测、人脸特征识别等等任务。

下载地址:Google DriveBaidu云

TensorFlow练习24: GANs-生成对抗网络 (生成明星脸)

代码:

fake_image23000 fake_image19002

2000step就出现了人脸的雏型,接着练吧,再改改参数。

ps.昨天做梦,梦见自己变成矩阵了,太诡异了。

如要转载,请保持本文完整,并注明作者@斗大的熊猫和本文原始地址: http://blog.topspeedsnail.com/archives/10977

相关文章

《TensorFlow练习24: GANs-生成对抗网络 (生成明星脸)》有6个想法

  1. discriminator
    卷机单元|输入|输出
    ——|—|—|
    5×5 | 512 | 256
    5×5 | 256 | 128
    5×5 | 128 | 64
    5×5 | 64 | 3

    genetator

    4×4 | 64 | 32
    4×4 | 128 | 64
    4×4 | 128 | 64
    4×4 | 64 | 32
    4×4 | 32 | 3

    但是卷积层的计算有一个公式:
    $$ (W + 2P – F)/S + 1 $$
    其中W是输入图像的大小, F是卷机单元的大小,Stride是步长,P是Padding
    (https://github.com/vlfeat/matconvnet/issues/85)
    但是这样按照这个公式算出来的上面的貌似不对,求博主有空解释一下,这个代码中的网络层是怎么设计的?
    谢谢!


    230 : g_loss, _ = sess.run([G_loss, train_op_G], feed_dict={noise: batch_noise, X: get_next_batch(j), train_phase: True})
    是不是重复了?


    line 241
    for k in range(5):
    image = images[k, :, :, :]
    为什么用5重循环

发表评论

电子邮件地址不会被公开。 必填项已用*标注