gan

pytorch1.0实现GAN

匿名 (未验证) 提交于 2019-12-02 23:52:01
import torch import torch.nn as nn import numpy as np import matplotlib.pyplot as plt # 超参数设置 # Hyper Parameters BATCH_SIZE = 64 LR_G = 0.0001 # learning rate for generator LR_D = 0.0001 # learning rate for discriminator N_IDEAS = 5 # think of this as number of ideas for generating an art work (Generator) ART_COMPONENTS = 15 # it could be total point G can draw in the canvas PAINT_POINTS = np.vstack([np.linspace(-1, 1, ART_COMPONENTS) for _ in range(BATCH_SIZE)]) # show our beautiful painting range # plt.plot(PAINT_POINTS[0], 2 * np.power(PAINT_POINTS[0], 2) + 1, c='#74BCFF', lw=3, label=

DualGan

匿名 (未验证) 提交于 2019-12-02 23:34:01
DualGan 这篇文章的灵感来源是Xia et al 提出的一篇做机器翻译的文章NIP Dual【2】。这篇文章的一个例子很好的解释了对偶的思想。首先假设我们有两个人A和B,A会英文不会法语,B会法语不会英文。A要和B进行交流,A写了一段话,通过翻译器GA翻译成法语,但A看不懂法语,只能将翻译的结果直接发给B;B收到这段话之后,用自己的理解整理了一下,通过翻译器GB翻译成英文直接发给A;A收到之后,要检查B是否真正理解自己说的话。如此往复几次,A和B都能确认对方理解了自己。在这个例子中,翻译器A和B分别是两个生成器,A和B分别担任了判别器的角色。 原始GAN存在的问题 在wgan这篇文章中系统的阐述了原始GAN存在的一些问题。 (1)当我们通过最小化 来训练G时会出现 难训练、无法优化G 的问题   由于实际上Pg与Pdata很难有不可忽略的重叠,当D太强时,我们发现JS散度就固定是常数log2,C(G)就为一个固定值,所以导致G梯度消失。当D太弱时,会导致G梯度不准,四处乱跑。所以G和D必须同步得很好才行。 (2)原始GAN提出了优化方案:通过最小化 来训练G。但会出现 梯度不稳定、模型崩溃 的问题   在原始GAN的距离度量 方式下,G的loss可以被化简成一下形式:    从上面这个式子,我们可以看到在最优D时

GAN在蛋白质设计上的应用(二)

巧了我就是萌 提交于 2019-12-02 23:22:41
WGAN(Wasserstein GAN) 1.传统GAN的问题 在上一篇学习GAN的博客中,我已经说了GAN所存在的问题,对于从data和artifacts中取样出的x来说,它们的分布很难有不可忽略的重叠部分,于是就会导致JS divergence一直取log2这个最大值,意思是Generator生成的样本分布与真实的样本分布是完全没有交集的;例如下图,虽然在我们看来G1到G50的generator已经改进了许多--已经能够生成更加接近真实分布的样本分布了,但是对于Discriminator,它们的交集还是完全不存在,即Discriminator无法分辨出G1和G50的好坏,也就无法提供给Generator一个有效的方向让它去完成Gradient Descent,我们发现这时候JSD的Gradient是0,也就是发生了梯度消失问题。那么现在我们需要一个改进后的目标函数使其能够真正衡量两个分布之间的距离,这个距离也就是今天的Wasserstein Distance. 2.Wasserstein Distance(Earth-Mover Distance) 首先给出Wasserstein Distance的表达式: 乍一看好像很复杂,我也是第一眼看到这个式子完全不知道是什么意思,可以先来打个比方,有一堆土Pr,我们要把这堆土按照要求堆成另外的一个样子Pg

一文读懂对抗生成学习(Generative Adversarial Nets)[GAN]

匿名 (未验证) 提交于 2019-12-02 23:03:14
一文读懂对抗生成学习(Generative Adversarial Nets)[GAN] 0x00 推荐论文 https://arxiv.org/pdf/1406.2661.pdf 0x01什么是gan Generative model G用来生成样本 Discriminative model D用来区别G生成样本的真假 G努力的方向是生成出以假乱真的样本,让D认为这样本是人类给的而不是G创造的,D则相反。 一个更加形象的比喻 小时候老师让试卷上家长签字,以确保家长看过我那卑微的成绩。于是乎我尽量模仿家长签字,企图骗过老师,而老师随着生活阅历越来越丰富,鉴别签字的水平就越来越高,于是乎我们双方都在共同成长着,这样双方对抗的结果就是谁也没有胜利,但是老师确实很厉害了,而我的签字仿造能力也被训练成了大师级。 0x02 原理 GAN的基本原理其实非常简单,这里以生成图片为例进行说明。假设我们有两个网络,G(Generator)和D(Discriminator)。正如它的名字所暗示的那样,它们的功能分别是: G是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片,记做G(z)。 D是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片。

python动态导入模块――importlib

匿名 (未验证) 提交于 2019-12-02 22:51:30
当在写代码时,我们希望能够根据传入的选项设置,如args.model来确定要导入使用的是哪个model.py文件,而不是一股脑地导入 这种时候就需要用上python的动态导入模块 比如此时文件结构为: ├―― models │ ├―― __init__.py │ ├―― cycle_gan_model.py │ └―― pix2pix_model.py └―― train.py 假设此时参数的设置中有: import argparse parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--model', type=str, default='cycle_gan', help='chooses which model to use. [cycle_gan | pix2pix | test | colorization]') args = parser.parse_args() 此时如果想要根据传入的参数args. model的值决定导入哪个模块,则: import importlib model_filename = "models." + args.model + "_model" # 根据指定的args

GAN在蛋白质设计上的应用(一)

最后都变了- 提交于 2019-12-02 19:30:39
马上要修考出愿了 需要给导师再submit一份研究计划书, 根据之前导师的期望,硕士阶段的学习主要针对GAN在蛋白质设计方面的应用 所以在复习数学和专业课的百忙之中啊,必须再肝一份新的研究计划书出来, 首先从经典的GAN入手,再学习一下WGAN,然后就开始考虑自己在这方面的想法。 GAN GAN主要由两个部分组成,一个Generator,一个Discriminator。 Generator的输入是一个随机的采样数据或者是一个噪声,将Generator通过真实数据进行训练, 使其输出的是我们想要生成的目标。 Discriminator是一个分类器,对于真实的目标返回1,对于生成的虚假目标返回0。 Generator要生成能够迷惑Discriminator的目标,而Discriminator要尽可能辨别出虚假的生成目标, 两个model相当于在不停的对抗,通过Discriminator和Generator的互相对抗迭代并进化,最后Generator 将能够生成足够以假乱真的目标。 1.GAN的原理 首先,对于任何一个真实的数据集,我们可以知道真实目标的分布P data (x),x 是一个真实数据,例如,我们可以把真实的数据想象成一个向量, 这个向量的分布就是P data (x)。Generator的目标就是要生成一系列服从这个分布的新的向量

生成对抗网络

好久不见. 提交于 2019-12-02 08:08:44
生成式对抗网络(generative adversarial network,GAN)是基于可微生成器网络的另一种生成式建模方法。生成式对抗网络基于博弈论场景,其中生成器网络必须与对手竞争。生成网络直接产生样本 。其对手,判别器网络(dircriminator network)试图区分从训练数据抽取的样本和从生成器抽取的样本。判别器出发由 给出的概率值,指示x是真实训练样本而不是从模型抽取的伪样本的概率。 形式化表示生成对抗网络中学习的最简单方法是零和游戏,其中函数 确定判别器的受益。生成器接受 作为它自己的受益。在学习期间,每个玩家尝试最大化自己的受益,因此收敛在 v的默认选择是 这驱使判别器试图学习将样品正确地分类为真或伪造的。同时,生成器试图欺骗分类器以让其相信样本是真实的。在收敛时,生成器的样本与真实数据不可区分,并且判别器处处都输出1/2。然后可以丢弃判别器。设计GNA的主要动机是学习过程既不需要近似推断,也不需要配分函数梯度的近似。当 在 中是凸的(例如,在概率密度函数的空间中直接执行优化的情况)时,该过程保证收敛并且是渐近一致的。不幸的是,在实践中由神经网络表示的g和d以及 不凸时,GAN中的学习可能是困难的。Goodfellow认为不收敛可能会引起GAN的欠拟合问题。一般来说,同时对两个玩家的成本梯度下降不能保证达到平衡。例如,考虑价值函数v(a,b)=ab

《生成对抗网络GAN的原理与应用专题》笔记

天大地大妈咪最大 提交于 2019-12-02 07:53:40
视频教程的链接: http://campus.swarma.org/gpac=8 一、什么是GAN 框架简述 GAN全称是Generative Adversarial Nets,中文叫做“生成对抗网络”。 在GAN中有2个网络,一个网络用于生成数据,叫做“生成器”。另一个网络用于判别生成数据是否接近于真实,叫做“判别器”。 下图展示了最简单的GAN的结构以及工作原理。 模型中最左侧的随机向量是为了让生成器产生不同的输出,而增加的扰动项。这些扰动决定了生成器可以生成不同的仿真作品。之后我们会看到这些向量产生的输出会有一些插值和加减法等方面的特性。 这个图示是最简单的GAN框架,在实际应用中还可以把“生成器的输入-输出”作为判别器的输入,这样就可以做到生成符合某些条件的任务内容。例如根据文字内容生成符合描述的图片。 价值函数 Value Function GAN的训练是价值函数最大化和最小化的交替游戏: 其中Pdata是真实数据,Pz是生成数据。 当我们训练判别器D时,我们希望真实数据的判别值越大越好。同时我们希望对生成数据的判别值 越小越好,所以 也是越大越好。训练中使用梯度上升,使价值函数的值越来越高。 同理,当我们要训练生成器G时,就希望价值函数的值越小越好,即使用梯度下降来训练生成器的参数。 理论推导 Theoretical reults 理论推到基于3个假设:

生成对抗式网络 GAN的理解

眉间皱痕 提交于 2019-12-02 07:53:26
转自:https://zhuanlan.zhihu.com/p/24767059,感谢分享 生成式对抗网络(GAN)是近年来大热的深度学习模型。最近正好有空看了这方面的一些论文,跑了一个GAN的代码,于是写了这篇文章来介绍一下GAN。 本文主要分为三个部分: 介绍原始的GAN的原理 同样非常重要的DCGAN的原理 如何在Tensorflow跑DCGAN的代码,生成如题图所示的动漫头像,附送数据集哦 :-) 一、GAN原理介绍 说到GAN第一篇要看的paper当然是Ian Goodfellow大牛的Generative Adversarial Networks(arxiv: https:// arxiv.org/abs/1406.2661 ),这篇paper算是这个领域的开山之作。 GAN的基本原理其实非常简单,这里以生成图片为例进行说明。假设我们有两个网络,G(Generator)和D(Discriminator)。正如它的名字所暗示的那样,它们的功能分别是: G是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片,记做G(z)。 D是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片。 在训练过程中