当前位置: 首页 > news >正文

NIPS2014 | GAN: 生成对抗网络

Generative Adversarial Nets

  • 摘要-Abstract
  • 引言-Introduction
  • 相关工作-Related Work
  • 对抗网络-Adversarial Nets
  • 理论结果-Theoretical Results
  • 实验-Experiments
  • 优势和不足-Advantages and disadvantages
    • 缺点
    • 优点
  • 结论及未来工作-Conclusions and future work
    • 研究总结
    • 未来研究方向


论文链接
本文 “Generative Adversarial Nets” 提出了生成对抗网络(GAN)这一通过对抗过程估计生成模型的新框架,为生成模型的研究开辟了新方向。


摘要-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 G G that captures the data distribution, and a discriminative model D D D that estimates the probability that a sample came from the training data rather than G G G. The training procedure for G G G is to maximize the probability of D D D making a mistake. This framework corresponds to a minimax two-player game. In the space of arbitrary functions G G G and D D D, a unique solution exists, with G G G recovering the training data distribution and D D D equal to 1 2 \frac{1}{2} 21 everywhere. In the case where G G G and D D 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 G,它捕获数据分布;以及一个判别模型 D D D,它估计一个样本来自训练数据而非 G G G 的概率。 G G G 的训练过程是最大化 D D D 犯错的概率。这个框架对应于一个极小极大的双人博弈。在任意函数 G G G D D D 的空间中,存在一个唯一解,此时 G G G 恢复训练数据分布,并且 D D D 处处等于 1 2 \frac{1}{2} 21。在 G G G D D D 由多层感知器定义的情况下,整个系统可以用反向传播进行训练。在训练或生成样本期间,不需要任何马尔可夫链或展开的近似推理网络。实验通过对生成样本的定性和定量评估展示了该框架的潜力。


引言-Introduction

深度学习旨在发现丰富的分层模型以表示数据概率分布,但目前在生成模型方面影响较小。生成对抗网络(GAN)框架通过对抗过程估计生成模型,其生成模型与判别模型相互竞争,推动双方改进方法,直至生成样本与真实样本难以区分。在该框架中,生成模型通过多层感知器将随机噪声映射到数据空间,判别模型也为多层感知器,用于判断样本来源。此框架可避免传统生成模型在近似概率计算和利用分段线性单元方面的困难,且训练时仅需反向传播和随机失活算法,无需马尔可夫链或近似推断网络,为生成模型研究带来新的思路与方法。


相关工作-Related Work

该部分主要回顾了与生成对抗网络(GAN)相关的先前研究工作,包括深度生成模型、生成机器、基于判别准则训练生成模型、神经网络竞争概念以及对抗样本等方面的研究进展,通过与这些工作对比,凸显了GAN的独特性与创新性。具体内容如下:

  1. 深度生成模型:多数工作聚焦于通过最大化对数似然训练提供概率分布函数参数化规范的模型,如深度玻尔兹曼机,但此类模型似然函数难处理,需众多近似计算。
  2. 生成机器:为解决上述问题,“生成机器”应运而生,如生成随机网络,可通过精确反向传播训练,但仍需马尔可夫链。本文工作在此基础上消除了马尔可夫链的使用。
  3. 基于判别准则训练生成模型:已有方法使用判别准则训练生成模型,但对于深度生成模型,这些准则难以处理,因其涉及概率比率,无法用变分近似法逼近。噪声对比估计(NCE)通过让生成模型区分数据与固定噪声分布来训练,类似GAN中的竞争机制,但NCE的“判别器”定义需评估和反向传播两种密度,限制了其应用。
  4. 神经网络竞争概念:先前工作如预测性最小化,让神经网络隐藏单元与预测其值的另一网络输出竞争,但与GAN有显著差异。GAN中网络竞争是唯一训练准则,竞争性质为生成丰富高维向量作为输入,且基于极小极大游戏而非优化问题。
  5. 对抗样本:GAN常与“对抗样本”概念混淆,对抗样本是通过梯度优化找到的使分类网络误分类的样本,主要用于分析神经网络行为,而非训练生成模型,而GAN是一种生成模型训练机制。

对抗网络-Adversarial Nets

这部分主要介绍了生成对抗网络(GAN)的模型结构、训练过程以及在实际训练中遇到的问题和解决方法,为理解GAN的工作原理和实现方式提供了详细阐述。具体内容如下:

  1. 模型结构
    • 生成模型 G G G:将输入噪声变量 z z z(先验为 p z ( z ) p_z(z) pz(z))通过多层感知器映射到数据空间,记为 G ( z ; θ g ) G(z; \theta_g) G(z;θg),其中 θ g \theta_g θg 为参数。
    • 判别模型 D D D:同样为多层感知器,输出一个标量,表示样本 x x x 来自数据而非生成模型 G G G 生成样本的概率。
  2. 训练过程
    • 训练目标:判别模型 D D D 训练目标是最大化将训练样本和生成模型 G G G 生成样本正确分类的概率,生成模型 G G G 训练目标是最小化 log ⁡ ( 1 − D ( G ( z ) ) ) \log (1 - D(G(z))) log(1D(G(z))),二者构成极小极大博弈,价值函数为 V ( G , D ) = E x ∼ p d a t a ( x ) [ log ⁡ D ( x ) ] + E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] V(G, D)=\mathbb{E}_{x \sim p_{data}(x)}[\log D(x)]+\mathbb{E}_{z \sim p_{z}(z)}[\log (1 - D(G(z)))] V(G,D)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]
    • 实际训练方法:由于直接优化判别模型 D D D 至最优计算成本高且易过拟合,实际采用交替优化方法,即先进行 k k k 步优化 D D D(通过小批量随机梯度上升),再进行1步优化 G G G(通过小批量随机梯度下降),实验中 k = 1 k = 1 k=1 效果较好。
  3. 训练问题及解决方法:训练初期,生成模型 G G G 生成样本较差,判别模型 D D D 能高置信度拒绝,导致 log ⁡ ( 1 − D ( G ( z ) ) ) \log (1 - D(G(z))) log(1D(G(z))) 饱和,梯度消失。解决方法是训练 G G G 最大化 log ⁡ D ( G ( z ) ) \log D(G(z)) logD(G(z)),该目标函数在学习早期能提供更强梯度,且与最小化 log ⁡ ( 1 − D ( G ( z ) ) ) \log (1 - D(G(z))) log(1D(G(z))) 有相同的动态平衡点。
    在这里插入图片描述
    图1:生成对抗网络通过同时更新判别分布( D D D,蓝色虚线)来进行训练,使其能够区分来自数据生成分布(黑色点线) p x p_{x} px 的样本和来自生成分布 p g p_{g} pg G G G)(绿色实线)的样本。下方的水平线是 z z z 采样的域,在此情况下是均匀采样。上方的水平线是 x x x 域的一部分。向上的箭头展示了映射 x = G ( z ) x = G(z) x=G(z) 如何将非均匀分布 p g p_{g} pg 施加到变换后的样本上。 G G G p g p_{g} pg 的高密度区域收缩,在低密度区域扩展。
    (a)考虑一对接近收敛的对抗网络: p g p_{g} pg p d a t a p_{data} pdata 相似,并且 D D D 是一个部分准确的分类器。
    (b)在算法的内循环中, D D D 被训练以区分来自数据的样本,收敛到 D ∗ ( x ) = p d a t a ( x ) p d a t a ( x ) + p g ( x ) D^*(x)=\frac{p_{data}(x)}{p_{data}(x)+p_{g}(x)} D(x)=pdata(x)+pg(x)pdata(x)
    (c)在对 G G G 进行更新后, D D D 的梯度引导 G ( z ) G(z) G(z) 流向更有可能被分类为数据的区域。
    (d)经过若干步训练后,如果 G G G D D D 有足够的能力,它们将达到一个两者都无法改进的点,因为 p g = p d a t a p_{g}=p_{data} pg=pdata。此时判别器无法区分这两个分布,即 D ( x ) = 1 2 D(x)=\frac{1}{2} D(x)=21

理论结果-Theoretical Results

本部分从理论上对生成对抗网络(GAN)进行了深入分析,包括证明极小极大博弈的全局最优解以及算法1的收敛性,为GAN的有效性提供了理论支持,具体内容如下:

  1. 全局最优性
    • 最优判别器 D D D 的形式:对于给定的生成器 G G G,最优判别器 D G ∗ ( x ) = p d a t a ( x ) p d a t a ( x ) + p g ( x ) D_G^*(x)=\frac{p_{data}(x)}{p_{data}(x)+p_g(x)} DG(x)=pdata(x)+pg(x)pdata(x)。证明通过对判别器训练准则 V ( G , D ) V(G, D) V(G,D) 求最大值得到,其本质是最大化估计条件概率 P ( Y = y ∣ x ) P(Y = y|x) P(Y=yx) 的对数似然( Y Y Y 表示样本 x x x 来源, y = 1 y = 1 y=1 表示来自 p d a t a p_{data} pdata y = 0 y = 0 y=0 表示来自 p g p_g pg)。
    • 全局最小值条件:当且仅当 p g = p d a t a p_g = p_{data} pg=pdata 时,虚拟训练准则 C ( G ) C(G) C(G) 达到全局最小值 − log ⁡ 4 -\log 4 log4。证明通过将 p g = p d a t a p_g = p_{data} pg=pdata 代入 C ( G ) C(G) C(G) 表达式得到 C ( G ) = log ⁡ 1 2 + log ⁡ 1 2 = − log ⁡ 4 C(G)=\log \frac{1}{2}+\log \frac{1}{2}=-\log 4 C(G)=log21+log21=log4,再通过与 C ( G ) = − log ⁡ ( 4 ) + K L ( p d a t a ∣ ∣ p d a t a + p g 2 ) + K L ( p g ∣ ∣ p d a t a + p g 2 ) C(G)=- \log (4)+KL(p_{data}||\frac{p_{data}+p_g}{2})+KL(p_g||\frac{p_{data}+p_g}{2}) C(G)=log(4)+KL(pdata∣∣2pdata+pg)+KL(pg∣∣2pdata+pg) 对比,利用詹森 - 香农散度(JSD)非负性,得出 C ∗ ( G ) = − log ⁡ 4 C^*(G)=-\log 4 C(G)=log4 为全局最小值且唯一解为 p g = p d a t a p_g = p_{data} pg=pdata
  2. 算法1的收敛性:若 G G G D D D 有足够容量,在 算法1 的每一步中,判别器能达到给定 G G G 下的最优,且 p g p_g pg E x ∼ p d a t a [ log ⁡ D G ∗ ( x ) ] + E x ∼ p g [ log ⁡ ( 1 − D G ∗ ( x ) ) ] \mathbb{E}_{x \sim p_{data}}[\log D_G^*(x)]+\mathbb{E}_{x \sim p_g}[\log (1 - D_G^*(x))] Expdata[logDG(x)]+Expg[log(1DG(x))] 准则更新,则 p g p_g pg 收敛到 p d a t a p_{data} pdata。证明基于 V ( G , D ) = U ( p g , D ) V(G, D)=U(p_g, D) V(G,D)=U(pg,D) p g p_g pg 的凸函数,其上确界的次导数包含函数在最大值点的导数,通过计算 p g p_g pg 的梯度下降更新,结合定理1中 sup ⁡ D U ( p g , D ) \sup_D U(p_g, D) supDU(pg,D) p g p_g pg 上的凸性和唯一全局最优性,得出 p g p_g pg 收敛到 p d a t a p_{data} pdata 的结论。

算法1:生成对抗网络的小批量随机梯度下降训练。应用于判别器的步数 k k k 是一个超参数。在我们的实验中,我们使用了 k = 1 k = 1 k=1,这是成本最低的选项。
在这里插入图片描述

在实际中,虽然GAN通过函数 G ( z ; θ g ) G(z; \theta_g) G(z;θg) 表示有限的 p g p_g pg 分布族,优化 θ g \theta_g θg 而非 p g p_g pg 本身,使得上述理论证明不完全适用,但多层感知器在实践中的良好性能表明其仍是合理模型。


实验-Experiments

该部分详细阐述了在多个数据集上对生成对抗网络(GAN)进行训练的实验过程,包括数据集选择、模型配置、评估指标以及实验结果展示,通过实验验证了GAN的有效性和潜力,具体内容如下:

  1. 实验设置
    • 数据集:使用了MNIST、多伦多人脸数据库(TFD)和CIFAR - 10等数据集进行训练。
    • 模型结构与激活函数:生成器网络使用整流线性激活函数和sigmoid激活函数的混合,判别器网络使用maxout激活函数,并在训练判别器网络时应用了随机失活(dropout)。实验中仅在生成器网络的最底层输入中添加噪声。
  2. 评估方法
    • 通过将高斯Parzen窗拟合到生成器 G G G 生成的样本上,来估计测试集数据在 p g p_g pg 下的概率,并报告其对数似然。高斯分布的 σ \sigma σ 参数通过在验证集上进行交叉验证获得。此方法虽在高维空间表现不佳且方差较大,但为当时估计生成模型似然的最佳可用方法,也凸显了研究新评估方法的必要性。
  3. 实验结果
    • 表1 展示了在MNIST和TFD数据集上基于Parzen窗的对数似然估计结果,与其他模型对比,体现了GAN的性能表现。
    • 图2 展示了训练后从生成器网络中抽取的样本,表明这些样本与训练集中的最近邻样本不同,是模型实际生成的,且采样过程不依赖马尔可夫链混合,样本间不相关,凸显了GAN生成样本的能力。
    • 图3 展示了通过在 z z z 空间坐标之间进行线性插值得到的数字,进一步展示了模型的特性。

通过这些实验,虽未声称GAN生成的样本优于现有方法,但表明其至少与文献中较好的生成模型具有竞争力,证明了对抗框架在生成模型研究中的潜力。

在这里插入图片描述
表1:基于Parzen窗的对数似然估计。MNIST数据集上报告的数字是测试集样本的平均对数似然,均值的标准误差是通过样本计算得出的。在TFD数据集上,我们计算了数据集各折的标准误差,每折使用其验证集选择不同的 σ \sigma σ。在TFD数据集上, σ \sigma σ在每一折上进行交叉验证,并计算每折的平均对数似然。对于MNIST,我们与该数据集的实值(而非二进制)版本的其他模型进行比较。

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

在这里插入图片描述
图3:通过在完整模型的(z)空间坐标之间进行线性插值得到的数字。


优势和不足-Advantages and disadvantages

该部分主要分析了生成对抗网络(GAN)相对于先前建模框架的优缺点,明确了GAN的特性和改进方向,具体内容如下:

缺点

  1. 缺乏显式表示:生成模型 p g ( x ) p_g(x) pg(x) 没有显式表示,这在某些应用场景下可能限制对模型分布的直接理解和分析。
  2. 训练同步要求高:训练时判别器 D D D 必须与生成器 G G G 良好同步。若 G G G 训练过多而未及时更新 D D D,可能出现“Helvetica场景”,即 G G G 将过多 z z z 值映射到相同 x x x 值,导致缺乏足够多样性来建模 p d a t a p_{data} pdata,类似于玻尔兹曼机中负链需在学习步骤间保持更新的要求。

优点

  1. 计算效率高
    • 无需马尔可夫链,仅通过反向传播即可获得梯度,简化了训练过程。
    • 学习过程中无需进行复杂推断,减少了计算资源和时间消耗。
    • 能够灵活融入各种函数,增加了模型的表达能力。
  2. 统计特性良好
    • 生成器网络仅通过判别器的梯度更新,避免了输入组件直接复制到参数中,有助于学习到更具代表性的特征。
    • 可以表示非常尖锐甚至退化的分布,而基于马尔可夫链的方法为保证链在模式间混合,要求分布相对模糊,GAN在这方面具有优势。

总体而言,GAN在计算方面具有显著优势,在统计特性上也有独特之处,但仍存在一些需要解决的问题,特别是在训练同步和分布表示方面。这些优缺点为进一步研究和改进GAN提供了重要参考。


结论及未来工作-Conclusions and future work

本部分总结了生成对抗网络(GAN)框架的研究成果,并对未来研究方向提出了展望,为GAN的进一步发展提供了思路,具体内容如下:

研究总结

本文提出的GAN框架通过对抗过程估计生成模型,理论分析表明在一定条件下能使生成模型收敛到数据分布,实验在多个数据集上验证了其有效性,生成样本具有竞争力,证明了对抗框架的可行性。

未来研究方向

  1. 构建条件生成模型:通过将条件变量 c c c 作为输入添加到生成器 G G G 和判别器 D D D 中,可得到条件生成模型 p ( x ∣ c ) p(x|c) p(xc),从而扩展GAN的应用范围,如生成特定类别的图像等。
  2. 执行学习近似推断:训练一个辅助网络来预测给定 x x x z z z,类似于唤醒 - 睡眠算法中的推断网,但具有在生成器网络训练完成后针对固定生成器进行训练的优势,有助于深入理解生成过程中的潜在因素。
  3. 建模条件分布:训练一系列共享参数的条件模型来近似建模 p ( x S ∣ x S ′ ) p(x_S|x_{S'}) p(xSxS) S S S x x x 索引的子集),可实现对数据条件关系的更深入建模,例如对图像不同部分之间的关系进行建模。
  4. 用于半监督学习:利用判别器或推断网的特征,在有限标记数据情况下提高分类器性能,为半监督学习提供新的方法和思路,有望在数据标记困难或成本高昂的场景中发挥作用。
  5. 改进训练效率:通过设计更好的方法协调 G G G D D D 的训练,或确定更合适的 z z z 采样分布,有望大幅加速训练过程,提高GAN的实用性和效率,使其能更好地应用于大规模数据和复杂任务。

这些研究方向有望进一步挖掘GAN框架的潜力,推动生成模型领域的发展,为解决实际问题提供更强大的工具。

相关文章:

NIPS2014 | GAN: 生成对抗网络

Generative Adversarial Nets 摘要-Abstract引言-Introduction相关工作-Related Work对抗网络-Adversarial Nets理论结果-Theoretical Results实验-Experiments优势和不足-Advantages and disadvantages缺点优点 结论及未来工作-Conclusions and future work研究总结未来研究方…...

WebGPU入门初识

什么是 WebGPU? WebGPU 是一种现代图形 API,旨在取代 WebGL,提供更高性能和更灵活的 GPU 加速能力。它基于 Vulkan、Metal 和 Direct3D 12,为 Web 开发者带来了类似于原生图形 API 的性能和控制力。 与 WebGL 不同,Web…...

Go语言基础语法

文章目录 Go语言基础语法一、引言二、基础语法1、变量声明与作用域1.1、全局变量1.2、局部变量1.3、块作用域 2、基本数据类型3、控制流程3.1、条件语句3.2、循环语句 4、函数5、并发编程 三、使用示例四、并发编程示例五、变量作用域详解六、总结 Go语言基础语法 一、引言 G…...

易基因: BS+ChIP-seq揭示DNA甲基化调控非编码RNA(VIM-AS1)抑制肿瘤侵袭性|Exp Mol Med

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 肝细胞癌(hepatocellular carcinoma,HCC)早期复发仍然是一个具有挑战性的领域,其中涉及的机制尚未完全被理解。尽管微血管侵犯&#xff08…...

layui动态拼接生成下拉框验证必填项失效问题

利用 jQuery 动态拼接下拉框时&#xff0c;lay-verify"required" 失效了&#xff0c;有以下几种原因。 1. <form></form>标签 加入 layui 类&#xff0c;class"layui-form" 。提交按钮上加自动提交&#xff0c;lay-submit ""; 。需…...

Speckly:基于Speckle文档的RAG智能问答机器人

前言 Speckly 是一个基于 检索增强生成 (RAG) 技术的智能问答机器人&#xff0c;它能像一位经验丰富的工程师&#xff0c;理解你的问题&#xff0c;并从 Speckle 文档中精准地找到答案。更厉害的是&#xff0c;它甚至可以帮你生成代码片段&#xff01;&#x1f680; 本文将详…...

NodeRed使用心得,实现增删改查等

使用场景介绍 在VUE中使用nodeRed实现对节点的 增删改查等功能&#xff0c;且储存成功之后下点击时启动对应流程 安装与配置 1.安装NodeRed npm install -g --unsafe-perm node-red 安装完成后&#xff0c;你可以通过运行以下命令来启动Node-RED node-red-start2. 配置文件 N…...

万物皆有解法(序)

万物皆有解法&#xff08;序&#xff09; 《万物有解》一&#xff1a;解的存在 解&#xff1a;可做解释解答&#xff0c;此文引申为原因。可做解除、解围&#xff0c;此文引申为解法、方法。 先有事物存于世-what&#xff0c;再有原因为何存-why&#xff0c;再有解法如何除去…...

OpenCV相机标定与3D重建(37)计算两幅图像之间单应性矩阵(Homography Matrix)的函数findHomography()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 找到两个平面之间的透视变换。 cv::findHomography 是 OpenCV 库中用于计算两幅图像之间单应性矩阵&#xff08;Homography Matrix&#xff09;的…...

从虚拟到现实:AI与AR/VR技术如何改变体验经济?

引言&#xff1a;体验经济的崛起 在当今消费环境中&#xff0c;产品与服务早已不再是市场竞争的唯一焦点&#xff0c;能够提供深刻感知和独特体验的品牌&#xff0c;往往更能赢得消费者的青睐。这种转变标志着体验经济的崛起。体验经济不仅仅是简单的买卖行为&#xff0c;而是通…...

Linux系统之stat命令的基本使用

Linux系统之stat命令的基本使用 一、stat命令 介绍二、stat命令帮助2.1 查询帮助信息2.2 stat命令的帮助解释 三、stat命令的基本使用3.1 查询文件信息3.2 查看文件系统状态3.3 使用格式化输出3.4 以简洁形式打印信息 四、注意事项 一、stat命令 介绍 stat 命令用于显示文件或文…...

c++ 命名空间

目录 目录 目录 namespace的定义 代码演示 先使用全局域&#xff0c;再使用namespace定义出的域 命名空间中可以定义变量/函数/类型等 命名空间可以嵌套 namespace的使用 指定命名空间访问 using将命名空间中某个成员展开 展开命名空间中全部成员 在c中&#xff0c;由…...

【实验记录】动手实现一个简单的神经网络实验(一)

最近上了“神经网络与深度学习”这门课&#xff0c;有一个自己动手实现调整神经网络模型的实验感觉还挺有记录意义&#xff0c;可以帮我巩固之前学习到的理论知识&#xff0c;所以就打算记录一下。 实验大概是使用LeNet&#xff08;卷积神经网络&#xff09;对MINIST数据集做图…...

【2024年最新】BilibiliB站视频动态评论爬虫

废话不多说&#xff0c;直接先放git仓库&#xff1a;GitHub - linyuye/Bilibili_crawler: bilibili爬虫&#xff0c;基于selenium获取oid与cookie&#xff0c;request获取api内容 〇&#xff1a;概念简述 oid&#xff1a;视频/动态的uuid&#xff0c;b站对于发布内容的通用唯…...

清空DNS 缓存

如果遇到修改了host文件&#xff0c;但是IP和域名的映射有问题的情况&#xff0c;可以尝试刷新DNS缓存。 ipconfig/flushdns win建加R建&#xff0c;然后输入cmd&#xff0c;然后回车 然后回车&#xff0c;或者点击确定按钮。 出现如下所示标识清空DNS 缓存成功。...

东土智能交通服务器助力北京市车路云一体化建设

背景及意义 北京高级别自动驾驶示范区自2020年启动建设&#xff0c;至今已经发展建设到3.0阶段&#xff0c;通州区作为3.0阶段扩建的重点区域之一&#xff0c;扩区建设范围共计约175平方公里&#xff0c;涉及18个属地街镇&#xff0c;涵盖580个路口。 作为北京市车路云一体化…...

HarmonyOS NEXT 实战之元服务:静态案例效果---妙语集语

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1完整代码案例如下&#xff1a; import { authentication } …...

python基础项目

1.联系人案例 # 导入的模块 from input_util import * import re import csv# 定义一个变量保存文件读取的信息 users {}# 封装读取文件的函数 def reader_file(path_name: str ./python基础/2024-11-15python基础项目/data/a.csv) -> None:try:with open(path_name, enco…...

mysql返回N/A

在写统计图的接口&#xff0c;sql查询一直无数据&#xff0c;给的默认值也没有实现&#xff1a; SELECTifnull( unit.num, 0 ) riskUnitCount,ifnull( EVENT.num, 0 ) riskEventCount,ifnull( measure.num, 0 ) riskMeasureCount FROMtb_companyLEFT JOIN (SELECTrisk.qyid,co…...

C++---------迭代策略与迭代器

一、迭代策略与迭代器 迭代器的概念 迭代器是一种对象&#xff0c;它提供了一种统一的方式来访问容器&#xff08;如数组、向量、列表等&#xff09;中的元素&#xff0c;而不暴露容器的内部结构。迭代器的行为类似于指针&#xff0c;可以用于遍历容器中的元素、修改元素以及…...

深入解析 Oracle 的聚合函数 ROLLUP

目录 深入解析 Oracle 的聚合函数 ROLLUP一、ROLLUP 函数概述二、ROLLUP 函数语法三、ROLLUP 实例详解&#xff08;一&#xff09;基础分组聚合&#xff08;二&#xff09;引入 ROLLUP 函数&#xff08;三&#xff09;ROLLUP 与 NULL 值&#xff08;四&#xff09;多列复杂分组…...

kipotix4靶机实战

信息收集 1.判断靶机ip 原理&#xff1a;开靶机之前nmap扫一次网段&#xff0c;再开靶机之后扫一次&#xff0c;查看多出来的ip就是靶机ip ip192.168.98.1742.判断端口服务&#xff0c;系统版本 a.确定端口 b.-p指定端口进一步收集 c.信息筛选 1.端口&#xff1a;22,80,139,…...

Java中处理if-else的几种高级方法

前言 在我看来多写几个if-else没啥大不了的&#xff0c;但是就是看起来没啥逼格&#xff0c;领导嫌弃。我根据开发的经历写几个不同的替代方法 一、枚举法替代 我先前写了一篇文章&#xff0c;可以去看看。 通过枚举替换if-else语句的解决方案_枚举代替if else c语言-CSDN博…...

LaTeX 是一种基于标记的排版系统,广泛用于创建高质量的文档,特别是在需要复杂数学公式、表格、文献引用等的场景中

LaTeX 是一种基于标记的排版系统&#xff0c;广泛用于创建高质量的文档&#xff0c;特别是在需要复杂数学公式、表格、文献引用等的场景中。以下是关于 LaTeX 的详细解释&#xff1a; 1. LaTeX 的基本概念 本质&#xff1a;LaTeX 是基于 TeX 的排版系统&#xff0c;提供了更高…...

Go入门篇:(一)golang的安装和编辑工具安装

一、前言 最近我有幸接触到Go语言,深入了解后,发现go语言确实有很多让人惊叹的地方。作为一个有着多年Java编程经验的程序员,我深深地被它所吸引,并且决定记录下我的学习之路,以便与大家分享我的经验和感悟。 与Java不同,Go语言的语法和运行效率都非常高,特别是对于并…...

【10】Selenium+Python UI自动化测试 邮件发送测试报告(某积载系统实例-04)

测试报告需要发送给相关人员&#xff0c;但每次都要在report目录下去复制太麻烦&#xff0c;可以使用邮件模块自动将生成的报告发送给相关人员 1、 新增utils文件夹&#xff0c;用于存放工具文件 在utils下新增sendmail.py文件 代码 sendmail.py import smtplib from email.…...

Playwright爬虫xpath获取技巧

示例一 <button class"MuiButtonBase-root MuiButton-root MuiLoadingButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeLarge MuiButton-containedSizeLarge MuiButton-colorPrimary MuiButton-fullWidth MuiButton-root MuiLoadingButton…...

运算符 - 算术、关系、逻辑运算符

引言 在编程中&#xff0c;运算符是用于执行特定操作的符号。C 提供了多种类型的运算符&#xff0c;包括算术运算符、关系运算符和逻辑运算符等。理解这些运算符及其用法对于编写高效且无误的代码至关重要。本文将详细介绍 C 中的这三种基本运算符&#xff0c;并通过实例帮助读…...

中关村科金外呼机器人智能沟通破解营销难题

当今&#xff0c;传统的营销方式在效率、成本控制、客户管理等方面逐渐显现出局限性&#xff0c;难以满足现代企业的需求。如何提升营销效率、降低运营成本、有效管理客户会员&#xff0c;成为企业的难题。中关村科金外呼机器人通过智能化沟通技术&#xff0c;为企业提供了一站…...

css绘制圆并绘制圆的半径

<div class"item1"></div>.item1 {position: relative;width: 420px;height: 420px;border-radius: 50%; /* 圆形 */color: white; /* 文本颜色 */background-color: rgba(154, 227, 36, 0.4); } .item1::before {content: "";position: absol…...

实现类似gpt 打字效果

1. css的动画&#xff08;animation) css中实现动画有两种方式&#xff1a;transition过渡动画、 animation自定义动画。 具体的可以看MDN链接&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation 使用keyframes自定义关键帧动画并未其命名使用自定义动…...

【乐企文件生成工程】根据特定要素动态选择需要生成的发票板式文件实现

乐企版式文件生成工程,涉及到多个票种,不乏特殊票种的生成,如果每个特殊票种都单独写逻辑,那整个代码写起来体量就不得了,如何实现代码逻辑的同时也更优雅的实现代码扩展性呢,您接着往下看。 使用设计模式 工厂模式 1、定义接口InvoiceFileService public interface Inv…...

near-synonym反义词生成(2):Prompt +Bert-MLM(FT)

near-synonym之反义词生成方法二 near-synonym, 中文反义词/近义词/同义词(antonym/synonym)工具包. 方法一为(neg_antonym): Word2vec -> ANN -> NLI -> Length 方法二为(mlm_antonym): Prompt Bert-MLM(FT) Beam-Search 项目地址 github: https://github.com/yon…...

dockfile 配置 /etc/apt/source.list.d/debian.list 清华镜像

docker:3.12.7 镜像使用的是 debian 系统&#xff0c;比 ubuntu 更轻量。debian 系统内&#xff0c;apt 镜像源列表位于 /etc/apt/source.list.d/debian.list&#xff08;作为对比&#xff0c;ubuntu 的镜像列表位于 /etc/apt/source.list&#xff0c;二者语法相同&#xff09;…...

DAY38|动态规划Part06|LeetCode:322. 零钱兑换、279.完全平方数、139.单词拆分

目录 LeetCode:322. 零钱兑换 基本思路 C代码 LeetCode:279.完全平方数 C代码 LeetCode:139.单词拆分 基本思路 C代码 LeetCode:322. 零钱兑换 力扣题目链接 文字讲解&#xff1a;LeetCode:322. 零钱兑换 视频讲解&#xff1a;动态规划之完全背包&#xff0c;装满背包最…...

Spring事务回滚

Transactional注解 Transactional作用&#xff1a;就是在当前这个方法执行开始之前来开启事务&#xff0c;方法执行完毕之后提交事务。如果在这个方法执行的过程当中出现了异常&#xff0c;就会进行事务的回滚操作。 Transactional注解&#xff1a;我们一般会在业务层当中来控制…...

【目标跟踪】checkpoint文件到底是什么?

说实话&#xff0c;我一直决定计算机视觉是个很玄的东西&#xff0c;里面的很多东西都是看了概念之后云里雾里&#xff0c;今天就把我复现代码时遇到的不懂得讲一讲——checkpoint文件是个啥&#xff1f; checkpoint文件顾名思义就是一个模型检查点文件&#xff0c;用于保存训练…...

hiprint结合vue2项目实现静默打印详细使用步骤

代码地址是&#xff1a;vue-plugin-hiprint: hiprint for Vue2/Vue3 ⚡打印、打印设计、可视化设计器、报表设计、元素编辑、可视化打印编辑 本地安装包地址&#xff1a;electron-hiprint 发行版 - Gitee.com 1、先安装hipint安装包在本地 2、项目运行npm&#xff08;socket.…...

apt和apt-get软件包管理工具-debian

apt 和 apt-get 是在基于Debian的Linux发行版&#xff08;如Ubuntu&#xff09;中使用的两个软件包管理工具&#xff0c;它们都属于APT&#xff08;Advanced Package Tool&#xff09;的前端工具&#xff0c;用于管理软件包的安装、更新、升级和删除。以下是它们的特性和一些比…...

小程序租赁系统开发的优势与实践探索

内容概要 小程序租赁系统开发正在引起广泛关注&#xff0c;特别是在数字化快速发展的今天。很多企业开始意识到&#xff0c;小程序不仅能为他们带来更多的客户&#xff0c;还能极大地提高管理效率。借助小程序&#xff0c;用户在租赁时可以更加方便地浏览和选择产品&#xff0…...

sheng的学习笔记-AI-模型评估-留出法、交叉验证法、自助法

Ai目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 评估方法&#xff1a; 数据集可以分为 训练集&#xff0c;交叉验证集&#xff0c;测试集。 训练集相当于自己做作业&#xff0c;验证集相当于考试测试一下自己的实力&#xff0c;测试集就是真刀真枪的干&#xff08;当你…...

【Unity3D】ECS入门学习(六)状态组件 ISystemStateComponentData

当需要获知组件是否被销毁时&#xff0c;ECS是没有回调告知的&#xff0c;因此可以将组件继承于ISystemStateComponentData接口&#xff0c;这样即使组件的实体被销毁了&#xff0c;该组件本身是不会消失的&#xff0c;所以可以通过在组件实体销毁后&#xff0c;去设置状态组件…...

DVWA靶场第三关 CSRF

CSRF的中文叫&#xff1a;”跨站请求攻击“&#xff0c;它是通过仿照某一个特殊的网页&#xff08;重置密码&#xff09;来进行诱惑性攻击。 难度&#xff08;low级&#xff09; 审计代码&#xff1a; <?phpif( isset( $_GET[ Change ] ) ) {// Get input$pass_new $_GE…...

工作流审批功能的一些概念

1. 引言 在当今数字化时代&#xff0c;企业与组织的运营效率在很大程度上依赖于高效、精准的工作流审批系统。随着业务日益复杂且多样化&#xff0c;审批流程变得愈加细致和灵活。一个完善的工作流审批系统不仅能确保任务在组织内部有序流转、协调各方资源&#xff0c;还能实现…...

深度学习与图像处理(国产深度学习框架——飞桨官方指定教材)

计算机视觉从小白到大师之路 《深度学习与图像处理&#xff08;PaddlePaddle版&#xff09;》这一本就够了 1.引言 随着人工智能技术的飞速发展&#xff0c;各行各业对深度学习、图像处理相关领域的人才需求日益迫切。本书旨在通过系统的理论讲解与丰富的实战案例&#xff0…...

音视频入门知识(二)、图像篇

⭐二、图像篇 视频基本要素&#xff1a;宽、高、帧率、编码方式、码率、分辨率 ​ 其中码率的计算&#xff1a;码率(kbps)&#xff1d;文件大小(KB)&#xff0a;8&#xff0f;时间(秒)&#xff0c;即码率和视频文件大小成正比 YUV和RGB可相互转换 ★YUV&#xff08;原始数据&am…...

计算机网络——期末复习(3)4-6章考试重点

第四章 根据IPv4第1个十进制数值判断&#xff0c;127以下为A类&#xff0c;128~191为B类&#xff0c;192~223为C类不能分配给主机或路由器接口的&#xff1a;A类网络号0和127&#xff0c;主机号全为0或全为1私有地址&#xff08;Private IP Address&#xff09;是指一类专门保…...

openfeign自动将Boolean默认为false

最近发现项目服务间&#xff0c;通过openfeign调用API时&#xff0c;为null的Boolean类型&#xff0c;接收端反系列化后变为false了&#xff0c;经查发现是通用组件中做了处理&#xff0c;特记录下。 主要是设置了这个 SerializerFeature.WriteNullBooleanAsFalse Bean Cond…...

如何实现底部导航栏

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了TextField Widget,本章回中将介绍BottomNavigationBar Widget。闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中将介绍一个新的Widget:BottomNavigationBar,它就是我们经常在App中看到了底部…...

【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案,附案例。

【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案&#xff0c;附案例。 【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案&#xff0c;附案例。 文章目录 【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案&#xff0c;附案例。1. 错…...