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

深度学习笔记——生成对抗网络GAN

本文详细介绍早期生成式AI的代表性模型:生成对抗网络GAN。

在这里插入图片描述

文章目录

    • 一、基本结构
      • 生成器
      • 判别器
    • 二、损失函数
      • 判别器
      • 生成器
      • 交替优化
      • 目标函数
    • 三、GAN 的训练过程
      • 训练流程概述
      • 训练流程步骤
        • 1. 初始化参数和超参数
        • 2. 定义损失函数
        • 3. 训练过程的迭代
          • 判别器训练步骤
          • 生成器训练步骤
        • 4. 交替优化
        • 5. 收敛判别
      • GAN 训练过程的挑战
    • 四、GAN 的常见变体
      • 1. DCGAN(Deep Convolutional GAN)
      • 2. CycleGAN
      • 3. BigGAN
      • 4. StyleGAN
      • 5. cGAN(Conditional GAN)
    • 五、GAN 的应用场景
    • 六、GAN 的优势与挑战
    • 总结
  • 历史文章
    • 机器学习
    • 深度学习

生成对抗网络(Generative Adversarial Network, GAN)是一种生成模型,由 Ian Goodfellow 等人于 2014 年提出。GAN 通过两个网络——生成器(Generator)和判别器(Discriminator)之间的对抗训练,使得生成器能够生成逼真的数据,从而被判别器难以区分。GAN 已广泛应用于图像生成、图像修复、风格迁移、文本生成等任务。

论文:Generative Adversarial Nets


一、基本结构

GAN 包含两个核心部分:生成器和判别器。

生成器

  • 功能:生成器接收一个随机噪声向量(通常是高斯分布或均匀分布),并将其映射到数据空间,使生成的数据尽可能接近真实数据
  • 目标:生成器的目标是 “欺骗”判别器,使其无法区分生成数据和真实数据。
  • 网络结构:生成器通常由一系列反卷积(或上采样)层组成,以逐步生成更高分辨率的图像

判别器

  • 功能:判别器接收输入样本,并判断该样本真假
  • 目标:判别器的目标是尽可能准确地分辨出真假样本
  • 网络结构:判别器通常是一个卷积神经网络(CNN),将输入数据压缩为一个概率值,表示该样本属于真实数据的概率

二、损失函数

GAN 的训练是一个生成器判别器相互博弈的过程,通过对抗训练逐步提高生成器的生成质量。训练过程主要包括以下步骤:

判别器

  • 训练判别器时,其输入是真实数据和生成器的生成数据
  • 判别器的目标区分真实数据和生成数据,即使得判别器输出接近 1 的概率表示真实数据,接近 0 的概率表示生成数据。
  • 判别器的损失函数通常使用二元交叉熵(Binary Cross-Entropy):
    L D = − E x ∼ p data [ log ⁡ D ( x ) ] − E z ∼ p z [ log ⁡ ( 1 − D ( G ( z ) ) ) ] L_D = - \mathbb{E}_{x \sim p_{\text{data}}} [\log D(x)] - \mathbb{E}_{z \sim p_z} [\log(1 - D(G(z)))] LD=Expdata[logD(x)]Ezpz[log(1D(G(z)))]

参数含义

  1. x x x真实数据样本,来自于真实数据分布 p data p_{\text{data}} pdata
  2. z z z生成器输入的噪声向量,通常从均匀分布或正态分布中采样。
  3. D ( x ) D(x) D(x)判别器真实样本 x x x 的输出,表示判别器认为该样本是真实数据的概率。
  4. D ( G ( z ) ) D(G(z)) D(G(z))判别器生成数据 G ( z ) G(z) G(z) 的输出,表示判别器认为该样本为真实数据的概率

判别器损失的计算过程

  1. 第一部分
    − E x ∼ p data [ log ⁡ D ( x ) ] - \mathbb{E}_{x \sim p_{\text{data}}} [\log D(x)] Expdata[logD(x)]

    • 表示对真实样本的损失。
    • 判别器希望尽量将真实数据的输出 D ( x ) D(x) D(x) 接近 1,因此这部分的目标是最小化 log ⁡ D ( x ) \log D(x) logD(x)
  2. 第二部分
    − E z ∼ p z [ log ⁡ ( 1 − D ( G ( z ) ) ) ] - \mathbb{E}_{z \sim p_z} [\log(1 - D(G(z)))] Ezpz[log(1D(G(z)))]

    • 表示对生成样本的损失。
    • 判别器希望尽量将生成数据的输出 D ( G ( z ) ) D(G(z)) D(G(z)) 接近 0,因此这部分的目标是最小化 log ⁡ ( 1 − D ( G ( z ) ) ) \log(1 - D(G(z))) log(1D(G(z)))

生成器

  • 训练生成器时,其输入是一个 随机噪声向量,通常记为 z。
  • 生成器的目标是生成逼真的样本,“欺骗”判别器,使判别器无法分辨生成数据和真实数据,因此生成器希望判别器输出接近 1(让判别器以为生成的图像是真实的)
  • 生成器的损失函数与判别器的损失类似,但这里生成器希望最大化判别器对生成数据的输出,即让判别器认为生成数据为真实数据

L G = − E z ∼ p z [ log ⁡ D ( G ( z ) ) ] L_G = -\mathbb{E}_{z \sim p_z} [\log D(G(z))] LG=Ezpz[logD(G(z))]

参数含义

  1. z z z:生成器输入的噪声向量,通常从均匀分布或正态分布中采样。
  2. D ( G ( z ) ) D(G(z)) D(G(z)):判别器对生成数据 G ( z ) G(z) G(z) 的输出,表示判别器认为生成样本为真实数据的概率

生成器损失的计算过程

  • 损失形式
    − E z ∼ p z [ log ⁡ D ( G ( z ) ) ] -\mathbb{E}_{z \sim p_z} [\log D(G(z))] Ezpz[logD(G(z))]
    生成器的目标是使 D ( G ( z ) ) D(G(z)) D(G(z)) 接近 1,也就是希望判别器对生成的样本做出“真实”的判断

  • 目标
    生成器通过最大化判别器对生成样本的输出,使得判别器无法区分生成样本和真实样本。

生成器的目标是最小化该损失,即最大化判别器对生成样本的输出

交替优化

在每轮训练中:

  1. 固定生成器,训练判别器
  2. 固定判别器,训练生成器
  3. 通过交替优化两者不断改进,生成器的生成样本越来越逼真,而判别器的分辨能力也不断提高。

目标函数

GAN 的目标是找到一个平衡点,使生成器生成的样本和真实数据在分布上尽可能接近。它是一个极小极大(minimax)损失函数,表达了生成器和判别器的博弈

min ⁡ G max ⁡ D V ( D , G ) = E x ∼ p data [ log ⁡ D ( x ) ] + E z ∼ p z [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{\text{data}}}[\log D(x)] + \mathbb{E}_{z \sim p_z}[\log(1 - D(G(z)))] GminDmaxV(D,G)=Expdata[logD(x)]+Ezpz[log(1D(G(z)))]

参数含义:

  1. G G G:生成器的参数。
  2. D D D:判别器的参数。
  3. x x x:真实样本,来自真实数据分布 p data p_{\text{data}} pdata
  4. z z z:噪声输入,通常从均匀分布或正态分布中采样。
  5. D ( x ) D(x) D(x):判别器对真实样本 x x x 的输出概率。
  6. D ( G ( z ) ) D(G(z)) D(G(z)):判别器对生成样本的输出概率。

这个目标函数包含两个部分:

  • 最大化判别器的目标:判别器希望最大化 log ⁡ D ( x ) \log D(x) logD(x) log ⁡ ( 1 − D ( G ( z ) ) ) \log(1 - D(G(z))) log(1D(G(z))),即尽可能将真实数据判断为真实样本、生成数据判断为生成样本
  • 最小化生成器的目标:生成器希望最小化 log ⁡ ( 1 − D ( G ( z ) ) ) \log(1 - D(G(z))) log(1D(G(z))),即生成器希望生成的样本尽可能接近真实样本,以欺骗判别器。

实际的 GAN 训练过程中,不会直接出现极小极大损失函数,而是通过优化生成器和判别器的各自损失函数来间接实现这个目标。
极小极大损失函数的目标通过分解判别器损失生成器损失来实现,二者的对抗优化就是对极小极大目标函数的间接实现。通过交替优化生成器和判别器的损失。伪代码实现如下:
在这里插入图片描述

三、GAN 的训练过程

训练流程概述

GAN 的训练是一个极小极大(minimax)的博弈过程

  1. 生成器的目标是生成逼真的样本来“欺骗”判别器,使得判别器无法分辨生成样本与真实样本;
  2. 判别器的目标是尽可能准确地区分真实样本和生成样本。

这种对抗关系通过两个网络交替训练来实现。

GAN 的训练过程分为以下几个主要步骤。

训练流程步骤

1. 初始化参数和超参数
  1. 初始化生成器 G G G 和判别器 D D D 的网络参数。
  2. 设定超参数,如学习率、训练轮数、批量大小、优化器等。
  3. 通常选择的优化器为 Adam 优化器,初始学习率一般设为较小值,以确保训练过程稳定。
2. 定义损失函数

GAN 的损失函数由生成器和判别器的对抗损失组成。目标是找到一个平衡点,使生成器能够生成与真实样本分布相近的样本。

  1. 判别器损失
    (参考上节)

  2. 生成器损失
    (参考上节)

3. 训练过程的迭代

训练过程的每一轮迭代中,生成器和判别器会交替优化。一般的训练过程如下:

判别器训练步骤

判别器的目标是区分真实样本和生成样本。每轮判别器训练分为以下步骤:

  1. 从真实数据分布中采样一批真实样本 x x x
  2. 生成器从随机噪声分布 z z z(通常为正态分布或均匀分布)中采样一批噪声向量,并生成对应的样本 G ( z ) G(z) G(z)
  3. 将真实样本 x x x 和生成样本 G ( z ) G(z) G(z) 分别输入判别器 D D D。判别器是一个二分类神经网络,通常由卷积层构成,以提取样本的特征输出是一个概率值,表示输入样本为真实样本的概率。计算出对真实样本的输出 D ( x ) D(x) D(x) 和生成样本的输出 D ( G ( z ) ) D(G(z)) D(G(z))
  4. 根据判别器损失函数 L D L_D LD计算判别器的损失,更新判别器的参数,使其能够更好地区分真实样本和生成样本。

判别器训练的目的是让它尽可能区分真实样本和生成样本,鼓励其将真实样本判断为 1,生成样本判断为 0。

生成器训练步骤

生成器的目标是生成能够“欺骗”判别器的样本。生成器的训练步骤如下:

  1. 随机噪声分布 z z z 中采样一批噪声向量。
  2. 将噪声向量输入生成器 G G G,得到生成的样本 G ( z ) G(z) G(z)。生成器是一个神经网络,通常由多层神经网络构成。在图像生成任务中,生成器通常采用反卷积(转置卷积)或上采样层来逐步生成高分辨率图像
  3. 将生成样本 G ( z ) G(z) G(z) 输入判别器 D D D,计算判别器对生成样本的输出 D ( G ( z ) ) D(G(z)) D(G(z))
  4. 根据生成器损失函数 L G L_G LG计算生成器的损失,通过反向传播更新生成器的参数,使生成器生成的样本更加逼真,以“欺骗”判别器。

生成器的优化目标是使得判别器的输出 D ( G ( z ) ) D(G(z)) D(G(z)) 越接近 1 越好,即让判别器认为生成样本是真实样本。生成器训练时,这里的 D D D 的参数是不可训练的

4. 交替优化

训练过程中,生成器和判别器会不断地交替优化。通常,每轮训练中会多次优化判别器(如更新判别器参数数次,再更新生成器参数一次),以确保判别器的分辨能力。这种交替优化的过程被称为 GAN 的“对抗训练”。

5. 收敛判别

GAN 的训练目标是找到生成器和判别器之间的平衡点,但收敛难以判断。通常可以通过以下方法判别 GAN 是否趋于收敛:

  1. 生成样本质量
    观察生成样本的视觉质量,当生成样本变得清晰且真实时,说明生成器已经学到了接近真实数据分布的特征。

  2. 判别器输出的均衡
    在理想的情况下,判别器真实样本和生成样本的输出概率应接近 0.5,表示判别器很难区分真假样本。

  3. 损失变化
    监控生成器和判别器的损失,若损失趋于平稳,说明两者逐渐达到平衡状态。


GAN 训练过程的挑战

GAN 的训练通常存在一些挑战,需要在训练过程中进行调试和优化。

  1. 训练不稳定
    GAN 的训练过程可能会发生梯度消失或梯度爆炸,导致生成效果不佳。可以使用 WGAN、谱归一化等方法来提升稳定性。

  2. 模式崩溃(Mode Collapse)
    生成器可能会陷入“模式崩溃”现象,即只生成相似的样本而缺乏多样性。可以通过多样性损失(如 Minibatch Discrimination)或训练策略(如添加噪声)来缓解模式崩溃。

  3. 对抗关系平衡
    判别器和生成器的能力需要平衡。若判别器太强,生成器难以改进;若生成器太强,判别器很快失去判断能力。可以适当调整判别器和生成器的训练频率,保持两者的平衡。

四、GAN 的常见变体

原始的 GAN 结构存在一些问题,例如训练不稳定、容易陷入模式崩溃(mode collapse)等。为了克服这些问题,出现了多种改进的 GAN 变体

变体主要改进应用场景优点
DCGAN使用深度卷积结构生成图像,批量归一化等改进高质量图像生成、人脸生成、艺术风格图像生成生成质量高,结构简单
CycleGAN无需配对数据,使用循环一致性损失双生成器双判别器实现图像转换图像风格迁移(照片转素描、白天转夜晚)等无需配对数据,双向转换
BigGAN标签嵌入、谱归一化、大型网络结构(更多层次的卷积)高清图像生成、超高分辨率生成生成质量极高,适合大规模数据
StyleGAN样式映射网络,自适应实例归一化(AdaIN),多尺度控制高质量人脸生成、风格迁移细节控制能力强,质量极高
cGAN在生成器和判别器中加入条件输入,实现特定属性生成根据类别标签生成图像(不同表情、年龄等)可控性高,适合特定属性生成

1. DCGAN(Deep Convolutional GAN)

DCGAN 是最早将卷积神经网络(CNN)应用于 GAN 的变体之一,被广泛应用于图像生成任务。DCGAN 的目标是提升图像生成质量,使生成器可以生成更高分辨率和更具细节的图像。

主要改进

  1. 使用卷积层替代 GAN 中传统的全连接层,生成器使用反卷积(或转置卷积)逐步生成图像,判别器使用标准的卷积层提取图像特征
  2. 移除池化层用步幅卷积(stride convolution)来减小分辨率,从而保留更多细节。
  3. 在生成器和判别器中使用批量归一化(Batch Normalization)来加速训练和提升稳定性。
  4. 生成器使用 ReLU 激活,判别器使用 Leaky ReLU 激活。

应用场景

  • 高质量图像生成、人脸生成、艺术风格图像生成等。

优点

  • 结构简单,训练稳定性较高,生成图像质量较好,是后续很多 GAN 变体的基础。

2. CycleGAN

CycleGAN 是一种专注于未配对数据集的图像到图像转换的 GAN 变体,用于解决当缺少成对样本时的风格迁移和图像转换任务。

主要改进

  1. 循环一致性损失(Cycle Consistency Loss):CycleGAN 在生成器中引入了循环一致性损失,使得图像从一种风格转换为另一种风格后,还可以还原回原始风格。这种双向映射的设计让 CycleGAN
    能够在没有配对数据的情况下进行训练。
  2. 双生成器双判别器:CycleGAN 使用两个生成器两个判别器,分别负责从源域到目标域的转换,以及从目标域到源域的逆向转换。

应用场景

  • 图像风格转换(如将马变为斑马、照片转为素描、白天转为夜晚)、图像修复和艺术创作等。

优点

  • 无需配对训练数据,即可实现高质量的图像到图像转换,特别适合风格迁移任务。

3. BigGAN

BigGAN 是一种大规模、高分辨率的 GAN 变体,主要用于生成高质量、高分辨率的图像。BigGAN 在生成效果上达到了新的高度,但其训练难度和计算资源要求也较高。

主要改进

  1. 标签嵌入(Label Embedding):在生成器和判别器中加入标签嵌入,以便在条件 GAN 中生成具有特定类别的图像
  2. 正则化和归一化技术:BigGAN 使用谱归一化(Spectral Normalization)来控制判别器的梯度,使得训练更稳定。此外,使用大批量训练、渐进式训练等手段来提高生成图像的分辨率和质量。
  3. 生成器架构调整:生成器中使用了更多层次的卷积,使得生成的图像更细腻,并利用大型网络结构提升生成质量。

应用场景

  • 高清图像生成、图像生成研究等,适用于需要超高质量和分辨率的生成任务。

优点

  • 生成质量出色,可以生成高分辨率的图像,但训练成本较高,适合有强大计算资源支持的场景。

4. StyleGAN

StyleGAN 是由 NVIDIA 提出的基于样式控制的 GAN 变体,提供了更高的图像生成质量和样式可控性。它被广泛用于高质量人脸生成和其他具有分层样式控制的生成任务中。

主要改进

  1. 样式映射网络(Style Mapping Network):StyleGAN 使用一个样式映射网络,将潜在空间中的输入向量映射到样式空间,然后将这些样式控制应用于生成器的不同层次。
  2. 自适应实例归一化(Adaptive Instance Normalization, AdaIN):生成器在每一层应用 AdaIN 操作,使样式向量可以控制每层的特征分布,实现不同分辨率下的细节和整体风格调整。
  3. 多尺度控制:通过在不同生成层次中应用样式向量,StyleGAN 可以在不同层次上控制图像的特征,从而生成更细腻、更有层次感的图像。

应用场景

  • 高质量人脸生成、艺术风格迁移、细节编辑等。

优点

  • 生成图像质量极高,具有强大的样式控制能力,能够在不同层次上调整生成样本的特征。

5. cGAN(Conditional GAN)

cGAN(条件 GAN) 是在生成器和判别器中引入条件信息(如类别标签、属性标签等)的 GAN 变体,使得 GAN 生成的图像可以带有特定的属性或类别。cGAN 的基本思想是在生成器和判别器的输入中加入条件变量。

主要改进

  1. 条件输入:在生成器的输入噪声向量上添加类别标签或其他条件变量,这使得生成器可以根据给定条件生成带有特定特征的图像。
  2. 判别器的条件输入:在判别器中引入相同的条件信息,使判别器能够更准确地判断生成样本是否符合给定条件。

应用场景

  • 根据类别生成特定属性的图像,如不同表情、服装、场景、年龄等。适用于需要生成带有特定特征的图像任务。

优点

  • 生成的图像具有更高的可控性,适合生成带有明确标签或特征的图像。

五、GAN 的应用场景

GAN 具有强大的生成能力,在多个领域中得到了广泛应用:

  1. 图像生成

    • GAN 可用于生成高分辨率图像,应用于艺术创作、广告、电影制作等领域。
  2. 图像修复

    • GAN 可用于修复有缺陷或损坏的图像,例如老照片修复、面部填补。
  3. 图像超分辨率

    • GAN 可生成清晰的高分辨率图像,用于增强低分辨率图像的细节。
  4. 图像到图像的转换

    • 例如将草图转为真实照片,黑白图像上色等。CycleGAN 在无监督图像转换任务上表现优异。
  5. 数据增强

    • 在数据集有限的情况下,GAN 可以用于生成新样本,扩展训练数据,提升模型的泛化能力。
  6. 文本生成与文本到图像生成

    • GAN 已应用于文本生成、文本到图像生成等任务,使 AI 能够根据描述生成符合语义的图像。

六、GAN 的优势与挑战

优势:

  1. 生成能力强

    • GAN 的生成器可以生成逼真的样本,不仅限于简单的噪声分布。
  2. 无监督学习

    • GAN 不需要带标签的样本,能够通过未标注数据进行无监督训练。
  3. 适用范围广

    • GAN 的生成能力在图像、音频、文本等多种数据类型上都有广泛应用。

挑战:

  1. 训练不稳定

    • GAN 的训练是生成器和判别器的对抗过程,容易陷入梯度消失或爆炸,训练过程不稳定。
  2. 模式崩溃

    • GAN 可能生成重复样本而缺乏多样性(模式崩溃),即生成器只生成某些特定样本。
  3. 超参数敏感

    • GAN 的训练对学习率、批量大小等超参数较为敏感,调优成本高。
  4. 难以衡量生成质量

    • GAN 的生成样本质量较难定量评估,目前常用的 FID(Fréchet Inception Distance)等指标也无法完全反映样本质量。

总结

GAN 是一种强大的生成模型,通过生成器和判别器的对抗训练,使得生成器能够生成接近真实的数据。GAN 的多种变体和改进版本在图像生成、数据增强、风格转换等领域取得了显著成果。尽管 GAN 面临训练不稳定、模式崩溃等挑战,但它的生成能力为多个领域的研究和应用提供了新的可能性。未来的研究将继续优化 GAN 的稳定性和多样性,扩展其在不同场景的应用。

历史文章

机器学习

机器学习笔记——损失函数、代价函数和KL散度
机器学习笔记——特征工程、正则化、强化学习
机器学习笔记——30种常见机器学习算法简要汇总
机器学习笔记——感知机、多层感知机(MLP)、支持向量机(SVM)
机器学习笔记——KNN(K-Nearest Neighbors,K 近邻算法)
机器学习笔记——朴素贝叶斯算法
机器学习笔记——决策树
机器学习笔记——集成学习、Bagging(随机森林)、Boosting(AdaBoost、GBDT、XGBoost、LightGBM)、Stacking
机器学习笔记——Boosting中常用算法(GBDT、XGBoost、LightGBM)迭代路径
机器学习笔记——聚类算法(Kmeans、GMM-使用EM优化)
机器学习笔记——降维

深度学习

深度学习笔记——优化算法、激活函数
深度学习——归一化、正则化
深度学习——权重初始化、评估指标、梯度消失和梯度爆炸
深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总
深度学习笔记——卷积神经网络CNN
深度学习笔记——循环神经网络RNN、LSTM、GRU、Bi-RNN
深度学习笔记——Transformer
深度学习笔记——3种常见的Transformer位置编码
深度学习笔记——GPT、BERT、T5
深度学习笔记——ViT、ViLT
深度学习笔记——DiT(Diffusion Transformer)
深度学习笔记——多模态模型CLIP、BLIP
深度学习笔记——AE、VAE

相关文章:

深度学习笔记——生成对抗网络GAN

本文详细介绍早期生成式AI的代表性模型:生成对抗网络GAN。 文章目录 一、基本结构生成器判别器 二、损失函数判别器生成器交替优化目标函数 三、GAN 的训练过程训练流程概述训练流程步骤1. 初始化参数和超参数2. 定义损失函数3. 训练过程的迭代判别器训练步骤生成器…...

《地球科学与环境学报》

《地球科学与环境学报》报道范围涵盖基础地质、矿产地质、水资源与环境、工程地质、地球物理、地球信息科学等领域,刊载国内外未公开发表的有创新性或意义重大的研究论文和综述文章。   来稿必须包括以下项目:题名(尽可能不要超过20字&…...

k8s 1.28 聚合层部署信息记录

–requestheader-client-ca-file –requestheader-allowed-namesfront-proxy-client –requestheader-extra-headers-prefixX-Remote-Extra- –requestheader-group-headersX-Remote-Group –requestheader-username-headersX-Remote-User –proxy-client-cert-file –proxy-cl…...

组件化设计的意义

鸿蒙操作系统(HarmonyOS)是华为公司开发的一款面向未来、面向全场景的分布式操作系统。它不仅能够支持多种智能终端设备,还能够实现跨设备之间的协同工作。为了满足不同设备的资源能力和业务需求,鸿蒙操作系统采用了组件化的设计方…...

2025 年河北省职业院校大数据应用与 服务(中职组)赛项样题

— 1 — 2025 年河北省职业院校大数据应用与 服务(中职组)赛项样题 一、背景描述 近年来,随着旅游业的快速发展和社交媒体的普及,一 些目的地因其独特的魅力或者事件而迅速走红,吸引了大量 游客涌入,使得当…...

宏集eXware物联网网关在水务管理系统上的应用

一、前言 水务管理系统涵盖了对城市水网、供水、排水、污水处理等多个环节的监控与管理。随着物联网(IoT)技术的快速发展,物联网网关逐渐成为水务管理系统中的关键组成部分。 宏集物联网网关以其高效的数据采集、传输和管理功能&#xff0c…...

【看海的算法日记✨优选篇✨】第三回:二分之妙,寻径中道

🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C系列》《Linux系列》《算法系列》 ⛰️ 一念既出,万山无阻 目录 📖一、算法思想 细节问题 📚左右临界 📚中点选择 📚…...

yolov5 解决:export GIT_PYTHON_REFRESH=quiet

当我们在第一次运行YOLOv5中的train.py程序时:可能会出现以下报错: This initial warning can be silenced or aggravated in the future by setting the $GIT_PYTHON_REFRESH environment variable. Use one of the following values: - quiet|q|silen…...

MongoDB聚合操作

1.聚合操作 聚合操作处理数据记录并返回计算结果。聚合操作组值来自多个文档,可以对分组数据执行各种操作以返回单个结果。聚合操作包含三类:单一作用聚合、聚合管道、MapReduce。 单一作用聚合:提供了对常见聚合过程的简单访问&#xff0c…...

Apple雷电5到底有多快?

在科技日新月异的今天,苹果公司始终走在技术创新的前沿。2023年9月12日,随着英特尔发布雷电5(Thunderbolt 5)规范,苹果迅速跟进,将其应用于自家的产品中。雷电5接口以其卓越的性能,彻底颠覆了我…...

项目快过:知识蒸馏 | 目标检测 |FGD | Focal and Global Knowledge Distillation for Detectors

公开时间:2022年3月9号 项目地址:https://github.com/yzd-v/FGD 论文地址:https://arxiv.org/pdf/2111.11837 知识蒸馏已成功地应用于图像分类。然而,目标检测要复杂得多,大多数知识蒸馏方法都失败了。本文指出&#…...

Spring Boot日志总结

文章目录 1.我们的日志2.日志的作用3.使用日志对象打印日志4.日志框架介绍5.深入理解门面模式(外观模式)6.日志格式的说明7.日志级别7.1日志级别分类7.2配置文件添加日志级别 8.日志持久化9.日志文件的拆分9.1官方文档9.2IDEA演示文件分割 10.日志格式的配置11.更简单的日志输入…...

PostgreSQL最常用数据类型-重点说明自增主键处理

简介 PostgreSQL提供了非常丰富的数据类型,我们平常使用最多的基本就3类: 数字类型字符类型时间类型 这篇文章重点介绍这3中类型,因为对于高并发项目还是推荐:尽量使用简单类型,把运算和逻辑放在应用中,…...

androidstudio 最新继承 proto kts 方式

在Android Studio中,如果你使用的是Kotlin DSL(.kts文件)来配置你的Gradle项目,并且你想集成Protocol Buffers(Proto),你需要稍微调整你的配置方式。以下是如何在Kotlin DSL中配置Proto集成的步…...

【STM32学习】TB6612FNG驱动芯片的学习,驱动电路的学习

目录 1、TB6612电机驱动芯片 1.1如下是芯片的引脚图: 1.2如下图是电机的控制逻辑: 1.3MOS管运转逻辑 1.3典型应用电路 2、H桥驱动电路 2.1、单极模式 2.2、双极模式 2.3、高低端MOS管导通条件 2.4、H桥电路设计 2.5、自举电路 3、电气特性 3…...

【AI战略思考13】克服懒惰,保持专注,提升效率,不再焦虑

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 引言 我发现自己最近非常懒惰,浪费了很多时间,也容易分心,不够专注,效率低下,且每天都有点焦虑,因此制定了下面的要求和作息时间表。 目…...

基于Vue3+Element Plus 实现多表单校验

使用场景 表单校验在日常的开发需求中是一种很常见的需求,通常在提交表单发起请求前校验用户输入是否符合规则,通常只需formRef.value.validate()即可校验,但是,例如一些多步骤表单、动态表单、以及不同的用户角色可能看到不同的表…...

“岗位复合化、技能层次化” 高职大数据技术专业人才培养实践

在全球数字化浪潮的推动下,大数据技术已经成为引领社会进步和经济发展的核心动力。随着《关于深化现代职业教育体系建设改革的意见》等系列指导问文件的发布,我国高职大数据技术专业的教育正迎来全新机遇与挑战。这些政策不仅明确了职业教育改革的方向&a…...

Day2 生信新手笔记: Linux基础

一、基础知识 1.1 服务器 super computer 或 server 1.2 组学数据分析 组学数据:如基因组学、转录组学、蛋白质组学等; 上游分析:主要涉及原始数据的获取和初步处理,计算量大,消耗的资源较多,在服务器完…...

AI开发-数据可视化库-Seaborn

1 需求 概述 Seaborn 是一个基于 Python 的数据可视化库,它建立在 Matplotlib 之上。其主要目的是使数据可视化更加美观、方便和高效。它提供了高层次的接口和各种美观的默认主题,能够帮助用户快速创建出具有吸引力的统计图表,用于数据分析和…...

如何把Qt exe文件发送给其他人使用

如何把Qt exe文件发送给其他人使用 1、先把 Debug改成Release2、重新构建项目3、运行项目4、找到release文件夹5、新建文件夹,存放exe文件6、打开qt控制台串口7、下载各种文件8、压缩,发送压缩包给别人 1、先把 Debug改成Release 2、重新构建项目 3、运行…...

力扣103.二叉树的锯齿形层序遍历

题目描述 题目链接103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1&#xff…...

MOH: MULTI-HEAD ATTENTION AS MIXTURE-OFHEAD ATTENTION

当前的问题 多头注意力使用多个头部可以提高模型的精度。然而,并不是所有的注意力头都具有同样的重要性。一些研究表明,许多注意力头可以被修剪而不影响准确性。 此外,在多头注意中,每个注意头并行操作,最终输出是所…...

Linux的文件系统

这里写目录标题 一.文件系统的基本组成索引节点目录项文件数据的存储扇区三个存储区域 二.虚拟文件系统文件系统分类进程文件表读写过程 三.文件的存储连续空间存放方式缺点 非连续空间存放方式链表方式隐式链表缺点显示链接 索引数据库缺陷索引的方式优点:多级索引…...

力扣78题详解:C语言实现子集问题

力扣78题详解:C语言实现子集问题 题目描述 给定一个不含重复元素的整数数组 nums,返回其所有可能的子集(幂集)。 说明:解集不能包含重复的子集,顺序无关。 示例 输入:nums [1,2,3] 输出&am…...

按行数据拆分到工作表-Excel易用宝

有这样一份工作表,现在要对工作表按指定行数进行拆分,如果你还在选择数据区域复制粘贴到每个工作表中,那这样的效率也太低了。 按指定行数拆分工作表,就用易用宝。 单击Excel易用宝,合并与拆分,拆分工作表…...

.net core 创建linux服务,并实现服务的自我更新

目录 创建服务创建另一个服务,用于执行更新操作给你的用户配置一些systemctl命令权限 创建服务 /etc/systemd/system下新建服务配置文件:yourapp.service,内容如下: [Unit] Descriptionyourapp Afternetwork.target[Service] Ty…...

无人机的起降装置:探索起飞和降落的秘密 !

一、起降系统的运行方式 起飞方式 垂直起飞:小型无人机通常采用垂直起飞方式,利用螺旋桨产生的升力直接从地面升起。这种方式适用于空间有限或需要快速起飞的场景。 跑道起飞:大型无人机或需要较长起飞距离的无人机,可能会采用…...

Apache Airflow 快速入门教程

Apache Airflow已经成为Python生态系统中管道编排的事实上的库。与类似的解决方案相反,由于它的简单性和可扩展性,它已经获得了普及。在本文中,我将尝试概述它的主要概念,并让您清楚地了解何时以及如何使用它。 Airflow应用场景 …...

数学题转excel;数学题库;数学试卷转excel;大风车excel

一、数学试卷转excel 有些需要刷题的朋友,需要将题库数学题转为excel格式,便于管理 前端时间帮一位朋友实现了数学题转excel,包括选择题、填空题、分析题 示例: 二、问题 数学题是最难以处理的试题,理由如下 1、有…...

【C++】类和对象(下)

目录 前言 一、再探构造函数 二、类型转换 三、static 成员 四、友元 五、内部类 六、匿名对象 七、对象拷贝时的编译器优化 总结 前言 本文主要内容:构造函数的再探--初始化列表、内置类型与自定义类型之间的转换、类的static成员、友元、内部类、匿名对…...

vue多页面应用集成时权限处理问题

在多页面应用(MPA)中,权限管理通常会涉及到每个页面的访问控制、身份验证、以及权限校验。以下是几种常见的权限处理方式: 1. 前端路由权限控制 原理:虽然是多页面应用,通常每个页面会独立加载和渲染&…...

输出保留3位小数的浮点数

输出保留3位小数的浮点数 C语言代码C代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 读入一个单精度浮点数,保留3位小数输出这个浮点数。 输入 只有一行,一个单精度浮点数。 输出 也只有一…...

openssl的运用

一、概述 Opssl是一个用于TLS/SSL协议的工具包,也是一个通用密码库。 包含了国密sm2 sm3 sm4,包含了对称加密,非对称加密,单项散列,伪随机、签名,密码交换,证书等一些算法库。 为了深层次的学习…...

C++STL之vector(超详细)

CSTL之vector 1.vector基本介绍2.vector重要接口2.1.构造函数2.2.迭代器2.3.空间2.3.1.resize2.3.2.capacity 2.4.增删查找 3.迭代器失效4.迭代器分类 🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀&#x1f68…...

RabbitMQ消息可靠性保证机制5--消息幂等性处理

RabbitMQ层面有实现“去重机制”来保证“恰好一次”吗?答案是没并没有,而且现在主流的消息中间件都没有实现。 一般解决重复消息的办法是:在消费端让我们消费消息操作具有幂等性。 幂等性问题并不是消息系统独有,而是&#xff0…...

24/12/1 算法笔记<强化学习> 创建Maze交互

我们今天制作一个栅格的游戏。 我们直接上代码教学。 1.载入库和查找相应的函数版本 import numpy as np import time import sysif sys.version_info.major 2:import Tkinter as tk else:import tkinter as tk 2.设置长宽和单元格大小 UNIT 40 MAZE_H 4 MAZE_W 4 3.初始…...

c++:模版 template

一、模版 1.格式&#xff1a; template <typname T> 2.实现 2.1自动推导 模板只对紧跟在后面的第一行代码有效&#xff0c;如果后面还想定义模板函数需要重新定义模板 #include <iostream> #include <string>template <typename T> void Print(T v…...

javascript切换类、删除类、修改类以及增加类

在JavaScript中&#xff0c;操作DOM元素的类&#xff08;class&#xff09;是一个常见的操作。以下是一些基本的方法来切换类、删除类、修改类以及增加内联样式&#xff1a; 切换类&#xff08;Toggle Class&#xff09; 切换类意味着如果类存在则移除它&#xff0c;如果不存…...

区块链学习笔记(2)--区块链的交易模型part1

模型基础 区块链的tx分为两种模型&#xff0c;分别是比特币为代表的UTXO&#xff08;Unspent Transaction Output&#xff09;模型&#xff0c;和以太坊为代表的Account模型。前者适用于货币记账&#xff0c;后者适用于链上应用。 UTXO模型 类似于现金的交易模型 一个tx包含…...

反射知识总结

狂神说 反射的功能&#xff1a; 类加载内存分析 类加载的时候&#xff0c;class对象就形成了。 类无论有多少对象&#xff0c;class对象只有一个。 获取类对象三种方式 反射&#xff0c;就是通过api获取一个类的类对象&#xff1a; 有三种方式&#xff1a; 方法一&#xf…...

selenium部署分布式 UI 自动化测试环境-Docker

一、根据selenium/hub官网的配置信息&#xff0c;进行配置。 How to run this image The Hub and Nodes will be created in the same network and they will recognize each other by their container name. A Docker network⁠ needs to be created as a first step.Create …...

算法刷题Day5: BM52 数组中只出现一次的两个数字

描述&#xff1a; 一个整型数组里除了两个数字只出现一次&#xff0c;其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 要求&#xff1a;空间复杂度 O(1)&#xff0c;时间复杂度O(n)。 题目传送门 is here 思路&#xff1a; 方法一&#xff1a;最简单的思路就…...

使用docker-compose部署搜索引擎ElasticSearch6.8.10

背景 Elasticsearch 是一个开源的分布式搜索和分析引擎&#xff0c;基于 Apache Lucene 构建。它被广泛用于实时数据搜索、日志分析、全文检索等应用场景。 Elasticsearch 支持高效的全文搜索&#xff0c;并提供了强大的聚合功能&#xff0c;可以处理大规模的数据集并进行快速…...

多线程篇-5--线程分类(线程类型,springboot中常见线程类型,异步任务线程)

常见的线程类型包括用户线程&#xff08;User Threads&#xff09;、守护线程&#xff08;Daemon Threads&#xff09;、主线程&#xff08;Main Thread&#xff09;、工作线程&#xff08;Worker Threads&#xff09;和线程池中的线程。 一、用户线程&#xff08;User Thread…...

详解高斯消元

详解高斯消元 好东西,可以求所有一次方程组的解。 \color {red} 好东西,可以求所有一次方程组的解。 好东西,可以求所有一次方程组的解。 前置知识 一般消元法的公理: 两方程互换,解不变; 一方程乘以非零数 k k k,解不变; 一方程乘以数 k k k加上另一方程,解不变。 …...

【Python网络爬虫笔记】5-(Request 带参数的get请求) 爬取豆瓣电影排行信息

目录 1.抓包工具查看网站信息2.代码实现3.运行结果 1.抓包工具查看网站信息 请求路径 url:https://movie.douban.com/typerank请求参数 页面往下拉&#xff0c;出现新的请求结果&#xff0c;参数start更新&#xff0c;每次刷新出20条新的电影数据 2.代码实现 # 使用网络爬…...

泷羽sec- shell编程(8) until循环以及函数基本创建调用 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…...

Apache Flink从Kafka中消费商品数据,并进行商品分类的数量统计题

使用Apache Flink从Kafka中消费商品数据&#xff0c;并进行商品分类的数量统计是一个典型的流处理任务。以下是一个详细的步骤指南和示例代码&#xff0c;帮助你实现这一功能。 ### 前提条件 1. **安装Flink**&#xff1a;确保你的环境中已经安装了 Apache Flink。 2. **安装…...

Ubuntu 安装 MariaDB

安装 MariaDB具体步骤 1、更新软件包索引&#xff1a; sudo apt update2、安装 MariaDB 服务器&#xff1a; sudo apt install mariadb-server3、启动 MariaDB 服务&#xff08;如果未自动启动&#xff09;&#xff1a; sudo systemctl start mariadb4、设置 MariaDB 开机启…...