论文名称:Generative Adversarial Networks
论文下载:https://arxiv.org/abs/1406.2661
教程下载:https://arxiv.org/pdf/1701.00160.pdf
论文年份:NeurIPS 2014
论文被引:42984(2022/04/09)


GAN 的基本思想是在两个玩家之间建立一个游戏。其中之一称为生成器(Generator)生成器创建的样本旨在来自与训练数据相同的分布。另一个玩家是鉴别器(Discriminator)鉴别器检查样本以确定它们是真的还是假的。鉴别器使用传统的监督学习技术进行学习,将输入分为两类(真实的或虚假的)。生成器被训练来欺骗鉴别器。

我们可以把生成器想象成一个造假者,试图制造假币,而鉴别器就像警察,试图让合法的钱进入并抓获假币。为了在这场博弈中取得成功,造假者必须学会赚取与真钱无法区分的钱,并且生成器网络必须学会创建与训练数据相同分布的样本。该过程如图 12 所示。

图 12:GAN 框架让两个对手在游戏中相互对抗。每个玩家由一组参数控制的可微函数表示。通常,这些功能被实现为深度神经网络。游戏在两种情况下进行。在一个场景中,训练样本 x 是从训练集中随机抽取的,并用作第一个玩家的输入,判别器由函数 D 表示。判别器的目标是输出其输入是真实的而不是虚假的概率,假设它曾经显示的输入中有一半是真实的,一半是假的。在第一种情况下,判别器的目标是使 D(x) 接近 1(即判定训练数据为真实图片)。在第二种情况下,生成器的输入 z 是从模型的先验中随机抽样的。然后鉴别器接收输入 G(z),这是由生成器创建的假样本。在这种情况下,两个玩家都参与。判别器努力使 D(G(z)) 接近 0(即认为生成器生成的图片是假的),而生成器努力使相同数量接近 1。如果两个模型都有足够的容量,则该博弈的纳什均衡对应于从与训练数据的分布相同,并且所有 x 的 D(x) = 1/2

游戏中的两个玩家由两个函数表示,每个函数在输入和参数方面都是可微的。鉴别器是一个函数 D,它以 x 作为输入并使用 θ(D) 作为参数。生成器由一个函数 G 定义,该函数以 z 作为输入并使用 θ(G) 作为参数。

训练过程:训练过程由同步 SGD 组成。在每个步骤中,对两个小批量进行采样:来自数据集的小批量 x 值和从模型的先验潜在变量中提取的小批量 z 值。然后同时进行两个梯度步骤:一个更新 θ(D) 以减少 J(D),另一个更新 θ(G) 以减少 J(G)。在这两种情况下,都可以使用基于梯度的优化算法。 Adam (Kingma and Ba, 2014) 通常是一个不错的选择。许多作者建议一个玩家运行比另一个玩家更多的步骤,但截至 2016 年底,作者的观点是,在实践中效果最好的协议是同时梯度下降,每个玩家一个步骤。

形式上,GAN 是一个结构化概率模型,包含潜在变量 z 和观察变量 x。图结构如图 13 所示。


Abstract

We propose a new framework for estimating generative models via an adversarial process, in which we simultaneously train two models: a generative model G that captures the data distribution, and a discriminative model D that estimates the probability that a sample came from the training data rather than G. The training procedure for G is to maximize the probability of D making a mistake. This framework corresponds to a minimax two-player game. In the space of arbitrary functions G and D, a unique solution exists, with G recovering the training data distribution and D equal to 1 2 everywhere. In the case where G and D are defined by multilayer perceptrons, the entire system can be trained with backpropagation. There is no need for any Markov chains or unrolled approximate inference networks during either training or generation of samples. Experiments demonstrate the potential of the framework through qualitative and quantitative evaluation of the generated samples.

我们提出了一个通过对抗过程估计生成模型的新框架,其中我们同时训练两个模型:一个捕获数据分布的生成模型 G,以及一个估计样本来自训练数据而不是G的概率的判别模型 DG 的训练过程是最大化 D 出错的概率。这个框架对应于一个极小极大的两人游戏。在任意函数 G 和 D 的空间中,存在唯一解,G 恢复训练数据分布,D 处处等于 1/2。在 G 和 D 由多层感知器定义的情况下,整个系统可以通过反向传播进行训练。在训练或生成样本期间,不需要任何马尔可夫链或展开的近似推理网络。实验通过对生成的样本进行定性和定量评估,证明了框架的潜力。

1 Introduction

深度学习的承诺是发现丰富的分层模型[2],这些模型代表人工智能应用中遇到的各种数据的概率分布,如自然图像、包含语音的音频波形和自然语言语料库中的符号。到目前为止,深度学习中最引人注目的成功涉及辨别模型,通常是那些将高维、丰富的感官输入映射到类别标签的模型[14,22]。这些惊人的成功主要基于反向传播和丢弃算法,使用具有特别良好的梯度的分段线性单元[19,9,10]。由于在最大似然估计和相关策略中出现的许多难以处理的概率计算的近似困难,以及由于在生成上下文中利用分段线性单元的好处的困难,深度生成模型的影响较小。我们提出了一个新的生成模型估计过程,回避这些困难。

深度学习的承诺是发现丰富的分层模型 [2],这些模型表示人工智能应用中遇到的各种数据的概率分布,例如自然图像、包含语音的音频波形和自然语言语料库中的符号。到目前为止,深度学习中最引人注目的成功涉及判别模型,通常是那些将高维、丰富的感官输入映射到类标签的模型 [14, 22]。这些惊人的成功主要基于反向传播和 dropout 算法,使用具有特别良好的梯度的分段线性单元 [19, 9, 10]。由于在最大似然估计和相关策略中出现的许多棘手的概率计算难以近似,并且由于在生成上下文中难以利用分段线性单元的优势,深度生成模型的影响较小。我们提出了一种新的生成模型估计程序来回避这些困难

在提出的对抗网络框架中,生成模型(generative model)与对手(adversary)对抗:一个判别模型(discriminative model),学习确定样本是来自模型分布还是数据分布。生成模型可以被认为类似于一个造假者团队,试图制造假币并在不被发现的情况下使用它,而判别模型类似于警察,试图检测假币。这场比赛的竞争促使双方改进他们的方法,直到假货与真品无法区分

该框架可以为多种模型和优化算法生成特定的训练算法。在本文中,我们探讨了生成模型通过多层感知器传递随机噪声来生成样本的特殊情况,而判别模型也是多层感知器。我们将这种特殊情况称为对抗网络(adversarial nets)。在这种情况下,我们可以仅使用非常成功的反向传播和 dropout 算法 [17] 来训练这两个模型,并仅使用前向传播从生成模型中采样。不需要近似推理或马尔可夫链

2 Related work

具有潜变量的有向图模型的替代方案是具有潜变量的无向图模型,例如受限玻尔兹曼机 (restricted Boltzmann machines,RBM) [27, 16]、深度玻尔兹曼机 (DBM) [26] 及其众多变体。此类模型中的相互作用表示为未归一化的势函数(potential functions)的乘积,通过对随机变量的所有状态的全局求和/积分进行归一化。这个量(配分函数)及其梯度对于除了最微不足道的实例之外的所有实例都是难以处理的,尽管它们可以通过马尔可夫链蒙特卡罗 (MCMC) 方法进行估计。混合对于依赖 MCMC [3, 5] 的学习算法来说是一个重大问题。

深度信念网络 (DBN) [16] 是包含单个无向层和多个有向层的混合模型。虽然存在快速近似的逐层训练标准,但 DBN 会导致与无向和有向模型相关的计算困难。

还提出了不近似或限制对数似然的替代标准,例如分数匹配(score matching) [18] 和噪声对比估计(noise-contrastive estimation,NCE)[13]。这两者都需要将学习的概率密度分析指定为归一化常数。请注意,在许多具有多层潜在变量(例如 DBN 和 DBM)的有趣生成模型中,甚至不可能推导出易于处理的非归一化概率密度。一些模型,例如去噪自动编码器 [30] 和收缩自动编码器,其学习规则与应用于 RBM 的分数匹配非常相似。在 NCE 中,就像在这项工作中一样,采用判别训练标准来拟合生成模型。然而,生成模型本身不是拟合单独的判别模型,而是用于将生成的数据与固定噪声分布的样本区分开来。由于 NCE 使用固定的噪声分布,因此在模型在观察到的变量的一小部分上学习到近似正确的分布后,学习速度会显着减慢。

最后,一些技术不涉及明确定义概率分布,而是训练生成机器从所需分布中抽取样本。这种方法的优点是可以将此类机器设计为通过反向传播进行训练。该领域最近的突出工作包括生成随机网络(generative stochastic network,GSN) 框架 [5],它扩展了广义去噪自动编码器(generalized denoising auto-encoders) [4]:两者都可以看作是定义参数化马尔可夫链,即学习机器的参数执行生成马尔可夫链的一步。与 GSN 相比,对抗网络框架不需要马尔可夫链进行采样。因为对抗网络在生成过程中不需要反馈循环,它们能够更好地利用分段线性单元 [19,9,10],这提高了反向传播的性能,但在反馈循环中使用时存在无限激活的问题。最近通过反向传播训练生成机器的例子包括最近关于自动编码变分贝叶斯(auto-encoding variational Bayes)[20]和随机反向传播(stochastic backpropagation)[24]的工作。

3 Adversarial nets

当模型都是多层感知器时,对抗性建模框架最容易应用。为了学习生成器在数据 x 上的分布 pg,我们定义了输入噪声变量 pz(z) 的先验,然后将到数据空间的映射表示为 G(z; θg),其中 G 是由多层感知器表示的可微函数参数 θg。我们还定义了输出单个标量的第二个多层感知器 D(x; θd)。 D(x) 表示 x 来自数据而不是 pg 的概率。我们训练 D 以最大化将正确标签分配给训练示例和来自 G 的样本的概率。我们同时训练 G 以最小化 log(1 - D(G(z))):

换句话说,D 和 G 玩下面的两人极小极大游戏,其价值函数为 V (G, D):

在下一节中,我们将介绍对抗网络的理论分析,主要表明训练标准允许人们恢复数据生成分布,因为 G 和 D 有足够的容量,即在非参数限制内。有关该方法的不太正式、更具教学性的解释,请参见图 1。在实践中,我们必须使用迭代的数值方法来实现游戏。在训练的内部循环中优化 D 以完成在计算上是令人望而却步的,并且在有限的数据集上会导致过拟合。相反,我们在优化 D 的 k 步和优化 G 的一步之间交替进行。这导致 D 保持在其最优解附近,只要 G 变化足够慢。这种策略类似于 SML/PCD [31, 29] 训练从一个学习步骤到下一个学习步骤维护来自马尔可夫链的样本的方式,以避免作为学习内部循环的一部分在马尔可夫链中燃烧。该过程在算法 1 中正式介绍。

图 1:生成对抗网络通过同时更新判别分布(D,蓝色,虚线)进行训练,以便区分数据生成分布(黑色,虚线)px 和生成分布 pg (G) 的样本(绿色,实线)。下面的水平线是 z 被采样的域,在这种情况下是均匀的。上面的水平线是 x 域的一部分。向上的箭头显示了映射 x = G(z) 如何将非均匀分布 pg 施加到变换后的样本上。 G 在 pg 的高密度区域收缩并在 pg 的低密度区域膨胀。 (a) 考虑一个接近收敛的对抗对:pg 类似于 pdata,D 是一个部分准确的分类器。 (b) 在算法的内部循环中,D 被训练以区分样本和数据,收敛到 D∗(x) = pdata(x) / (pdata(x)+pg(x) )。 © 在对 G 进行更新后,D 的梯度引导 G(z) 流向更有可能被分类为数据的区域。 (d) 经过几个步骤的训练,如果 G 和 D 有足够的容量,它们将达到一个点,因为 pg = pdata,它们都无法提高。鉴别器无法区分这两个分布,即 D(x) = 1/2 。

4 Theoretical Results

生成器 G 隐含地将概率分布 pg 定义为当 z ∼ pz 时获得的样本 G(z) 的分布。因此,如果给定足够的容量和训练时间,我们希望算法 1 能够收敛到一个好的 pdata 估计器。本节的结果是在非参数设置中完成的,例如我们通过研究概率密度函数空间中的收敛性来表示具有无限容量的模型。

我们将在 4.1 节展示这个极小极大博弈对于 pg = pdata 有一个全局最优解。然后我们将在 4.2 节中展示算法 1 优化 Eq 1,从而获得所需的结果。

4.1 Global Optimality of pg = pdata

我们首先考虑任何给定生成器 G 的最佳鉴别器 D。

命题 1. F 或 G 固定,最优判别器 D 为:

证明。给定任何生成器 G,判别器 D 的训练标准是最大化数量 V (G, D)

对于任意 (a, b) ∈ R^2 \ {0, 0},函数 y → a log(y) + b log(1 − y) 在 [0, 1] 中的 a+b 处达到最大值。鉴别器不需要在 Supp(pdata) ∪ Supp(pg) 之外定义,证明结束。

请注意,D 的训练目标可以解释为最大化对数似然以估计条件概率 P (Y = y|x),其中 Y 表示 x 来自 pdata(y = 1)还是来自 pg(y = 0)。方程 1 中的极小极大游戏现在可以重新表述为:

定理 1. 当且仅当 pg = pdata 时,达到虚拟训练标准 C(G) 的全局最小值。此时,C(G) 达到值 - log 4

证明。对于 pg = pdata,D∗G(x) = 1/2,(考虑方程 2)。因此,通过检查方程式 4 在 D∗G(x) = 1/2 处,我们发现 C(G) = log 1/2 + log 1/2 = − log 4。要看到这是 C(G) 的最佳可能值,仅对 pg = pdata,观察

并且通过从 C(G) = V (D∗G, G) 中减去这个表达式,我们得到:

其中 KL 是 Kullback-Leibler 散度。我们在前面的表达式中认识到模型分布和数据生成过程之间的 Jensen-Shannon 散度:

由于两个分布之间的 Jensen-Shannon 散度总是非负的并且只有当它们相等时才为零,所以我们已经证明 C∗ = − log(4) 是 C(G) 的全局最小值并且唯一的解是 pg = pdata,即生成模型完美地复制了数据生成过程

4.2 Convergence of Algorithm 1

命题 2. 如果 G 和 D 有足够的容量,在算法 1 的每一步,在给定 G 的情况下,允许判别器达到其最优值,并更新 pg 以改进判据

然后 pg 收敛到 pdata

证明。将 V (G, D) = U(pg, D) 视为 pg 的函数,如上述标准中所做的那样。注意 U(pg, D) 在 pg 中是凸的凸函数上确界(supremum)的子导数包括函数在达到最大值的点的导数。换句话说,如果 f(x)=supα∈Afα(x)f(x) = sup_{α∈A} f_α(x)f(x)=supα∈A​fα​(x) 并且 fα(x)f_α(x)fα​(x) 对于每个 ααα 在 xxx 中是凸的,那么 ∂fβ(x)∈∂f∂f_β(x) ∈ ∂f∂fβ​(x)∈∂f 如果 β=argsupα∈Afα(x)β = arg sup_{α∈A} f_α(x)β=argsupα∈A​fα​(x) 。这等效于在给定相应 G 的情况下在最优 D 处计算 pg 的梯度下降更新。supDU(pg,D)sup_D U(p_g, D)supD​U(pg​,D) 在 pg 中是凸的,具有唯一的全局最优值,如定理 1 中所证明的,因此对 pg 的更新足够小, pg 收敛到 px,证明结束。

在实践中,对抗网络通过函数 G(z; θg) 表示有限的 pg 分布族,我们优化 θg 而不是 pg 本身。使用多层感知器来定义 G 在参数空间中引入了多个临界点。然而,多层感知器在实践中的出色表现表明,尽管缺乏理论保证,但它们是一个合理的使用模型。

5 Experiments

我们训练了一系列数据集的对抗网络,包括 MNIST [23]、多伦多人脸数据库 (TFD) [28] 和 CIFAR-10 [21]。生成器网络使用 ReLU [19, 9] 和 sigmoid 激活的混合,而鉴别器网络使用 maxout [10] 激活。 Dropout [17] 用于训练鉴别器网络。虽然我们的理论框架允许在生成器的中间层使用 dropout 和其他噪声,但我们仅使用噪声作为生成器网络最底层的输入

我们通过将 Gaussian Parzen 窗口拟合到使用 G 生成的样本并报告此分布下的对数似然来估计 pg 下测试集数据的概率高斯的 σ 参数是通过对验证集的交叉验证获得的。 Breuleux 等人 [8] 介绍了该程序。并用于各种生成模型,这些模型的确切可能性不可控 [25,3,5]。结果如表 1 所示。这种估计似然性的方法具有较高的方差,并且在高维空间中表现不佳,但它是我们所知的最佳方法。可以采样但不能估计可能性的生成模型的进步直接推动了对如何评估此类模型的进一步研究。

表 1:基于 Parzen 窗口的对数似然估计。 MNIST 上报告的数字是测试集上样本的平均对数似然,以及跨示例计算的平均值的标准误差。在 TFD 上,我们计算了数据集折(fold)的标准误差,使用每个折的验证集选择了不同的 σ。在 TFD 上,对每个折进行交叉验证,并计算每个折的平均对数似然。对于MNIST,我们与数据集的实值(而不是二进制)版本的其他模型进行比较。

在图 2 和图 3 中,我们展示了在训练后从生成器网络中抽取的样本。虽然我们没有声称这些样本比现有方法生成的样本更好,但我们相信这些样本至少与文献中更好的生成模型具有竞争力,并突出了对抗框架的潜力。

图2:模型样本的可视化。最右边的列显示了邻近样本的最近的训练示例,以证明模型没有记住训练集。样品是公平随机抽取的,不是精心挑选的。与大多数其他深度生成模型的可视化不同,这些图像显示了来自模型分布的实际样本,而不是给定隐藏单元样本的条件平均值。此外,这些样本是不相关的,因为采样过程不依赖于马尔可夫链混合。a) MNIST b) TFD c) CIFAR-10(全连接模型)d) CIFAR-10(卷积鉴别器和“去卷积”生成器)

6 Advantages and disadvantages

相对于以前的建模框架,这个新框架具有优点和缺点。缺点主要是 pg(x) 没有明确的表示,并且在训练期间 D 必须与 G 很好地同步(特别是 G 在不更新 D 的情况下不能训练太多,以避免“Helvetica 情形”其中 G 将太多的 z 值折叠为相同的 x 值,以具有足够的多样性来建模 pdata),就像玻尔兹曼机器的负链必须在学习步骤之间保持最新一样。优点是永远不需要马尔可夫链,只使用反向传播来获得梯度,学习过程中不需要推理,模型中可以包含各种各样的函数。表 2 总结了生成对抗网络与其他生成建模方法的比较。

上述优势主要是计算上的。对抗模型也可以从生成器网络中获得一些统计优势,而不是直接使用数据示例进行更新,而只是使用流经鉴别器的梯度。这意味着输入的组件不会直接复制到生成器的参数中。对抗网络的另一个优点是它们可以表示非常尖锐甚至退化的分布,而基于马尔可夫链的方法要求分布有些模糊,以便链能够在模式之间混合

7 Conclusions and future work

这个框架允许许多直接的扩展:

  1. 条件生成模型 p(x | c) 可以通过将 c 作为输入添加到 G 和 D 来获得。
  2. 可以通过训练辅助网络来预测给定 x 的 z 来执行学习的近似推理。这类似于通过唤醒睡眠算法 [15] 训练的推理网络,但其优点是可以在生成器网络完成训练后针对固定生成器网络训练推理网络。
  3. 通过训练共享参数的一系列条件模型,可以对所有条件 p(xS | x6S) 进行近似建模,其中 S 是 x 的索引的子集。本质上,可以使用对抗网络来实现确定性 MP-DBM [11] 的随机扩展。
  4. 半监督学习:当标记数据有限时,来自鉴别器或推理网络的特征可以提高分类器的性能。
  5. 效率提升:通过划分更好的方法来协调 G 和 D 或确定更好的分布以在训练期间采样 z,可以大大加快训练速度。

本文证明了对抗性建模框架的可行性,表明这些研究方向可能是有用的。


TF2 Code

ref:https://github.com/marload/GANs-TensorFlow2

import tensorflow as tf
from tensorflow.keras import layersimport os
import numpy as npos.environ['KMP_DUPLICATE_LIB_OK'] = 'True'# metrics setting
g_loss_metrics = tf.metrics.Mean(name='g_loss')
d_loss_metrics = tf.metrics.Mean(name='d_loss')
total_loss_metrics = tf.metrics.Mean(name='total_loss')# hyper-parameters
ITERATION = 10000
Z_DIM = 100
BATCH_SIZE = 512
BUFFER_SIZE = 60000
IMAGE_SIZE = 28*28
D_LR = 0.0004
G_LR = 0.0004
IMAGE_SHAPE = (28, 28, 1)
RANDOM_SEED = 42np.random.seed(RANDOM_SEED)
tf.random.set_seed(RANDOM_SEED)test_z = tf.random.normal([36, Z_DIM])def get_random_z(z_dim, batch_size):return tf.random.uniform([batch_size, z_dim], minval=-1, maxval=1)# define discriminator
def make_discriminaor(input_shape):return tf.keras.Sequential([layers.Input(IMAGE_SHAPE),layers.Flatten(),layers.Dense(256,  activation=None, input_shape=input_shape),layers.LeakyReLU(0.2),layers.Dense(256,  activation=None),layers.LeakyReLU(0.2),layers.Dense(1, activation='sigmoid')])# define generator
def make_generator(input_shape):return tf.keras.Sequential([layers.Dense(256, activation='relu', input_shape=input_shape),layers.Dense(256, activation='relu'),layers.Dense(784, activation='tanh'),layers.Reshape(IMAGE_SHAPE)])# define loss function
def get_loss_fn():def d_loss_fn(real_logits, fake_logits):return -tf.reduce_mean(tf.math.log(real_logits + 1e-10) + tf.math.log(1. - fake_logits + 1e-10))def g_loss_fn(fake_logits):return -tf.reduce_mean(tf.math.log(fake_logits + 1e-10))return d_loss_fn, g_loss_fn# data load & preprocessing
(train_x, _), (_, _) = tf.keras.datasets.mnist.load_data()
train_x = (train_x - 127.5) / 127.5
train_ds = (tf.data.Dataset.from_tensor_slices(train_x).shuffle(BUFFER_SIZE).batch(BATCH_SIZE, drop_remainder=True).repeat()
)# generator & discriminator
G = make_generator((Z_DIM,))
D = make_discriminaor((IMAGE_SIZE,))# optimizer
g_optim = tf.keras.optimizers.Adam(G_LR)
d_optim = tf.keras.optimizers.Adam(D_LR)# loss function
d_loss_fn, g_loss_fn = get_loss_fn()@tf.function
def train_step(real_images):z = get_random_z(Z_DIM, BATCH_SIZE)with tf.GradientTape() as d_tape, tf.GradientTape() as g_tape:fake_images = G(z, training=True)fake_logits = D(fake_images, training=True)real_logits = D(real_images, training=True)d_loss = d_loss_fn(real_logits, fake_logits)g_loss = g_loss_fn(fake_logits)d_gradients = d_tape.gradient(d_loss, D.trainable_variables)g_gradients = g_tape.gradient(g_loss, G.trainable_variables)d_optim.apply_gradients(zip(d_gradients, D.trainable_variables))g_optim.apply_gradients(zip(g_gradients, G.trainable_variables))return g_loss, d_loss# training loop
def train(ds, log_freq=20):ds = iter(ds)for step in range(ITERATION):images = next(ds)g_loss, d_loss = train_step(images)g_loss_metrics(g_loss)d_loss_metrics(d_loss)total_loss_metrics(g_loss + d_loss)if step % log_freq == 0:template = '[{}/{}] D_loss={:.5f} G_loss={:.5f} Total_loss={:.5f}'print(template.format(step, ITERATION, d_loss_metrics.result(),g_loss_metrics.result(), total_loss_metrics.result()))g_loss_metrics.reset_states()d_loss_metrics.reset_states()total_loss_metrics.reset_states()if __name__ == "__main__":train(train_ds)

【GAN】生成式对抗网络论文笔记及TF2代码实现相关推荐

  1. GAN 生成对抗网络论文阅读路线图

    路线图按照下面四个准则构建而成:  ●  从提纲到细节  ●  从经典到前沿  ●  从通用领域到特定领域  ●  专注于最先进的技术 Generative Adversarial Networks ...

  2. DeepLearing:GAN生成式对抗网络

    GAN 生成对抗网络 文章目录 GAN 生成对抗网络 一.介绍 Q&A 二.GAN模型 GAN结构 生成器("假钞厂") 判别器("验钞机") 生成器与 ...

  3. GANs系列:GAN生成式对抗网络原理以及数学表达式解剖

    一.GAN介绍 生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一.模型通过框架中(至少)两 ...

  4. GAN生成式对抗网络

    阅读Antonio Gulli<Deep Learning with Tensorflow 2 and keras>Second Edition 第六章GAN笔记 GAN生成对抗网络是无监 ...

  5. PyTorch 实现 GAN 生成式对抗网络 含代码

    GAN 网络结构 GAN 公式的理解 简单线性 GAN 代码如下 卷积 GAN 代码如下 Ref 网络结构 GAN 公式的理解 minGmaxDV(D,G)=Ex∼Pdata(x)[logD(x)]+ ...

  6. GAN生成对抗网络论文翻译(一)

    给自己一个动力去看英语论文,每天翻译一节,纯属自己翻译,小白一只,如果您能提出建议或者翻译修改,将非常感谢,首先谢谢! How Generative Adversarial Networks and ...

  7. GAN生成对抗网络论文翻译(二)

    英语论文,每天翻译一节(在家自学控制力还是太差),纯属自己翻译,小白一只,如果您能提出建议或者翻译修改,将非常感谢,首先谢谢! 2 Generative Adversarial Networks As ...

  8. GAN生成式对抗网络总结

    [1.介绍] GAN网络可以看成是两个网络模型对抗,一个是生成网络模型G,一个是识别网络模型.生成式网络模型G是一个用来生图片的网络,该模型的输入为一个随机的噪声z,通过这个噪声来生成相应的图片,该图 ...

  9. 不要怂,就是GAN (生成式对抗网络) (六):Wasserstein GAN(WGAN) TensorFlow 代码

    先来梳理一下我们之前所写的代码,原始的生成对抗网络,所要优化的目标函数为: 此目标函数可以分为两部分来看: ①固定生成器 G,优化判别器 D, 则上式可以写成如下形式: 可以转化为最小化形式: 我们编 ...

  10. 不要怂,就是GAN (生成式对抗网络) (五):无约束条件的 GAN 代码与网络的 Graph...

    GAN 这个领域发展太快,日新月异,各种 GAN 层出不穷,前几天看到一篇关于 Wasserstein GAN 的文章,讲的很好,在此把它分享出来一起学习:https://zhuanlan.zhihu ...

最新文章

  1. 熔断的意义和适用场景,你真的清楚吗?
  2. CTF-杂项与密码学之工具使用汇总(三)
  3. action 带参数跳转
  4. SPSS学习系列之SPSS Statistics(简称SPSS)是什么?
  5. 第一段冲刺 站立会议 5.6
  6. 图片底下配的文字叫什么_PPT排版狂想篇 | 如何用一张图片搞定30种排版
  7. Windows XP pro with sp2(x64)VOL版(英文原版)光盘镜像 + 简繁中文语言包 + 有效安装密钥 一些网友都有这样的困惑,Windows XP sp3在安装
  8. input type=text和textarea的区别
  9. TP5路由知识简单个人汇总
  10. 第三方登录之QQ登录(一)——QQ互联开放平台新建应用
  11. 服务器系统0 c000000f,win10系统提示错误代码0xc000000f的三种解决方法
  12. 如何解决取ADO的Recordset对象的RecordCount属性总是-1问题
  13. 怎样导入SDWebImage
  14. 岩棉墙能用CAN/ULC-S101-M89标准测试吗?
  15. 什么是java socket
  16. Unity3D——AR小游戏
  17. STC89C516驱动DS12C887时钟模块
  18. 分享 | NB-IoT智能井盖传感器
  19. 源代码探案系列之 .NET Core 限流中间件 AspNetCoreRateLimit
  20. 软件开发者的精力管理(一)

热门文章

  1. mysql binlog 回滚_Mysql误操作后利用binlog2sql快速回滚的方法详解
  2. 热更新应用--热补丁Hotfix学习笔记
  3. VR家庭火灾安全系统_VR校园火灾安全系统_VR工厂火灾安全系统_VR宿舍火灾安全系统多场景选择
  4. R、冗余分析(RDA)、ggplot2、置信椭圆
  5. win10更新失败导致电脑不能开机怎么办
  6. 4chan php,4chan
  7. linux 软件放什么目录,Linux 下的各种目录
  8. 华为hcie认证工程师设备无故ARP报文丢弃配置
  9. 不花冤枉钱就能回家 --- 程序员教你如何高效抢票
  10. linux操作系统课程内容,《linux操作系统及应用》课程标准