,我是真的遇到过了!...下面将会谈谈我在工作中如何减少if else嵌套的。 正文 在谈我的方法之前,不妨先用个例子来说明if else嵌套过多的弊端。...上面的代码我是用java写的,对于java程序员来说,空值判断简直使人很沮丧,让人身心疲惫。...上面的代码每次回调都要判断一次listener是否为空,又要判断用户传入的ShareItem是否为空,还要判断ShareItem里面的字段是否为空…… 对于这种情况,我采用的方法很简单:接口分层。...我个人觉得让用户了解多几个方法好过了解多几个类,而已方法名一看就能知道意图,成本还是挺小,是可以接受的。 其实这种情况,更多人想到的是使用工厂模式。
尽管最初的建议使用 KL 散度,但在构建生成对抗网络 [1] 时,在损失函数中使用交叉熵是一种常见的做法。这常常给该领域的新手造成混乱。...当我们有多个概率分布并且我们想比较它们之间的关系时,熵和 KL 散度的概念就会发挥作用。 在这里我们将要验证为什么最小化交叉熵而不是使用 KL 散度会得到相同的输出。...概率分布 p 和 q 的KL散度( KL-Divergence )可以通过以下等式测量: 其中方程右侧的第一项是分布 p 的熵,第二项是分布 q 对 p 的期望。...在大多数实际应用中,p 是实际数据/测量值,而 q 是假设分布。对于 GAN,p 是真实图像的概率分布,而 q 是生成的假图像的概率分布。...总结 在本文中,我们了解了熵、交叉熵和 kl-散度的概念。然后我们回答了为什么这两个术语在深度学习应用程序中经常互换使用。我们还在 python 中实现并验证了这些概念。
DCGAN 7.4.3 如何理解GAN中的输入随机噪声 7.4.4 GAN为什么容易训练崩溃 7.4.5 WGAN如何解决训练崩溃问题 7.4.6 WGAN-GP:带有梯度正则的WGAN 7.4.7 LSGAN...将上述公式展开即可得到下面的计算公式: MMD值越小,两个分布越接近。 特点:可以一定程度上衡量模型生成图像的优劣性,计算代价小。推荐使用。...之所以这么做,作者在原文给出了一张图,交叉熵与最小二乘损失对比图: 上面是作者给出的基于交叉熵损失以及最小二乘损失的Loss函数。横坐标代表Loss函数的输入,纵坐标代表输出的Loss值。...可以看出,随着输入的增大,sigmoid交叉熵损失很快趋于0,容易导致梯度饱和问题。如果使用右边的Loss设计,则只在x=0点处饱和。因此使用LSGAN可以很好的解决交叉熵损失的问题。...平滑标签或者给标签添加噪声;平滑标签,即对正样本,可以使用0.7-1.2的随机数替代;对于负样本,可以使用0-0.3的随机数替代。给标签加噪声:即训练判别器的时候,随机翻转部分样本的标签。
2 分类任务损失 2.1、0-1 loss 0-1 loss是最原始的loss,它直接比较输出值与输入值是否相等,对于样本i,它的loss等于: ? 当标签与预测类别相等时,loss为0,否则为1。...为什么选择对数函数而不是其他函数呢?首先,不确定性必须是概率P的单调递降函数,假设一个系统中各个离散事件互不相关,要求其总的不确定性等于各自不确定性之和,对数函数是满足这个要求的。...Dkl是非负的,只有当p与q处处相等时,才会等于0。上面的式子也等价于 ? 其中l(p,p)是分布p的熵,而l(p,q)就是p和q的交叉熵。...3 回归任务损失 在回归任务中,回归的结果是一些整数或者实数,并没有先验的概率密度分布,常使用的loss是L1 loss和L2 loss。...从上面可以看出,L1/L2各有优劣,设计一个通用的框架同时满足L1/L2损失的优点是研究重点,我见过的最夸张的是这样的。 ?
这些反应让我想起了一个颇有年头的鸡汤段子,说是一个工程师在电机外壳上用粉笔划了一条线排除了故障,要价一万美元——画一条线,1美元;知道在哪画线,9999美元。...回顾一下,原始GAN中判别器要最小化如下损失函数,尽可能把真实样本分为正例,生成样本分为负例: ?...第一种原始GAN形式的问题 一句话概括:判别器越好,生成器梯度消失越严重。WGAN前作从两个角度进行了论证,第一个角度是从生成器的等价损失函数切入的。...首先从公式1可以得到,在生成器G固定参数时最优的判别器D应该是什么。对于一个具体的样 ? 率0.5。...然而GAN训练有一个trick,就是别把判别器训练得太好,否则在实验中生成器会完全学不动(loss降不下去),为了探究背后的原因,我们就可以看看在极端情况——判别器最优时,生成器的损失函数变成什么。
我无法让生成器在 128 个隐藏节点时收敛。...使用 DCGAN 意味着必须进行大量学习速率的调整,但你可以快速看到是否收敛的结果(鉴别器损失为 0,或生成器损失为 0);但在 WGAN 里,你需要运行完大量 epoch 之后才能得到结果。...但另一方面,这些猫看起来十分粗糙,就像是用高分辨率的屏幕在看低分辨率的图片,我也不知道这是为什么。或许这是 Wasserstein 损失函数的特点?我认为使用不同的学习率和体系结构将可以提升一下性能。...GAN) LSGAN 是一种略为不同的方法,在这里我们得试图最小化鉴别器输出和分配标签的平方距离;研究者建议:对于真实图像为 1,对于鉴别器更新时的假图像使用 0。...Hejlm 等人(2017)的研究则认为:对于真实图像为 1,对于鉴别器更新时的假图像使用 0,而生成器更新时的假图像用 0.5 以寻找边界。
至于为什么第一次写WGAN呢,其实我也不知道为什么,可能是刚好最近再看吧,生成效果也不错。...2.2 是WGAN三篇论文中的第二篇的介绍,这里提到的KR对偶我还没明白是什么意思,哪位大神能教教我。。。...这里的D就是GAN里面的判别网络,另外WGAN区别于GAN的不同之处主要就是这里提到的Earth-Mover 距离,也叫Wasserstein距离。...证明在附录里面贴了,其实我很想证明一波,想想还是不闹了,数学没达到那个水平。事实上,这里想要说明的是WGAN中weights clipping会导致的问题,(搬起石头砸自己的脚?)。...后面有关参数的说明没啥大的问题了。 另外实验部分不打算写了,这些是有些trick在里面的,其实我真的没看。。。直接看代码自己跑起来就好了。 ?
读完之后,我打消了原本打算去学习 DCGAN 的念头,改成继续学习 WGAN。因此,本文兔子哥哥将会带读者一起来领略一下 WGAN 的风采。 文章目录如下: 为什么原始 GAN 训练困难重重?...WGAN 是什么鬼? WGAN 的个人一些使用经验总结 为什么原始的 GAN 这样问题重重?...其中经过数学式子的推断,原始 GAN 的损失函数是可以改写成以下式子: 在令人拍案叫绝的 Wasserstein GAN - 知乎专栏中分析了 p,q 各取 0 与非 0 时,对损失函数的影响,而得出的结论是...使用 RMSProp 或 SGD 并以较低的学习率进行优化 (论文作者在实验中得出的 trick) WGAN 的个人一些使用经验总结 这些经验是基于自身的实验得出,仅供参考 WGAN 的论文指出使用...这个是我用 WGAN 用拟合出的 MINST 的效果,不算太理想,继续训练应该有较好效果,但 GAN 系列的收敛速度都好像有点感人。。。
熟悉机器学习原理的朋友会知道,一提到无限建模能力,第一反应就应该是条件反应式的反感。为什么呢?无限建模能力往往是和过拟合,无泛化性联系在一起的。...形式上来看,LS-GAN和WGAN也有很大区别。WGAN是通过最大化f-函数在真实样本和生成样本上的期望之差实现学习的,这种意义上,它可以看做是一种使用“一阶统计量"的方法。 LS-GAN则不同。...好了,问题的关键时为什么G-网络的训练目标函数是接近或者最多线性的,这点WGAN里并没有给出定量的分析,而只有大致的定性描述,这里我们引用如下: “ ? ?...下图是L-网络每次都训练,而G-网络每个1次、3次、5次才训练时,对应的用来更新G-网络的梯度大小(在log scale上): ?...对给定样本x,我们不知道它的具体类别,所以我们在所有可能的类别上对损失函数取最小,作为对该样本真实类别的一个最佳的猜测。这与上面的公式(7)是一致的。
自从扩散模型发布以来,GAN的关注度和论文是越来越少了,但是它们里面的一些思路还是值得我们了解和学习。...或者使用正则化技术,例如dropout或批处理归一化,使用合适的学习率和损失函数也很重要。...Wassersteian损失 Wasserstein损失,也称为Earth Mover’s Distance(EMD)或Wasserstein GAN (WGAN)损失,是一种用于生成对抗网络(GAN...对于两个概率分布P和Q,从Q到P的KL散度定义为:KL(P∥Q)=∑x P(x)log(Q(x)/P(x))。KL散度是非负非对称的,即KL(P∥Q)≠KL(Q∥P)。当且仅当P和Q相等时它为零。...在GAN中实现Lipschitz连续性的主要方法是通过使用Lipschitz约束或正则化,一种常用的方法是Wasserstein GAN (WGAN)。
此外,作者使用的是一种更接近于原 Wasserstein 损失的新的正则化形式,而不是像 wGAN 论文中那样使用 weight clipping。...Wasserstein GAN wGAN 背后的基本思想是最小化数据 p(x) 的采样分布与使用深度生成器合成的图像分布之间的 Wasserstein 距离。...在我看来,更规范的方法是放宽约束并为损失函数附加一个随机正则化项: ? 当满足约束时,该项为零,而当约束不满足时,该项为正值。原始严格约束通过将λ趋于无穷大来获得。...在实践中,我们可以使用有限值λ来优化这个损失。 Wasserstein GAN 真的最小化了最优传输散度吗? Wasserstein GAN 显然是一种非常有效的算法,它遵循一个简洁的理论原则。...我觉得在我们的领域仍然有许多几乎唾手可得的成果,掌握它们的关键是像本篇论文一样去遵循优秀论文的思想和理论。 ?
前言 在研究 『 Spring 是如何解决循环依赖的 』 的时候,了解到 Spring 是借助三级缓存来解决循环依赖的。 同样在上一节留下了疑问: 循环依赖为什么要使用三级缓存?...而不是使用二级缓存? AOP 动态代理对循环依赖的有没有什么影响? 本篇文章也是围绕上面的内容进行展开。 笔记也在不断整理,之前可能会有点杂乱。 循序渐进,看一看什么是循环依赖?...二级缓存能否解决循环依赖 通过上面的图,仔细分析一下,其实把二级缓存拿掉,在 B 尝试获取 A 的时候直接返回 A 的实例,是不是也是可以的? 答案是:可以的! 但是为什么还是用三级缓存呢?...B 属性赋值时,从三级缓存获取 A 有时会比较疑惑 singletonFactory.getObject() 调用的是哪里? ?...中的 A 赋值时: 无代理:getObject 直接返回原来的 Bean 有代理:getObject 返回的是代理对象 然后都放到二级缓存。
我尝试使用生成对抗网络(GAN)来生成猫的脸。我想分别以较低和较高的分辨率使用 DCGAN,WGAN,WGAN-GP 以及 LSGAN。...使用的数据集是 CAT Dataset,这个数据集包含 10000 张猫咪的照片。我需要的是猫咪的脸在中央的图像,并筛除了不符合的图像(这是用肉眼观察做的,花了几个小时…)。...我无法在使用 128 个隐藏节点时使生成器收敛。...使用 DCGAN 时,需要调整的学习率很多,但当它不收敛时可以快速看到(当 D 的损失值为 0,或 G 的损失在开始时为 0 时),但是使用 WGAN 时,你需要让它运行许多 epoch,才能知道是否收敛...我没有时间进行完整的运行,但 LSGAN 总体相当稳定,并且输出的猫非常漂亮。虽然一般情况下是稳定的,但又一次,损失和梯度崩溃了,生成的别说猫了,啥也没有。
优化器训练,并且学习率最好是0.0002,(我也试过其他学习率,不得不说0.0002是表现最好的了) DCGAN结果图: 矢量计算: ?...◆ 论文中也推荐使用SGD, RMSprop等优化器,不要基于使用动量的优化算法,比如adam,但是就我目前来说,训练GAN时,我还是adam用的多一些。...作者在论文中也提到,他们的灵感来自于WGAN 先说说BEGAN的主要原理,BEGAN和其他GAN不一样,这里的D使用的是auto-encoder结构,就是下面这种,D的输入是图片,输出是经过编码解码后的图片...为什么都差不多呢?...在此项研究中,Google此项研究中使用了minimax损失函数和用non-saturating损失函数的GAN,分别简称为MM GAN和NS GAN,对比了WGAN、WGAN GP、LS GAN、DRAGAN
优化器训练,并且学习率最好是0.0002,(我也试过其他学习率,不得不说0.0002是表现最好的了) DCGAN结果图: 矢量计算: ?...◆ 论文中也推荐使用SGD, RMSprop等优化器,不要基于使用动量的优化算法,比如adam,但是就我目前来说,训练GAN时,我还是adam用的多一些。...作者在论文中也提到,他们的灵感来自于WGAN 先说说BEGAN的主要原理,BEGAN和其他GAN不一样,这里的D使用的是auto-encoder结构,就是下面这种,D的输入是图片,输出是经过编码解码后的图片...,为什么都差不多呢?...在此项研究中,Google此项研究中使用了minimax损失函数和用non-saturating损失函数的GAN,分别简称为MM GAN和NS GAN,对比了WGAN、WGAN GP、LS GAN、DRAGAN
为了估计分布的误差,作者使用了auto-encoder作为D,D的输入是图像V,维度为RNx,输出的也是维度为RNx的图片,本文中n=1,自编码器的模型如下 ?...那么根据wassertein公式,两个正太分布µ1、µ2的距离为: ? trace是求迹操作,P=1时,简化为如下形式: ?...D,G的损失在图片中已经给出了描述,从以上分析的结果来看,只要按步骤优化损失函数,就能完成GAN的训练,但是还没有那么简单,或许也注意到,为什么论文的名字叫做Boundary Equilibrium GAN...,到这里完全没有涉及到Boundary Equilibrium的概念,我们继续分析 Equilibrium 试分析以下,GAN完成训练时的结果是什么样子的,理想情况下肯定是m1=m2的时候是最好的,即:...完全足以以假乱真的好不好 作者是在360k的cele数据集上做的训练,数据集数量比标准的cele数据集多了160k张,不过在标准的数据集上依然能得到很好的结果 结论 我也使用BEGAN的代码在mnist
本文让读者对wGAN的历史发展有个清晰的认识,并提供了wGAN的代码实现,是一篇很好的学习wGAN的入门材料。 对抗学习是深度学习中最火的一个领域。...在这篇文章中,我们主要学习以下三个方面的内容: 为什么我们应该关注对抗学习 生成对抗网络GANs(General Adversarial Networks) 和它面临的挑战 能解决这些挑战的Wasserstein...最开始使用的是Jensen-Shannon散度。...当然在实际计算中,由于EMD的计算量过大,因此使用的是EMD的合理的近似值。...为了使得近似值有效,wGAN在判别器(在wGAN中使用了critic一词,和GAN中的discriminator是同一个意思)中使用了权重剪裁(weight clipping)。
所以不论是 WGAN 还是本文中的 LSGAN 都是试图使用不同的距离度量,从而构建一个不仅稳定,同时还收敛迅速的生成对抗网络。...另外 WGAN 的训练过程和收敛都要比常规 GAN 要慢一点。 现在,问题是:我们能设计一个比 WGAN 运行得更稳定、收敛更快速、流程更简单更直接的生成对抗网络吗?我们的答案是肯定的!...我们知道在常规 GAN 中,辨别器使用的是对数损失(log loss.)。而对数损失的决策边界就如下图所示: ?...,跟着上面的损失函数做就行。...我们不仅直观地了解到为什么 L2 损失将能帮助 GAN 学习数据流形(data manifold),同时还直观地理解了为什么 GAN 使用对数损失是不能进行有效地学习。
本文回顾了从传统机器学习,到wGAN的逻辑发展过程,让读者对历史发展有个清晰的认识,并提供了wGAN的代码实现,是一篇很好的学习wGAN的入门材料。...在这篇文章中,我们主要学习以下三个方面的内容: 为什么我们应该关注对抗学习 生成对抗网络GANs(General Adversarial Networks) 和 它面临的挑战 能解决这些挑战的Wasserstein...最开始使用的是Jensen-Shannon散度。...当然在实际计算中,由于EMD的计算量过大,因此使用的是EMD的合理的近似值。...为了使得近似值有效,wGAN在判别器(在wGAN中使用了critic一词,和GAN中的discriminator是同一个意思)中使用了权重剪裁(weight clipping)。
领取专属 10元无门槛券
手把手带您无忧上云