没有合适的资源?快使用搜索试试~ 我知道了~
高斯过程建模变分自动编码器的近似推理误差
2440高斯过程建模变分自动编码器的近似推理误差0Minyoung Kim 三星人工智能中心剑桥,英国0mikim21@gmail.com0摘要0变分自动编码器(VAE)是一种非常成功的生成模型,其关键要素是所谓的摊销推理网络,可以通过单向前馈传递进行测试时间推理。不幸的是,这样做的代价是后验近似的准确性下降,通常表现不如逐个实例的变分优化。尽管最新的半摊销方法通过从VAE的摊销推理输出开始执行几次变分优化更新来缓解这个问题,但它们在测试时间的推理中固有地遭受计算开销。在本文中,我们以完全不同的方式解决这个问题,考虑一个随机推理模型,其中我们将变分后验的均值和方差函数建模为随机高斯过程(GP)。动机是将VAE的摊销后验分布与真实后验的偏差视为随机噪声,这使我们可以将近似误差视为后验近似中的不确定性,并以原则性的高斯过程方式处理。特别地,我们的模型可以通过网络的单向前馈传递来量化后验近似的困难程度,比半摊销方法快得多。我们展示了我们的方法在几个基准数据集上比现有技术实现了更高的测试数据似然度。01. 引言0变分自动编码器(VAE)[14,31]是一种非常成功的生成模型,其中可以轻松地将高度复杂的深度非线性生成过程纳入其中。VAE的关键要素是深度推理(也称为编码器)网络,可以通过网络的单向前馈传递在测试时间进行推理,从而显著提高计算速度。这个特性被称为摊销推理,使得VAE能够避免其他耗时的推理步骤。0标准变分推理技术(例如随机变分推理(SVI)[9])要求在测试时间为每个单独实例解决变分优化问题的耗时步骤。然而,正如最近的研究[2]所建议的,摊销推理也可能是VAE的一个缺点,具体而言,摊销推理网络对后验近似的准确性通常低于SVI的完全变分优化的准确性。减少这种摊销误差有两种一般方法。第一种方法是增加推理模型的网络容量(例如,基于流的模型[13,37])。另一种方法是所谓的半摊销方法[12, 15, 24,27],其关键思想是使用VAE的摊销推理网络产生一个良好的初始分布,从而在测试时间执行几个SVI步骤以进一步减少摊销误差,与多任务(元)学习中的MAML[6]的测试时间模型适应性类似。尽管这些模型通常导致改进的后验近似,但它们引发了几个问题:对于前一类方法,训练模型通常很困难,因为模型复杂度增加;后一类方法在测试时间额外的SVI梯度步骤会导致计算开销。在本文中,我们提出了一种新的方法来解决这些缺点。我们保留了类似于标准VAE的摊销推理框架,但考虑了一个随机推理模型。具体而言,假设变分后验分布的均值和方差函数是先验的高斯过程(GP)分布。这个想法有两个主要动机。第一个动机源于VAE的次优性,其中估计的摊销推理网络与真实后验存在偏差。这种不准确性可以被视为确定性摊销推理网络后验近似的不确定性,并暗示了需要一个原则性的贝叶斯不确定性处理。第二个直觉是,VAE的变分后验分布与真实后验的偏差可以自然地被视为随机噪声。(4)2450而半均摊方法在测试时执行额外的SVI梯度更新以解决这个噪声,我们使用贝叶斯神经网络(GP)对差异进行建模,从而通过原则性的不确定性边缘化获得更快和更准确的均摊模型。贝叶斯处理的另一个好处是我们可以量化近似中的差异,这可以作为后验近似的好坏的指标。我们的模型的推断速度比半均摊方法快得多,只需要通过GP后验边缘化推断网络进行一次前向传递。我们展示了我们的方法在几个基准数据集上获得比最先进的半均摊方法和高容量流编码器模型更高的测试数据似然得分。02. 背景0设x ∈ X为输入数据点,z ∈Rd为潜在向量。我们考虑VAE模型1:0p(z) = N(z; 0, I), pθ(x|z) = N(x; gθ(z), σ2xI), (1)0其中 gθ: Rd → X是一个(深度)神经网络,其权重参数表示为θ,σ2x是白噪声的方差。对于给定的数据D ={xi}Ni=1,我们最大化数据对数似然,�Ni=1 logpθ(xi),关于θ进行优化,其中pθ(x) =Ep(z)[pθ(x|z)]。由于边际对数似然的不可行性,变分推断利用以下不等式,0log pθ(x) ≥ Eq(z|x) � log pθ(x, z) - log q(z|x) �, (2)0对于任何密度 q(z|x),不等式在 q(z|x)接近真实后验时变得更紧密,因为差距等于KL(q(z|x)||pθ(z|x))。然后我们采用一个可计算的密度族(例如高斯分布)qλ(z|x),由λ参数化,并最大化(2)中的下界。由于我们的目标是最大化对数边际 logpθ(x),我们还需要同时或交替优化下界关于θ和λ的部分。注意,在当前θ下,关于λ的下界优化需要针对每个输入x具体化,因此最优解取决于x。形式上,我们可以用λ�(x)表示最优解。随机变分推断(SVI)[9]忠实地实现了这个思想,SVI中的新输入点x的近似后验推断等于通过梯度上升实时解决ELBO优化问题。尽管这可以产生非常准确的01尽管可能存在一些变化(例如,对于pθ(x|z)的异方差),我们假设一个同方差模型以简化问题,我们的方法很容易扩展到变体。2为了简化起见,我们将σ2x视为固定常数,尽管它可以被纳入θ并进行训练。0后验近似,它会产生计算开销,因为我们必须对每个输入 x执行完整的变分优化。VAE [14]通过引入一个具有权重参数ϕ 的深度神经网络 λ(x; ϕ) 作为最优 λ�(x)的通用函数逼近器,并针对 ϕ优化下界来解决这个问题。这种方法被称为均摊变分推断(AVI)。因此,VAE的主要优势是计算速度加快,因为我们可以通过推理网络 λ(x; ϕ) 进行前向传递,为每个 x执行后验推断。[2]中的最新研究提出了VAE中均摊推断的问题,其中数据拟合的质量由于 λ�(x) 和 λ(x; ϕ)之间的近似误差而降低,称为均摊误差。为了保留AVI的计算优势并减少均摊误差,人们尝试利用SVI和AVI的优势,这被称为半均摊变分推断(SAVI)[12, 15,24]。关键思想是学习均摊推断网络,为后续的SVI优化生成一个相当好的初始迭代,可能只需几步。这种热启动的SVI梯度上升速度比完整的SVI优化更快,并且可以减少AVI的近似误差。尽管SAVI中的推断速度比SVI快,但它仍然需要在测试时进行梯度上升优化,这可能是主要的缺点。在下一节中,我们提出了一种比SAVI快得多的新方法,避免了测试时的梯度更新,只需要通过一个单一的网络进行前向传递,同时可以得到更准确的后验近似。03. 高斯过程推断网络0我们从VAE的变分密度开始,但使用稍微不同的符号,如下所示:0q(z|x, f, h) = N � z; f(x), Diag(h(x))2 �, (3)0其中f, h: X →Rd是变分后验分布的均值和标准差函数。请注意,如果我们将f和h建模为确定性函数(神经网络)并优化它们的权重参数(即点估计),那么它就会简化为标准的VAE,其中f和h构成λ(x;ϕ)。然而,这种点估计可能不准确,因此我们考虑遵循贝叶斯处理的随机函数。具体而言,我们让f = [f1(∙), ...,fd(∙)]�和h = [h1(∙), ...,hd(∙)]�先验地独立地遵循高斯过程分布[30]。0f(∙) �0j=1 GP(bj(∙), km(∙, ∙)), h(∙) �0j=1 GP(cj(∙), ks(∙, ∙)).q(z x, W, U) =b(x)+Wψm(x), Diag(c(x)+Uψs(x))2�p(W, U|D) ∝ N(W; 0, I)N(U; 0, I))q(W, U; Λ) =d�j=1N(wj; µj, Σj) N(uj; ηj, Γj)(10)2460这里b(∙) = [b1(∙), ..., bd(∙)]�, c(∙) = [c1(∙), ..., cd(∙)]�0是高斯过程的均值函数,可以由深度神经网络建模,而f和h的高斯过程协方差函数分别由km和ks表示,其中为简单起见,我们在各个维度上共享相同的协方差函数。与SAVI的关系。注意,(3-4)中的高斯过程先验变分密度模型可以写成:0q(z|x, f, h) = N � b(x)+ f(x), Diag(c(x)+ h(x))2 �, (5)0其中f和h现在遵循零均值的高斯过程。如果我们将VAE的点估计推断模型视为:q(z|x) = N � b(x), Diag(c(x))2�,那么(5)有效地模拟了VAE的q(z|x)与真实后验pθ(z|x)之间的差异,通过随机噪声模型。回想一下,为了减小这种差异,半摊销方法在测试时从b(x)和c(x)开始执行额外的SVI梯度更新。相反,我们旨在使用贝叶斯神经网络f和h(GP作为特例;见3.1节)来学习这种差异,从而通过考虑不确定性(随机噪声)以一种有原则的方式获得更快速和更准确的摊销推断模型。例如,GP后验p(f,h|D)可以准确地预测上述差异,而它们的方差(例如V(f(x)|D))可以作为衡量通过摊销推断网络近似后验的不确定性/困难程度的标尺。为此,我们在接下来描述一个合理的似然模型来建立一个GP框架,并推导出一个高效的GP后验推断算法。03.1. 似然模型和高斯过程后验推断0为了建立一个有效的贝叶斯框架,我们定义一个似然模型,即每个个体实例x�D在给定函数f和h下生成的兼容性得分。一个合理的选择是变分下界(2),我们将其表示为:0Lθ(f, h; x) := Eq(z|x, f, h) � log pθ(x, z) − log q(z|x, f, h) �.0(6) 显然log pθ(x) ≥ Lθ(f, h;x),而(6)可以作为对数似然函数log p(x|f,h)的替代。给定数据D ={xi}Ni=1,将高斯过程先验和似然模型结合起来得到高斯过程后验:0p(f, h|D) ∝ p(f) p(h) �0x∈D exp � Lθ(f, h; x) �. (7)0然而,解决(7)需要与数据点数量N成立方关系的时间和内存,这对于大规模数据是不可行的。03 严格来说, e L 可能不是一个有效的密度(积分不等于 1),原则上必须处理困难的归一化分区函数。为了简单起见,我们不考虑它,并将 L 视为非归一化的对数似然函数。0尺度数据。尽管在 GP文献中存在高效可扩展的近似推断技术 [ 5 , 8 , 28 , 32 ,35 ],但我们在这里采用线性深度核技巧 [ 10 , 39],以下简要总结。用于近似 GP的线性深度核技巧。遵循协方差(核)k的0均值 GP的随机(标量)函数 f ( x ) ,即 f ( ∙ ) � GP (0 , k ( ∙ , ∙ )),可以表示为具有显式特征空间映射的线性形式。考虑一个特征映射 ψ : X → R p,使得协方差函数在特征空间(维度为 p)中近似为内积,即 k ( x , x ′ ) ≈ ψ ( x ) � ψ ( x ′ )。现在,引入 p -元随机向量 w � N ( 0 , I ) ,可以将 GP函数写为 f ( x ) = w � ψ ( x ) 。这是因为 Cov ( f ( x ) , f ( x′ )) = Cov ( w � ψ ( x ) , w � ψ ( x ′ )) = ψ ( x ) � ψ ( x ′ ) ≈k ( x , x ′ )。这种表示的一个主要优点是,我们可以将非参数 GP转化为参数化的贝叶斯模型,其中后验推断可以在有限维随机向量 w 上进行,而不是在无限维的 GP 上进行。特征映射ψ ( ∙ ) 可以建模为一个深度神经网络,其权重参数构成 GP的协方差(核)参数。通过这种方式,我们可以(近似地)将 GP视为贝叶斯神经网络的一种特殊情况,其中我们将最终的全连接层 w 视为随机变量 [ 4 , 7 , 20 , 25]。请注意,尽管这是将线性核应用于 ψ ( ∙ )的输出的深度核 [ 39 ]的一个简化形式,但它已经被广泛成功地使用 [ 10 , 36]。回到我们的 GP 后验推断 ( 7 ),两个 GP先验函数可以写成: f j ( x ) = w � j ψ m ( x ) 和 h j ( x ) =u � j ψ s ( x ) 对于 j = 1 , . . . , d ,其中 w j 和 u j是相互独立的 p -元随机向量,来自 N ( 0 , I ) 。特征函数ψ m , ψ s : X → R p 是定义协方差函数的深度神经网络:k m ( x , x ′ ) = ψ m ( x ) � ψ m ( x ′ ) , k s ( x , x ′ ) =ψ s ( x ) � ψ s ( x ′ ) 。令 W = [ w 1 , . . . , w d ] � 和 U =[ u 1 , . . . , u d ] � 是具有随机向量的 ( d × p )矩阵,行中的随机向量,我们有 f ( x ) = [ f 1 ( x ) , ..., f d (x )] � = W ψ m ( x ) , h ( x ) = [ h 1 ( ∙ ) , ..., h d ( ∙ )] � =U ψ s ( x ) 。在 ( 5 ) 中的推断可以写成 q ( z | x , W , U ) 其中0(8) 变为:0x ∈D 时, L θ (x )0其中 L θ ( W , U ; x ) := E q0公式 (8) 变为:0公式(9)0我们通过定义 q ( W , U ) 近似 ( 9 ) :Gaussian by the second-order moment matching4, namely�i αiN(mi, Vi) ≈ N(m, V) where m = �i αimi andV = �i αi(mim⊤i + Vi) − mm⊤, applying it to (11)yields: q(z|x) ≈ N(z; m(x), Diag(v(x))), wheremj(x) = bj(x) + µ⊤j ψm(x),vj(x) = cj(x)2 + 2η⊤j ψs(x)cj(x) + ψm(x)⊤Σjψm(x)+ ψs(x)⊤ ηjη⊤j + Γj ψs(x),(12)KL(q||p) = log ˆpθ(D) −xELBO(θ, Λ; x),(13)ELBO := −Eq(W,U)[KL(q(z|x, W, U)||p(z))] + (14)Eq(z|x) log pθ(x|z)− 1N KL(q(W, U)||N(0, I)).12d�j=1�vj(x) +�bj(x) + µ⊤j ψm(x)�2 − 1 −(15)EN (uj;ηj,Γj)�log cj(x) + u⊤j ψs(x)2��.2. Repeat until convergence:(a) Estimate the marginalized q(z|x) using (12).(b) Optimize the ELBO (14) wrt all parameters.3. (At test time) The GP marginalized encoder q(z|x)can be used to perform reconstruction, and evaluatethe test likelihood pθ(x), e.g., using the importanceweighted sampling method (IWAE) [1]5. The uncer-tainty (variance) of the posterior noise TrV(f(x)|D)(similarly for h) can be approximately estimated asψm(x)⊤� �dj=1 Σj�ψm(x).5IWAE is not used during training since it usually takes too many step-s/samples (e.g., K=100) for training.2470其中 Λ := { µ j , Σ j , η j , Γ j } d j =1 构成 GP变分参数。03.2. GP 后验边缘化编码器0在我们进行 GP 推断和学习之前(第 3.3节),我们推导出后验平均编码器,0q ( z | x ) = 通过积分 q ( W , U ) q ( z | x , W , U ) dW d U . (11)0注意 ( 11 ) 可以看作是我们的 GP VAE模型的最终潜在推断模型,其中 GP 后验 q ( W , U )中捕获的不确定性全部被边缘化掉。例如,我们模型下的测试对数似然得分 log p ( x ) 可以通过重要性加权采样方法 [1 ] 估计为提议分布。由于它也出现在下一节的 GP学习中,我们在这里提供了 q ( z | x ) 的推导。尽管 ( 11 )中的积分被视为两个高斯函数,但由于 ( 8 )的协方差依赖于 U,无法得到闭合形式的公式。相反,我们将 ( 11 )视为(极限的)高斯混合物,�0对于j =1,...,d。从(12)可以看出,作为一个特例,如果忽略GP后验(即Λ = {µj,Σj,ηj,Γj} =0以导致确定性零噪声模型),则q(z |x)变为标准VAE的编码器分布,其均值为bj(x)和方差为cj(x)2。我们学到的GP后验(非零Λ)告诉我们如何通过(12)确定和补偿真实后验pθ(z | x)的偏差。03.3. GP推断和学习0现在我们描述一下如何进行变分GP推断(即优化q(W,U;Λ)中的Λ)。与其他GP变分学习类似,我们将推导出的目标函数建立了模型数据似然的一个下界,因此我们可以通过最大化下界(经验贝叶斯)来学习模型参数。模型参数包括GP均值中的参数04等价于min { m , V } KL � � i α i N ( m i , V i ) || N ( m , V ) � .0以及协方差函数(即深度网络的权重参数b(x),c(x),ψm(x)和ψs(x))以及似然模型中的参数(即解码器pθ(x | z)中的θ)。为了近似q(W,U)≈p(W,U |D),我们的目标是最小化KL�q(W,U)|| p(W,U |D)�,并且可以证明KL可以写成如下形式(详见补充材料):0x e L θ ( W , U ; x ) �是使用我们的替代L(9)的边缘数据似然,以及0我们现在讨论如何推导出ELBO(14)中的每个项。(14)的最后一项是高斯密度之间的KL散度,可以得到一个闭合形式。第二项是对于GP后验边缘化编码器q(z |x)的期望对数似然,我们可以通过蒙特卡洛估计和众所周知的重参数化技巧[14]来实现。最后,(14)中的第一项是高斯平均的KL散度,因此它具有一个闭合形式:0(15)中的最后一项本质上是一个高斯期望的平方对数函数,可以写成一个闭合形式,尽管复杂,使用互补超几何函数[22]来估计它。然而,为了简化起见,我们使用重参数化的蒙特卡洛方法来估计它。总结。整体学习步骤如下:1.初始化变分参数Λ和模型参数θ,b(x),c(x),ψm(x)和ψs(x)。4. Related WorkAs enumerating all related literature in this section canbe infeasible, we briefly review some of the recent worksthat are highly related with ours. The issue of amortizationerror in VAE was raised in [2], after which several semi-amortized methods were attempted [12, 15, 24] that essen-tially follow a few SVI gradient steps at test time. An alter-native line of research approaches the problem by enlarg-ing the representational capacity of the encoder network,including the flow-based models that apply nonlinear invert-ible transformations to VAE’s variational posterior [13,37].Recently [11] proposed a greedy recursive mixture estima-tion method for the encoder in VAE, where the idea is to it-eratively augment the current mixture with new componentsto maximally reduce the divergence between the variationaland the true posteriors. There were also previous attempts toincorporate additional random variables into inference net-works [23]. Although they introduced latent random vari-ables in both encoder and decoder models, their motivationis quite different from our random noise view in the pos-terior approximation, and they mainly aim at endowing aricher density family and functional capacity.In parallel, there have been previous attempts to applythe Bayesian approach to the VAE modeling.However,they are in nature different from our random function mod-eling of the encoder uncertainty. The Bayesian VariationalVAE [3] rather focused on modeling uncertainty in the de-coder model, and their main focus is how to deal with out-of-distribution samples in the test set, hence more alignedwith transfer learning. The Compound VAE [33] also tack-led the similar problem of reducing the amortization gapof the VAE, however, their variational density modeling isless intuitive, inferring the latent vector z and the encoderweights W from each data instance. Note that we havemore intuitive Bayesian inference for the encoder param-eters, q(W|D) given the entire training data D. Their treat-ment is deemed to augment the latent z with the weights Win the conventional VAE. The Variational GP [38], althoughlooking similar to ours, is not specifically aimed for VAE oramortized inference, but for general Bayesian inference. Inturn, they built the posterior model using a GP function de-fined on the Gaussian distributed latent input space, insteadof defining GP on the input data as we did.5. EvaluationsWe evaluate our Gaussian process VAE model on severalbenchmarks to show its improved performance over the ex-isting state-of-the-arts. Our focus is two-fold: i) improvedtest likelihood scores, and ii) faster test time inference thansemi-amortized methods. We also contrast with the flow-based models that employ high capacity encoder networks.The competing approaches are as follows. 1) VAE: Thestandard VAE model with amortized inference [14, 31]. 2)SA: The semi-amortized VAE [12]. We fix the SVI gra-dient step size as 10−3, but vary the number of SVI stepsfrom {1, 2, 4, 8}. 3) IAF: The autoregressive-based flowmodel for the encoder q(z|x) [13], which has richer ex-pressive capability than the VAE’s post-Gaussian encoder.The number of flows is chosen from {1, 2, 4, 8}. 4) HF:The Householder flow encoder model that represents thefull covariance using the Householder transformation [37].The number of flows is chosen from {1, 2, 4, 8}. 5) ME:To enlarge the representational capacity of the encoder net-work, another possible baseline is a mixture model. Morespecifically, the inference model is defined as: q(z|x) =�Mm=1 α(m|x)qm(z|x), where qm(z|x) are amortized in-ference models (e.g., having the same network architecturesas the VAE’s encoder network), and α(m|x) are mixingproportions, dependent on the input x, which can be mod-eled by a single neural network. The mixture encoder (ME)model is trained by gradient ascent to maximize the lowerbound of log p(x) similarly as the VAE. The number of mix-ture components M is chosen from {1, 2, 4, 8}. 6) RME:The recursive mixture estimation method for the encoder inVAE [11], which showed superiority to ME’s blind mixtureestimation. 7) GPVAE: Our proposed GP encoder model.The GP means and feature functions have the same networkarchitectures as the VAE’s encoder.Datasets. We use the following five benchmark datasets:MNIST[19],OMNIGLOT[18],CIFAR106[16],SVHN [26], and CelebA [21]. For CelebA, we use tightlycropped face images of size (64 × 64 × 3), and randomlysplit the data into 80%/10%/10% train/validation/test sets.For the others, we follow the splits provided in the data,with 10% of the training sets held out for validation.Network architectures.We adopt the convolutionalneural networks for both encoder and decoder models for allcompeting approaches. The main reason is that the convolu-tional networks are believed to outperform fully connectednetworks for many tasks on the image domain7 [17,29,34].For the encoder architecture, we first apply L convolutionallayers with (4 × 4)-pixels kernels, followed by two fully-connected layers with hidden layers dimension h. For thedecoder, the input images first go through two fully con-nected layers, followed by L transposed convolutional lay-ers with (4 × 4)-pixels filters. Here, L = 3 for all datasetsexcept CelebA (L = 4), and h = 256 for the MNIST/OM-NIGLOT and h = 512 for the others. The deep kernel fea-ture functions ψm,s(x) in our GPVAE model have exactlythe same architecture as the encoder network except that thelast fully connected layer is removed. This ensures that theGP functions f(x) and h(x) have equal functional capac-ity to the base encoder network since they are defined to be2480CIFAR10的结果可以在补充材料中找到。我们在补充材料中对这两个网络进行了实证比较。2490表1.(MNIST和OMNIGLOT)测试对数似然分数(单位为nat)。模型名称旁边的括号中的数字表示:SA中的SVI步数,IAF和HF中的流数,ME和RME中的混合组件数。上标是标准偏差。最佳(平均)结果以红色加粗显示。在每一列中,我们执行双侧t检验来衡量最佳模型(红色)与每个竞争方法之间的差异的统计显著性。我们将那些p值大于0.01的结果以蓝色加粗显示(很少有差异的证据)。因此,任何纯色非着色表示p≤0.01(显著不同)。0MNIST OMNIGLOT0DIM(z)= 10 DIM(z)= 20 DIM(z)= 50 DIM(z)= 10 DIM(z)= 20 DIM(z)= 500VAE 685.1 1.8 930.7 3.9 1185.7 3.9 347.0 1.7 501.6 1.6 801.6 4.00SA(1)688.1 2.7 921.2 2.3 1172.1 1.8 344.1 1.4 499.3 2.5 792.7 7.90SA(2)682.2 1.5 932.0 2.4 1176.3 3.4 349.5 1.4 501.0 2.7 793.1 4.80SA(4)683.5 1.5 925.5 2.6 1171.3 3.5 342.1 1.0 488.2 1.8 794.4 1.90SA(8)684.6 1.5 928.1 3.9 1183.2 3.4 344.8 1.1 490.3 2.8 799.4 2.70IAF(1)687.3 1.1 934.0 3.3 1180.6 2.7 347.8 1.6 489.9 1.9 788.8 4.10IAF(2)677.7 1.6 931.4 3.7 1190.1 1.9 344.2 1.6 494.9 1.4 795.7 2.70IAF(4)685.0 1.5 926.3 2.6 1178.1 1.6 347.9 1.9 496.0 2.0 775.1 2.20IAF(8)689.7 1.4 934.1 2.4 1150.0 2.2 343.9 1.4 498.8 2.3 774.7 2.90HF(1)682.5 1.4 917.2 2.6 1204.3 4.0 335.5 1.2 488.6 2.0 795.9 3.30HF(2)677.6 2.2 923.9 3.1 1191.5 10.8 340.6 1.3 495.9 1.8 784.5 4.80HF(4)683.3 2.6 927.3 2.8 1197.2 1.5 343.3 1.2 487.0 2.7 799.7 3.20HF(8)679.6 1.5 928.5 3.1 1184.1 1.8 343.3 1.3 488.3 2.4 794.6 4.00ME(2)685.7 1.2 926.7 3.0 1152.8 1.7 344.2 1.5 491.7 1.4 793.4 3.80ME(3)678.5 2.5 933.1 4.1 1162.8 4.7 350.3 1.8 491.2 2.1 807.5 4.90ME(4)680.0 0.9 914
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Python和Opencv的车牌识别系统实现
- 我的代码小部件库:统计、MySQL操作与树结构功能
- React初学者入门指南:快速构建并部署你的第一个应用
- Oddish:夜潜CSGO皮肤,智能爬虫技术解析
- 利用REST HaProxy实现haproxy.cfg配置的HTTP接口化
- LeetCode用例构造实践:CMake和GoogleTest的应用
- 快速搭建vulhub靶场:简化docker-compose与vulhub-master下载
- 天秤座术语表:glossariolibras项目安装与使用指南
- 从Vercel到Firebase的全栈Amazon克隆项目指南
- ANU PK大楼Studio 1的3D声效和Ambisonic技术体验
- C#实现的鼠标事件功能演示
- 掌握DP-10:LeetCode超级掉蛋与爆破气球
- C与SDL开发的游戏如何编译至WebAssembly平台
- CastorDOC开源应用程序:文档管理功能与Alfresco集成
- LeetCode用例构造与计算机科学基础:数据结构与设计模式
- 通过travis-nightly-builder实现自动化API与Rake任务构建
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功