gan

深度卷积对抗生成网络(DCGAN)

旧时模样 提交于 2019-12-05 09:58:24
注:有时间去看英文原版。 本文是参考文献[1]的论文笔记。 卷积神经网络在有监督学习中的各项任务上都有很好的表现,但在无监督学习领域,却比较少。本文介绍的算法将有监督学习中的CNN和无监督学习中的GAN结合到了一起。 在非CNN条件下,LAPGAN在图像分辨率提升领域也取得了好的效果。 与其将本文看成是CNN的扩展,不如将其看成GAN的扩展到CNN领域。而GAN的基本算法,可以参考 对抗神经网络 。 GAN无需特定的cost function的优势和学习过程可以学习到很好的特征表示,但是GAN训练起来非常不稳定,经常会使得生成器产生没有意义的输出。而论文的贡献就在于: 为CNN的网络拓扑结构设置了一系列的限制来使得它可以稳定的训练。 使用得到的特征表示来进行图像分类,得到比较好的效果来验证生成的图像特征表示的表达能力 对GAN学习到的filter进行了定性的分析。 展示了生成的特征表示的向量计算特性。 模型结构 模型结构上需要做如下几点变化: 将pooling层convolutions替代,其中,在discriminator上用strided convolutions替代,在generator上用fractional-strided convolutions替代。 在generator和discriminator上都使用batchnorm。 解决初始化差的问题 帮助梯度传播到每一层

深度 | 生成对抗网络初学入门:一文读懂GAN的基本原理(附资源)

断了今生、忘了曾经 提交于 2019-12-05 09:57:24
文章来源 机器之心公众号 http://mp.weixin.qq.com/s/4CypEZscTfmUzOk-p_rZog 2017-09-10 Roman Trusov 机器之心 选自 Sigmoidal 作者:Roman Trusov 机器之心编译 参与:Panda 生成对抗网络是现在人工智能领域的当红技术之一。近日,Sigmoidal.io 的博客发表了一篇入门级介绍文章,对 GAN 的原理进行了解释说明。另外,在该文章的最后还附带了一些能帮助初学者自己上手开发实验的资源(包含演讲、教程、代码和论文),其中部分资源机器之心也曾有过报道或解读,读者可访问对应链接查阅。 你怎么教一台从未见过人脸的机器学会绘出人脸?计算机可以存储拍字节级的照片,但它却不知道怎样一堆像素组合才具有与人类外表相关的含义。 多年以来,已经出现了很多各种各样旨在解决这一问题的生成模型。它们使用了各种不同的假设来建模数据的基本分布,有的假设太强,以至于根本不实用。 对于我们目前的大多数任务来说,这些方法的结果仅仅是次优的。使用隐马尔可夫模型生成的文本显得很笨拙,而且可以预料;变分自编码器生成的图像很模糊,而且尽管这种方法的名字里面有「变」,但生成的图像却缺乏变化。所有这些缺陷都需要一种全新的方法来解决,而这样的方法最近已经诞生了。 在这篇文章中,我们将对生成对抗网络(GAN)背后的一般思想进行全面的介绍

[GAN01]GAN原理介绍并使用Keras实现DCGAN基于Mnist数据集的图像生成

别等时光非礼了梦想. 提交于 2019-12-05 09:55:15
前言 打算开坑实现一系列GAN,并基于这些模型对GAN的原理进行深入理解与挖掘。 第一篇是DCGAN。 理论部分 GAN的原理 从图中可以看到,GAN分为两部分,生成器和辨别器。 生成器与辨别器 生成器的目的是利用噪音生成以假乱真的图片,因此,其输入是无意义的噪音,输出是利用该噪音生成的图片。 辨别器的目的是区分出生成器生成的图片与真正的图片,因此,其输入是两种图片,输出是两种图片对应的种类(fake or real)。 生成器是如何利用噪音生成图片的? 我们希望生成的图片可以看作在空间中按照一定概率密度Pd(x)分布的高维张量。 注意这个概率分布不能简单的理解为X∈(长,宽,通道),y∈[0,1]的一个概率分布,我们学习到的是一种更为高维与复杂的分布,它至少包含了一部分像素之间的关系(因为用到了超过1*1的卷积核)。 如果用能够用概率函数Pg(x)拟合出这个高维分布,就能够利用噪音生成所需图片,至于如何拟合有两种思路。 一是自编码器(Auto Encoder)和变分编码器(VAE)的思路,个人认为这种思路的本质就是在做极大似然拟合,也就是说,通过采样,让样本点出现概率最大来调整参数,最终对真正分布进行拟合。李宏毅讲,因为只是根据pd(x)与pg(x)之间的距离进行调整,所以这种做法的问题是生成器比较死板,即使是距离相同的分布,可能实际效果是大不相同的。 二是对抗生成神经网络

pytorch GAN生成对抗网络

风流意气都作罢 提交于 2019-12-05 09:45:08
import torch import torch.nn as nn from torch.autograd import Variable import numpy as np import matplotlib.pyplot as plt torch.manual_seed(1) np.random.seed(1) BATCH_SIZE = 64 LR_G = 0.0001 LR_D = 0.0001 N_IDEAS = 5 ART_COMPONENTS = 15 PAINT_POINTS = np.vstack([np.linspace(-1,1,ART_COMPONENTS) for _ in range(BATCH_SIZE)]) def artist_works(): a = np.random.uniform(1,2,size=BATCH_SIZE)[:,np.newaxis] paintings = a*np.power(PAINT_POINTS,2) + (a-1) paintings = torch.from_numpy(paintings).float() return Variable(paintings) G = nn.Sequential( nn.Linear(N_IDEAS,128), nn.ReLU(), nn.Linear(128,ART

50 行 PyTorch 代码搞定 GAN

只谈情不闲聊 提交于 2019-12-05 09:44:52
最近,一篇非常火的报道,使用pytorch 加 50 行核心代码模拟 GAN 对抗神经网络,自己尝试走了一遍,并对源码提出自己的理解。原文链接如下 https://medium.com/@devnag/generative-adversarial-networks-gans-in-50-lines-of-code-pytorch-e81b79659e3f#.nr3akui9z code 地址 https://github.com/devnag/pytorch-generative-adversarial-networks 首先配置pytorch, 这个直接去github 上的pytorch官网按照教程去配,链接地址 https://github.com/pytorch/pytorch 之后把code 下下来,直接运行就可以了。 数据的产生,正样本也就是使用一个均值为4,标准差为1.25的高斯分布, torch.Tensor(np.random.normal(mu, sigma, (1, n))) 负样本是随机数 torch.rand(m, n) 两个网路的定义,一个是生成网络,将其参数打印出来如下 Generator ( (map1): Linear (1 -> 50) (map2): Linear (50 -> 50) (map3): Linear (50 -> 1) ) 输入是

PyTorch教程之DCGAN

落花浮王杯 提交于 2019-12-05 09:36:33
原文连接: DCGAN TUTORIAL 简介 本教程通过例程来介绍 DCGANs 。我们使用名人照片来训练 GAN 网络使其能够生成新的名人。 这里使用的大部分代码都来自 pytorch/examples ,本篇教程会出该实现的详细介绍,并解释此模型为什么有效。不用担心,此教程不需要提前拥有 GAN 的相关知识,但是对第一个接触 GAN网络的人来说需要更多的时间来理解网络中究竟发生了什么。当然,为了节省时间,最好有一个或两个GPU来开始此教程。 Generative Adversarial Networks 什么是GAN GANs是一种训练深度学习模型学习数据分布规律的框架,我们可以通过学习到的分布来生成新的数据。GANs是由Goodfellow在2014年提出,并且在 Generative Adversarial Nets 进行了介绍。GAN 由两个完全不同的模型组成,一个生成器,一个判别器。生成器的作用是产生和训练样本类似的 “假”(fake)图片,判别器的工作是判别图片是来自训练集的真图片(real)还是来自生成器的假图片(fake)。在训练的过程中,生成器不断地使自己生成的假图片更接近真图片以便能够欺骗判别器,而判别器也不断提高自己的识别能力。这场博弈游戏的平衡情况是,当生成器生成的数据和训练数据足够相似,判别器以50%左右的置信度判别样本是真是假。

5-1对抗生成神经网络(GAN)--Keras实现

五迷三道 提交于 2019-12-05 09:33:09
点击查看完整代码 http://www.daimapi.com/neuralnetwork5_1/ 该代码利用Python3实现,利用到了深度学习工具包Keras。 Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端。Keras的主要特点:1.简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性);2.支持CNN和RNN,或二者的结合;3.无缝CPU和GPU切换。 # -*- coding: utf-8 -*- #DCGAN on MNIST using Keras import numpy as np import time from tensorflow.examples.tutorials.mnist import input_data from keras.models import Sequential from keras.layers import Dense, Activation, Flatten, Reshape from keras.layers import Conv2D, Conv2DTranspose, UpSampling2D from keras.layers import LeakyReLU, Dropout from keras.layers import

生成对抗网络(DCGAN, LSGAN, WGAN, WGAN-GP, SNGAN, RSGAN)TensorFlow实现

↘锁芯ラ 提交于 2019-12-05 09:32:50
Paper: DCGAN: Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks WGAN: Wasserstein GAN WGAN-GP: Improved Training of Wasserstein GANs LSGAN: Least Squares Generative Adversarial Networks SNGAN: Spectral normalization for generative adversarial networks RSGAN: The relativistic discriminator: a key element missing from standard GAN 损失函数如下表所示: DCGAN WGAN WGAN-GP LSGAN SNGAN RSGAN 五种GAN不同迭代次数生成样本,对比结果如下图所示: 代码具体请参看我的Github: https://github.com/MingtaoGuo/DCGAN_WGAN_WGAN-GP_LSGAN_SNGAN_RSGAN_RaSGAN_TensorFlow class GAN: #Architecture of generator and

基于Keras框架对抗神经网络DCGAN实践

时光毁灭记忆、已成空白 提交于 2019-12-05 09:29:51
1. 前言 金庸小说《射雕英雄传》中,周伯通被东邪“黄药师”困在桃花岛的地洞里。为了打发时间,周伯通就用左手与右手打架,自娱自乐。其武功决窍在于要先“左手画圆、右手画方”,分心二用,保证可以同时使出两种武功,从而使得武力倍增。 于是,一位名叫伊恩·古德费洛的美国人在2014年加拿大蒙特利尔大学读博士的时候想了这样一个方案,也就是说,在两个神经网络中进行“猫和鼠游戏”,一个不断地“造假”,一个不断“验真”,彼此相互追逐,在对抗中不断提高自身的本领。    常见的应用场景: 数据生成——解决数据缺失 在特定的应用场景下,例如医疗领域、能源行业工业化生产,缺少训练数据是应用深度学习的最大障碍。数据增强的传统做法是将原图像拉伸旋转剪切,但这毕竟还是原来的图像,通过使用GAN,能够生成更多类似的数据。 图像编辑 图像编辑好比“美图秀秀”软件中的各种滤镜的升级版,给出一张原始的妹子图片,可以生成出金发版,卷发版,微笑版,还能修改图片中的环境因素。 恶意攻击检测 通过给深度神经网络一些特异生产的训练数据,深度学习生成的模型是可以被黑客攻击,利用甚至控制的。为了对抗这样的逆向攻击(adversarialattacks),可以训练对抗神经网络去生成更多的虚假训练数据作为假想敌,让模型在演习中去识别出这些虚假数据,就如同人类打疫苗,GAN生成的虚假数据让正在做分类的模型更加稳健。 注意力预测

一篇读懂生成对抗网络(GAN)原理+tensorflow代码实现(花费10分钟,不要急躁)

半腔热情 提交于 2019-12-05 09:28:47
作者:JASON 2017.10.15 10分钟把故事说完!   生成对抗网络GAN(Generative adversarial networks)是最近很火的深度学习方法,要理解它可以把它分成生成模型和判别模型两个部分,简单来说就是:两个人比赛,看是 A 的矛厉害,还是 B 的盾厉害。 比如,有一个业余画家总喜欢仿造著名画家的画,把仿造的画和真实的画混在一起,然后有一个专家想办法来区分那些是真迹,那些是赝品。通过不断的相互博弈,业余画家的仿造能力日益上升,与此同时,通过不断的判断结果反馈,积累了不少经验,专家的鉴别能力也在上升,进一步促使业余专家的仿造能力大幅提升,最后使得业余专家的仿造作品无限接近与真迹,使得鉴别专家无法辨别,最后判断的 准确率为0.5 。   总的来说,Goodfellow等人提出的GAN是通过对抗过程来估计生成模型的框架。在这种框架下,我们需要同时训练两个网络,即一个能获取数据分布的生成模型G和一个估计数据来源于真实样本概率的判别模型D。生成器的训练目的是最大化判别器犯错误的概率,而判别器的训练过程是最小化犯错误的概率。因此这一过程存在一个 极大极小博弈(minimax game) 。在所有可能的G和D函数中,存在一个唯一均衡解。即生成模型可以生成训练样本相同的数据分布,而此时判别模型的概率处处为1/2。   当模型都为多层感知机时