生成式专题的第一节课---GAN图像生成

news2024/11/25 14:39:20

一、GAN的起源与发展

1.GAN的起源

GAN (生成式对抗网络)诞生于 2014 年,由 Ian Goodfellow 提出,是用于生成数据的深度学习模型,创新点是对抗性训练,即生成器与判别器的竞争关系,为图像生成、风格迁移等领域带来革命性影响。

2.GAN的发展

GAN 发展迅速,从 最初的DCGAN(深度卷积生成对抗网络) 到 WGAN( Wasserstein 生成对抗网络)再到 StyleGAN ,各里程碑式模型都在不断解决GAN训练过程中的稳定性和生成质量的问题。

例如,DCGAN 通过对卷积神经网络的改进,提高了生成图像的质量和稳定性;WGAN 则引入了 Wasserstein 距离,有效地解决了训练不稳定和模式崩溃的问题;StyleGAN 在生成图像的质量和多样性方面取得了重大突破,尤其是 StyleGAN2 能够生成极其逼真的人脸图像,极大地推动了计算机视觉和图形学的发展。

3.GAN的应用领域

随着技术不断发展,GAN 在艺术创作、数据增强等多个领域得到了广泛的应用。

GAN 在图像合成、数据增强、虚拟现实等领域应用广泛。

在图像合成方面,GAN 可以生成高质量的图像,包括自然图像、艺术作品等。例如,通过风格迁移技术,可以将一幅图像的风格应用到另一幅图像上,创造出独特的艺术效果。

在数据增强方面,GAN 可以生成大量的新数据,用于扩充训练数据集,提高模型的泛化能力。特别是在一些数据稀缺的领域,如医学图像、卫星图像等,GAN 的数据增强作用尤为重要。

在虚拟现实领域,GAN 可以生成逼真的虚拟场景和物体,为用户提供更加沉浸式的体验。

此外,GAN 还被广泛应用于艺术创作、影视制作、游戏开发等领域。在艺术创作中,艺术家可以利用 GAN 生成的图像作为灵感来源,创造出更加独特的作品。在影视制作中,GAN 可以用于生成特效场景和角色,降低制作成本。在游戏开发中,GAN 可以生成游戏中的场景和角色,提高游戏的画面质量和可玩性。

二、GAN的基本原理

1.组成部分

 GAN 主要由两个部分组成,即生成器(Generator)和判别器(Discriminator)。

生成器负责生成数据,接收随机噪声或特定的输入,并尝试生成逼真的数据,例如图像、文本等。生成器的目标是生成尽可能接近真实数据分布的样本,以骗过判别器。

判别器则负责区分真实数据和生成数据,区分输入的数据是来自真实数据还是由生成器生成的数据。判别器的目标是准确地判断数据的真实性,从而为生成器提供反馈。 

两者在训练过程中相互竞争,生成器努力生成越来越逼真的数据,而判别器则不断提高其辨别努力。

2.对抗过程 

1. 训练开始时,生成器生成的样本通常质量较低,很容易被判别器识别为假数据。判别器能够较为准确地判断出真实数据和生成器生成的虚假数据。判别器的损失函数通常是一个二分类交叉熵损失,对于真实数据,标签为 1,对于生成数据,标签为 0。判别器对于真实数据的预测概率为 D (x),对于生成数据的预测概率为 D (G (z)),其中 x 表示真实数据,G (z) 表示生成器生成的数据,z 是随机噪声。

判别器的损失函数可以表示为:

这里,表示期望,是真实数据的分布,是随机噪声的分布。第一项是真实数据被正确判断为真的期望损失,第二项是生成数据被正确判断为假的期望损失。判别器的损失是正确分类真实和生成数据的概率。

2. 随着训练的进行,生成器不断调整自身的参数,试图生成更加逼真的样本,以提高骗过判别器的概率。同时,判别器也在不断优化自身的参数,以更好地分辨真实数据和生成器生成的数据。

生成器的损失函数可以表示为:

生成器通过最小化这个损失函数来优化自身参数,使得生成的数据能够让判别器认为是真实数据。同时,判别器也在不断优化自身的参数,以更好地分辨真实数据和生成器生成的数据。生成器的损失是其生成数据被判别器错误分类的概率。

3. 这个对抗过程持续进行,通过交替优化生成器和判别器的损失函数,生成器和判别器相互竞争、共同进步。最终,当达到一种平衡状态时,生成器生成的样本非常接近真实数据的分布,使得判别器难以区分真假数据。

3.数学表达

从数学角度来看,GAN 的目标是最小化生成器和判别器之间的价值函数。价值函数与损失函数密切相关。而价值函数通常由两部分组成:

1. 对于判别器,价值函数要使其能够正确区分真实数据和生成数据,即最大化正确分类的概率。

2. 对于生成器,价值函数要使其生成的数据能够骗过判别器,即最小化判别器将生成数据判断为假的概率。

通过不断优化这个价值函数,GAN 实现了生成器和判别器的共同进化,从而达到生成高质量数据的目的。

在生成式对抗网络(GAN)中,价值函数和损失函数既有联系又有区别。

 

一、联系

 
  1. 目的一致性:价值函数和损失函数在 GAN 中都是为了衡量生成器和判别器的性能,并指导它们的优化过程。它们共同的目标是使生成器生成的样本尽可能接近真实数据分布,同时使判别器能够准确地区分真实数据和生成数据。
  2. 相互影响:价值函数通常由生成器和判别器的损失函数组成。生成器和判别器在训练过程中通过优化各自的损失函数来影响价值函数的值。例如,当生成器的损失函数减小,意味着生成的数据更接近真实数据,这会影响判别器的损失函数,进而影响价值函数。
 

二、区别

 
  1. 定义范围:
    • 损失函数通常是针对单个模型(生成器或判别器)定义的,用于衡量该模型在特定任务上的性能。例如,生成器的损失函数衡量生成器生成的数据与真实数据的相似程度;判别器的损失函数衡量判别器区分真实数据和生成数据的准确性。
    • 价值函数是针对整个 GAN 系统定义的,它综合考虑了生成器和判别器的性能。价值函数通常是生成器和判别器损失函数的组合,反映了 GAN 系统在生成数据和区分数据方面的整体性能。
  2. 优化目标:
    • 生成器的损失函数的优化目标是使生成的数据能够骗过判别器,即最小化判别器将生成数据判断为假的概率。
    • 判别器的损失函数的优化目标是准确地区分真实数据和生成数据,即最大化正确分类的概率。
    • 价值函数的优化目标是在生成器和判别器之间找到一个平衡,使得生成器生成的样本足够逼真,同时判别器能够有效地区分真实数据和生成数据。

4.网络架构与优化

一、GAN 的网络架构

GAN 的网络架构确实具有很大的灵活性和多样性,可以结合不同类型的神经网络来实现特定的生成任务。不同类型的神经网络有不同的效果。

  1. 卷积神经网络(CNN)

    • 在图像生成等领域,卷积神经网络常被用作 GAN 的生成器和判别器。CNN 能够有效地提取图像的特征,对于处理具有空间结构的数据具有优势。
    • 例如,在深度卷积生成对抗网络(DCGAN)中,生成器采用反卷积层逐步将低维的随机噪声映射为高维的图像数据,而判别器则使用卷积层对输入图像进行特征提取和分类。
    • CNN 的层级结构可以使 GAN 学习到不同层次的图像特征,从而生成更加逼真的图像。
  2. 循环神经网络(RNN)

    • 对于序列数据的生成任务,如文本生成、音乐生成等,循环神经网络是一个合适的选择。RNN 能够处理序列数据中的时间依赖关系,记住过去的信息并影响当前的输出。
    • 在基于 GAN 的文本生成中,生成器可以是一个基于 RNN 的语言模型,接收随机噪声或特定的初始输入,并逐步生成文本序列。判别器则负责判断生成的文本是否真实。
    • RNN 的变体,如长短期记忆网络(LSTM)和门控循环单元(GRU),可以更好地处理长期依赖关系,提高生成质量。
  3. 其他网络架构

    • 除了 CNN 和 RNN,还有许多其他类型的神经网络可以用于 GAN 的网络架构。例如,自编码器(Autoencoder)可以作为生成器的一部分,先对数据进行压缩编码,然后再解码生成新的数据。
    • 生成对抗网络还可以与其他深度学习技术结合,如变分自编码器(VAE)、注意力机制等,以进一步提高生成性能。

二、网络优化

训练 GAN 是一个具有挑战性的任务,需要仔细选择优化方法和学习率,以避免出现模式崩溃等问题。

  1. 优化方法

    • 常见的优化方法包括随机梯度下降(SGD)及其变体,如 Momentum SGD、Adagrad、Adadelta、RMSprop 和 Adam 等。不同的优化方法在收敛速度、稳定性和对超参数的敏感性等方面有所不同。
    • 在选择优化方法时,需要考虑 GAN 的特点和训练数据的性质。例如,Adam 优化器通常在训练初期收敛速度较快,但在后期可能会出现震荡。而一些传统的 SGD 变体可能需要更多的调参工作,但在某些情况下可以获得更稳定的训练效果。
    • 此外,一些专门为 GAN 设计的优化方法也被提出,如 WGAN(Wasserstein GAN)中的 Earth-Mover 距离优化和 Improved WGAN 中的梯度惩罚等。这些方法旨在提高 GAN 的训练稳定性和生成样本的质量。
  2. 学习率

    • 学习率是优化过程中的一个重要超参数,它决定了每次参数更新的步长。选择合适的学习率对于 GAN 的训练至关重要。
    • 学习率过大可能导致训练不稳定,甚至使模型无法收敛;学习率过小则会使训练过程缓慢,需要更多的训练时间。
    • 通常,可以采用动态调整学习率的策略,如学习率衰减。在训练初期使用较大的学习率以快速接近最优解,然后逐渐减小学习率以进行更精细的调整。
    • 还可以使用自适应学习率方法,如 Adagrad、Adadelta、RMSprop 和 Adam 等优化器自带的自适应学习率机制,根据参数的梯度历史自动调整学习率。
  3. 避免模式崩溃

    • 模式崩溃是 GAN 训练中常见的问题之一,表现为生成器只生成少数几种模式的样本,而无法覆盖真实数据的多样性。
    • 为了避免模式崩溃,可以采用以下方法:
      • 增加生成器和判别器的容量:使用更复杂的网络架构或增加网络的层数和参数数量,使模型能够学习到更丰富的特征和模式。
      • 引入多样性正则化:例如在生成器的损失函数中加入多样性惩罚项,鼓励生成不同的样本。
      • 采用多个生成器和判别器:通过多个模型的竞争和合作,增加生成样本的多样性。
      • 数据增强:对训练数据进行随机变换,如旋转、翻转、裁剪等,增加数据的多样性,从而减少模式崩溃的可能性。

GAN 的网络架构和优化是一个复杂的问题,需要根据具体的应用场景和任务进行选择和调整。通过合理地设计网络架构、选择优化方法和调整超参数,可以提高 GAN 的训练稳定性和生成样本的质量。

三、GAN的高级概念

一、条件生成对抗网络(cGAN)

条件生成对抗网络在传统 GAN 的基础上引入条件变量,使得生成的数据具有特定的属性,可以生成特定风格的图像或者具有特定特征的人脸,极大地增强了生成过程的可控性。

  1. 工作原理

    • 生成器接收随机噪声和条件变量作为输入,根据条件变量的指导生成特定的样本。例如,在图像生成任务中,如果条件变量是类别标签,生成器将生成属于特定类别的图像。
    • 判别器则同时接收真实样本或生成样本以及条件变量,判断样本是否真实且符合给定条件。
  2. 应用场景

    • 图像合成:可以根据特定的主题、风格或对象类别生成图像。比如生成特定风格的艺术画作、特定品牌汽车的图像等。
    • 文本到图像生成:将文本描述作为条件变量,生成与文本描述相符的图像。这在创意设计、广告制作等领域有很大的应用潜力。
    • 数据增强:在某些数据稀缺的情况下,可以利用 cGAN 根据已有数据的特征和条件变量生成新的样本,用于扩充数据集。

二、循环一致性生成对抗网络(CycleGAN)

CycleGAN 用于实现无监督的图像到图像转换,能够在没有成对训练数据的情况下,实现不同域之间的图像转换。

  1. 工作原理

    • CycleGAN 由两个生成器和两个判别器组成。一个生成器用于将源域的图像转换到目标域,另一个生成器则负责将目标域的图像转换回源域。
    • 判别器分别对源域和目标域的真实图像与生成器生成的图像进行判别。同时,为了保证转换的一致性,引入了循环一致性损失,通过循环一致性损失函数来保证生成的图像在不同域之间的转换具有一致性,保持转换过程中的原始结构信息。
    • 例如,将马的图像转换为斑马的图像,生成器 G 将马的图像转换为看似斑马的图像,生成器 F 再将这个看似斑马的图像转换回类似马的图像。通过循环一致性损失,确保转换前后的图像尽可能相似。
  2. 优势

    • 无监督学习:不需要成对的源域和目标域图像进行训练,只需要两个不同域的图像集合即可,大大降低了数据收集的难度。
    • 灵活性高:可以应用于各种不同类型的图像转换任务,具有很强的通用性。
    • 生成效果好:能够生成高质量的转换图像,在视觉上具有较高的逼真度。

三、基于信息最大化生成对抗网的可解释表征学习(InfoGAN)

InfoGAN,它是对生成性对抗网络(GAN)的一个信息论扩展,因此,它是对原有模型的改进。InfoGAN能够以完全无监督的方式学习分离的表示。InfoGAN 旨在学习可解释的、有意义的潜在表示。

  1. 核心思想

    • 将输入的随机噪声分为两部分,一部分是不可解释的随机噪声,另一部分是可解释的潜在编码。通过优化网络,使得可解释的潜在编码能够控制生成样本的特定属性。
    • 例如,在图像生成中,潜在编码可以控制生成图像的颜色、形状等属性。
  2. 优势

    • 提供了对生成过程的更深入理解:通过可解释的潜在编码,用户可以了解不同属性是如何影响生成结果的。
    • 增强了生成的可控性:可以通过调整潜在编码来精确地控制生成样本的特定属性,而不仅仅是依赖于外部的条件变量。

四、渐进式生成对抗网络(Progressive GAN)

Progressive GAN 采用逐步增加生成器和判别器的分辨率的方法来提高生成质量。

  1. 训练过程

    • 从低分辨率开始训练,随着训练的进行,逐渐增加生成器和判别器的层数和分辨率,使得网络能够逐步学习到更精细的细节。
    • 这种渐进式的训练方法可以避免在高分辨率下训练的困难,同时提高了训练的稳定性和效率。
  2. 应用优势

    • 能够生成非常高分辨率的逼真图像:由于逐步增加分辨率,Progressive GAN 可以生成具有极高细节和真实感的图像。
    • 加速训练过程:通过从低分辨率开始训练,减少了计算资源的需求,加快了训练速度。

五、BigGAN

BigGAN 以其大规模的网络结构和强大的生成能力而闻名。

  1. 特点

    • 具有非常深的网络结构和大量的参数,能够学习到复杂的数据分布。
    • 采用了高效的训练方法和正则化技术,以提高训练的稳定性和生成样本的质量。
  2. 应用表现

    • 能够生成极其逼真的高分辨率图像,在图像生成领域取得了令人瞩目的成果。
    • 对于大规模数据集的处理能力强,可以应用于大规模的图像生成任务。

六、变分自编码器(VAE)与GAN

  1. VAE的工作原理

    • VAE是一种生成模型, 通过编码器和解码器生成数据。编码器将输入数据映射到一个潜在空间,这个潜在空间通常是一个低维的连续空间。编码器输出的是潜在变量的均值和方差,通过重参数化技巧从这个分布中采样得到一个潜在变量向量。
    • 解码器则接收这个潜在变量向量,将其映射回原始数据空间,生成与输入数据相似的输出。
    • VAE 的目标是最大化输入数据的对数似然,同时使潜在空间的分布尽可能接近标准正态分布。
  2. VAE的应用场景

    • 图像生成:可以生成新的图像,通过在潜在空间中进行采样并解码得到新的图像样本。
    • 数据压缩:将高维的数据压缩到低维的潜在空间中,实现数据的高效存储和传输。
    • 异常检测:通过比较输入数据在潜在空间中的重构误差,可以检测出异常数据点。
  3. GAN 与 VAE 的比较
    • 生成原理

      • GAN 通过生成器和判别器的对抗训练来生成数据。生成器试图生成逼真的数据来骗过判别器,判别器则努力区分真实数据和生成数据。
      • VAE 则是通过最大化输入数据的对数似然和约束潜在空间的分布来生成数据。生成过程更加确定性,通过从已知的潜在空间分布中采样并解码得到生成数据。
    • 生成质量

      • GAN 通常能够生成非常逼真的样本,尤其是在图像生成等领域表现出色。但 GAN 的训练过程不稳定,容易出现模式崩溃等问题。
      • VAE 生成的样本相对较为平滑和连续,但可能在细节和逼真度上稍逊于 GAN。VAE 的训练过程相对稳定,不容易出现严重的训练问题。
    • 潜在空间性质

      • GAN 的潜在空间通常没有明确的语义含义,难以直接在潜在空间中进行有意义的操作。
      • VAE 的潜在空间具有一定的语义连续性,通过在潜在空间中进行插值等操作,可以得到平滑的过渡效果,具有更好的可解释性。
    • 应用场景侧重

      • GAN 更适合需要生成高度逼真样本的任务,如艺术创作、图像合成等。
      • VAE 更适合需要对数据进行压缩、编码和解码的任务,以及对潜在空间进行有意义操作的任务,如数据生成、异常检测等。

 GAN与VAE在生成质量和多样性上有所不同,两者可以相互补充。

四、GAN的挑战与解决方案

1.GAN 的挑战

  1. 训练不稳定

    • GAN 的训练过程涉及生成器和判别器的对抗博弈,这种对抗性使得训练过程容易不稳定,导致生成器和判别器之间的不平衡。例如,生成器可能会在某些情况下过度拟合判别器,导致生成的样本质量下降。
    • 训练不稳定还可能表现为模式崩溃,即生成器只生成少数几种模式的样本,无法覆盖真实数据的多样性。
  2. 难以评估生成质量

    • 评估 GAN 生成的样本质量是一个具有挑战性的问题。传统的评估指标如峰值信噪比(PSNR)和结构相似性指数(SSIM)等可能无法准确反映生成样本的真实质量。
    • 此外,由于 GAN 生成的样本是随机的,很难确定一个固定的评估标准来衡量其质量。
  3. 计算资源需求大

    • GAN 的训练通常需要大量的计算资源,特别是在处理高分辨率图像或大规模数据集时。这限制了 GAN 在一些资源有限的环境中的应用。
  4. 缺乏可解释性

    • GAN 的生成过程通常是黑盒的,难以理解生成器和判别器是如何学习数据分布并生成样本的。这使得 GAN 在一些需要可解释性的应用场景中受到限制。
  5. 模式崩溃

    • 由于生成器和判别器的不平衡、或者真实数据的分布关于复杂、或者训练算法的问题,导致GAN模式崩溃,模式崩溃是指生成器开始生成非常相似或重复的样本,无法覆盖真实数据的多样性。

2.解决方案

  1. 改进训练算法

    • 研究人员提出了许多改进的训练算法来提高 GAN 的稳定性。例如,Wasserstein GAN(WGAN)使用 Wasserstein 距离作为损失函数,有效地缓解了训练不稳定和模式崩溃的问题。
    • 还有一些方法通过调整生成器和判别器的更新频率、使用不同的优化算法等方式来提高训练的稳定性。
  2. 开发新的评估指标

    • 为了更好地评估 GAN 生成的样本质量,研究人员开发了一些新的评估指标。例如,Inception Score 和 Frechet Inception Distance 等指标通过计算生成样本的多样性和真实性来评估生成质量。
    • 此外,一些基于人类主观评价的评估方法也被提出,以更准确地反映生成样本的质量。
  3. 优化模型架构和计算效率

    • 优化 GAN 的模型架构可以减少计算资源的需求。例如,使用轻量级的神经网络结构、采用模型压缩技术等可以降低模型的计算复杂度。
    • 同时,研究人员也在探索更高效的计算方法,如分布式训练、硬件加速等,以提高 GAN 的训练效率。
  4. 提高可解释性

    • 为了提高 GAN 的可解释性,研究人员尝试从不同角度理解 GAN 的生成过程。例如,通过可视化生成器和判别器的中间层特征、分析生成样本的统计特性等方式来揭示 GAN 的工作原理。
    • 一些研究还尝试将可解释性引入 GAN 的设计中,例如使用可解释的生成器结构或添加可解释的正则化项。
  5. 数据增强和正则化
    •  为了提高 GAN 在数据增强和正则化方面的效果,研究人员尝试从不同角度进行改进。例如,通过采用不同的随机变换方式,如旋转、翻转、缩放等,以更有效地增加数据的多样性,让生成器能够接触到更多不同的模式。同时,分析不同随机变换对生成样本的影响,以确定最佳的数据增强策略。
    • 一些研究还尝试将新的正则化方法引入 GAN 的设计中,例如使用基于信息论的正则化项,或者结合自监督学习的正则化策略,以更好地防止生成器过拟合,提高生成样本的多样性。

GAN 虽然在生成数据方面具有强大的能力,但也面临着一些挑战。通过不断改进训练算法、开发新的评估指标、优化模型架构、提高可解释性和数据增强和正则化等方法,研究人员正在努力克服这些挑战,推动 GAN 的发展和应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2208709.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多态常见面试问题

1、什么是多态? 多态(Polymorphism)是面向对象编程中的一个重要概念,它允许同一个接口表现出不同的行为。在C中,多态性主要通过虚函数来实现,分为编译时多态(静态多态)和运行时多态…

DDoS攻击快速增长,如何在抗ddos防护中获得主动?

当下DDoS攻击规模不断突破上限。前段时间,中国首款3A《黑神话:悟空》也在一夜之内遭受到28万次攻击DDoS攻击,严重影响到全球玩家的游戏体验。Gcore发布的数据也显示了 DDoS攻击令人担忧的趋势,尤其是峰值攻击已增加到了令人震惊的…

腾讯IM SDK:TUIKit发送多张图片

一、问题描述 在使用腾讯IM DEMO&#xff08;https://github.com/TencentCloud/chat-uikit-vue.git&#xff09;时发现其只支持发送一张图片&#xff1a; 二、解决方案 // src\TUIKit\components\TUIChat\message-input-toolbar\image-upload\index.vue<inputref"inp…

【GaussDB】产品简介

产品定位 GaussDB 200是一款具备分析及混合负载能力的分布式数据库&#xff0c;支持x86和Kunpeng硬件架构&#xff0c;支持行存储与列存储&#xff0c;提供PB(Petabyte)级数据分析能力、多模分析能力和实时处理能力&#xff0c;用于数据仓库、数据集市、实时分析、实时决策和混…

transformers和bert实现微博情感分类模型提升

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色…

关于Linux下C++程序内存dump的分析和工具

前言 程序崩溃令人很崩溃&#xff0c;特别是让人找不到原因的崩溃&#xff0c;但是合适的工具可以帮助人很快的定位到问题&#xff0c;在AI基础能力ASR服务开发时&#xff0c;找到了一种比较实用和简单的内存崩溃的dump分析工具breakpad&#xff0c; 可以帮助在Linux下C开发程…

Skyeye 云智能制造 v3.14.8 发布,ERP 商城 + AI

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

(JAVA)2-3树思想与红黑树的实现与基本原理

1. 平衡树 ​ 学习过二叉查找树&#xff0c;发现它的查询效率比单纯的链表和数组的查询效率要高很多。 ​ 大部分情况下确实是这样的&#xff0c;但不幸的是&#xff0c;在最坏情况下&#xff0c;二叉查找树的性能还是很糟糕。 ​ 例如我们一次往二叉树中插入9,8,7,6,5,4,3,…

【LeetCode】动态规划—714. 买卖股票的最佳时机含手续费(附完整Python/C++代码)

动态规划—714. 买卖股票的最佳时机含手续费 题目描述前言基本思路1. 问题定义2. 理解问题和递推关系状态定义&#xff1a;状态转移公式&#xff1a;初始条件&#xff1a; 3. 解决方法动态规划方法伪代码&#xff1a; 4. 进一步优化5. 小总结 Python代码Python代码解释总结&…

出海电商新怎样用海外云手机引流?

随着互联网行业的迅猛发展&#xff0c;出海电商、海外社交媒体营销以及游戏产业等领域对技术工具的需求不断增加。在这种趋势下&#xff0c;海外云手机作为一种新型解决方案&#xff0c;正在受到广泛关注。 特别是在出海电商中&#xff0c;平台如亚马逊、速卖通、eBay等通过结合…

Mysql(八) --- 视图

文章目录 前言1.什么是视图&#xff1f;2.创建视图3. 使用视图4. 修改数据4.1.注意事项 5. 删除视图6.视图的优点 前言 前面我们学习了索引&#xff0c;这次我们来学习视图 1.什么是视图&#xff1f; 视图是一个虚拟的表&#xff0c;它是基于一个或多个基本表或其他视图的查询…

8款宝藏手机app,适配安卓和苹果手机

好用的手机APP太多&#xff0c;差点挑花了眼&#xff01;今天来分享4款苹果手机和4款安卓手机上的宝藏软件&#xff0c;看看你喜欢哪一款~ IOS系统APP 1.搜图神器 一款拥有海量图片资源的图片搜索神器&#xff0c;它聚合海内外知名搜索引擎&#xff0c;想要图片直接搜索就行…

用java来编写web界面

一、ssm框架整体目录架构 二、编写后端代码 1、编写实体层代码 实体层代码就是你的对象 entity package com.cv.entity;public class Apple {private Integer id;private String name;private Integer quantity;private Integer price;private Integer categoryId;public…

【JavaScript】LeetCode:61-65

文章目录 61 课程表62 实现Trie&#xff08;前缀树&#xff09;63 全排列64 子集65 电话号码的字母组合 61 课程表 Map BFS拓扑排序&#xff1a;将有向无环图转为线性顺序。遍历prerequisites&#xff1a;1. 数组记录每个节点的入度&#xff0c;2. 哈希表记录依赖关系。n 6&a…

Vulnhub靶场案例渗透[7]- DC7

文章目录 1. 靶场搭建2. 信息收集2.1 确定靶机ip2.2 服务信息收集2.3 社工信息收集 3. 提权 1. 靶场搭建 靶场源地址 检验下载文件的检验码&#xff0c;对比没问题使用vmware打开 # windwos 命令 Get-FileHash <filePath> -Algorithm MD5 # linux md5sum filepath2. 信…

视频汇聚平台EasyCVR支持云端录像丨监控存储丨录像回看丨录像计划丨录像配置

EasyCVR视频汇聚融合平台&#xff0c;是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。平台以其强大的视频处理、汇聚与融合能力&#xff0c;在构建视频监控系统中展现出了独特的优势。 EasyCVR视频汇聚平台可接入传统监控行业中高清网络摄像机的RTSP…

提升实验室效率的秘籍

有组织、高效的实验室而言&#xff0c;业务“人、机、料、法、环、测”的多维度发展至关重要&#xff0c;为了提高实验室管理效率和质量&#xff0c;许多实验室开始采用LIMS&#xff08;实验室信息管理系统&#xff09;软件来辅助管理。LIMS软件能够帮助实验室实现信息化、自动…

leetcode 3217 从链表中移除在数组中的结点

1.题目要求: 给你一个整数数组 nums 和一个链表的头节点 head。从链表中移除所有存在于 nums 中的节点后&#xff0c;返回修改后的链表的头节点。 示例 1&#xff1a; 输入&#xff1a; nums [1,2,3], head [1,2,3,4,5] 输出&#xff1a; [4,5] 解释&#xff1a; 移除数值…

Java中的枚举

1.1 认识枚举 枚举是一种特殊的类&#xff0c;它的格式是&#xff1a; public enum 枚举类名{枚举项1,枚举项2,枚举项3; } 其实枚举项就表示枚举类的对象&#xff0c;只是这些对象在定义枚举类时就预先写好了&#xff0c;以后就只能用这几个固定的对象。 定义一个枚举类&am…

使用VS2015编写C语言程序

前面我们给出了一段完整的C语言代码&#xff0c;就是在显示器上输出“C语言中文网”&#xff0c;如下所示&#xff1a; #include <stdio.h>int main(){puts("C语言中文网");return 0;}本节我们就来看看如何通过 VS2015 来运行这段代码。 1) 创建项目&#xf…