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

GAN!生成对抗网络GAN全维度介绍与实战

目录

  • 一、引言
    • 1.1 生成对抗网络简介
    • 1.2 应用领域概览
    • 1.3 GAN的重要性
  • 二、理论基础
    • 2.1 生成对抗网络的工作原理
      • 2.1.1 生成器
        • 生成过程
      • 2.1.2 判别器
        • 判别过程
      • 2.1.3 训练过程
        • 训练代码示例
      • 2.1.4 平衡与收敛
    • 2.2 数学背景
      • 2.2.1 损失函数
        • 生成器损失
        • 判别器损失
      • 2.2.2 优化方法
        • 优化代码示例
      • 2.2.3 高级概念
    • 2.3 常见架构及变体
      • 2.3.1 DCGAN(深度卷积生成对抗网络)
        • 代码结构示例
      • 2.3.2 WGAN(Wasserstein生成对抗网络)
      • 2.3.3 CycleGAN
      • 2.3.4 InfoGAN
      • 2.3.5 其他变体
  • 三、实战演示
    • 3.1 环境准备和数据集
      • 3.1.1 环境要求
        • 软件依赖
        • 代码示例:安装依赖
        • 硬件要求
      • 3.1.2 数据集选择与预处理
        • 数据集选择
        • 数据预处理
        • 代码示例:数据加载与预处理
      • 小结
    • 3.2 生成器构建
      • 架构设计
        • 全连接层
        • 卷积层
      • 输入潜在空间
      • 激活函数和归一化
      • 反卷积技巧
      • 与判别器的协调
      • 小结
    • 3.3 判别器构建
      • 判别器的角色和挑战
      • 架构设计
        • 代码示例:卷积判别器
      • 激活函数和归一化
      • 损失函数设计
      • 正则化和稳定化
      • 特殊架构设计
      • 与生成器的协调
      • 小结
    • 3.4 损失函数和优化器
      • 损失函数
        • 1. 原始GAN损失
        • 2. Wasserstein GAN损失
        • 3. LSGAN(最小平方损失)
        • 4. hinge损失
      • 优化器
        • 1. SGD
        • 2. Adam
        • 3. RMSProp
      • 超参数选择
      • 小结
    • 3.5 模型训练
      • 训练循环
        • 代码示例:训练循环
      • 训练稳定化
      • 模型评估
      • 超参数调优
      • 调试和可视化
      • 分布式训练
      • 小结
    • 3.6 结果分析和可视化
      • 结果可视化
        • 1. 生成样本展示
        • 2. 特征空间可视化
        • 3. 训练过程动态
      • 量化评估
        • 1. Inception Score (IS)
        • 2. Fréchet Inception Distance (FID)
      • 模型解释
      • 应用场景分析
      • 持续监测和改进
      • 小结
  • 四、总结
        • 1. 理论基础
        • 2. 实战实现
        • 3. 技术挑战与前景
      • 展望

本文为生成对抗网络GAN的研究者和实践者提供全面、深入和实用的指导。通过本文的理论解释和实际操作指南,读者能够掌握GAN的核心概念,理解其工作原理,学会设计和训练自己的GAN模型,并能够对结果进行有效的分析和评估。

作者 TechLead,拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人

一、引言

1.1 生成对抗网络简介

file

生成对抗网络(GAN)是深度学习的一种创新架构,由Ian Goodfellow等人于2014年首次提出。其基本思想是通过两个神经网络,即生成器(Generator)和判别器(Discriminator),相互竞争来学习数据分布。

  • 生成器:负责从随机噪声中学习生成与真实数据相似的数据。
  • 判别器:尝试区分生成的数据和真实数据。

两者之间的竞争推动了模型的不断进化,使得生成的数据逐渐接近真实数据分布。

1.2 应用领域概览

GANs在许多领域都有广泛的应用,从艺术和娱乐到更复杂的科学研究。以下是一些主要的应用领域:

  • 图像生成:如风格迁移、人脸生成等。
  • 数据增强:通过生成额外的样本来增强训练集。
  • 医学图像分析:例如通过GAN生成医学图像以辅助诊断。
  • 声音合成:利用GAN生成或修改语音信号。

file
file
file

1.3 GAN的重要性

GAN的提出不仅在学术界引起了广泛关注,也在工业界取得了实际应用。其重要性主要体现在以下几个方面:

  • 数据分布学习:GAN提供了一种有效的方法来学习复杂的数据分布,无需任何明确的假设。
  • 多学科交叉:通过与其他领域的结合,GAN开启了许多新的研究方向和应用领域。
  • 创新能力:GAN的生成能力使其在设计、艺术和创造性任务中具有潜在的用途。

二、理论基础

2.1 生成对抗网络的工作原理

生成对抗网络(GAN)由两个核心部分组成:生成器(Generator)和判别器(Discriminator),它们共同工作以达到特定的目标。
file

2.1.1 生成器

生成器负责从一定的随机分布(如正态分布)中抽取随机噪声,并通过一系列的神经网络层将其映射到数据空间。其目标是生成与真实数据分布非常相似的样本,从而迷惑判别器。

生成过程

def generator(z):# 输入:随机噪声z# 输出:生成的样本# 使用多层神经网络结构生成样本# 示例代码,输出生成的样本return generated_sample

2.1.2 判别器

判别器则尝试区分由生成器生成的样本和真实的样本。判别器是一个二元分类器,其输入可以是真实数据样本或生成器生成的样本,输出是一个标量,表示样本是真实的概率。

判别过程

def discriminator(x):# 输入:样本x(可以是真实的或生成的)# 输出:样本为真实样本的概率# 使用多层神经网络结构判断样本真伪# 示例代码,输出样本为真实样本的概率return probability_real

2.1.3 训练过程

生成对抗网络的训练过程是一场两个网络之间的博弈,具体分为以下几个步骤:

  1. 训练判别器:固定生成器,使用真实数据和生成器生成的数据训练判别器。
  2. 训练生成器:固定判别器,通过反向传播调整生成器的参数,使得判别器更难区分真实和生成的样本。

训练代码示例

# 训练判别器和生成器
# 示例代码,同时注释后增加指令的输出

2.1.4 平衡与收敛

GAN的训练通常需要仔细平衡生成器和判别器的能力,以确保它们同时进步。此外,GAN的训练收敛性也是一个复杂的问题,涉及许多技术和战略。

2.2 数学背景

生成对抗网络的理解和实现需要涉及多个数学概念,其中主要包括概率论、最优化理论、信息论等。

2.2.1 损失函数

损失函数是GAN训练的核心,用于衡量生成器和判别器的表现。

生成器损失

生成器的目标是最大化判别器对其生成样本的错误分类概率。损失函数通常表示为:

L_G = -\mathbb{E}[\log D(G(z))]

其中,(G(z)) 表示生成器从随机噪声 (z) 生成的样本,(D(x)) 是判别器对样本 (x) 为真实的概率估计。

判别器损失

判别器的目标是正确区分真实数据和生成数据。损失函数通常表示为:

L_D = -\mathbb{E}[\log D(x)] - \mathbb{E}[\log (1 - D(G(z)))]

其中,(x) 是真实样本。

2.2.2 优化方法

GAN的训练涉及复杂的非凸优化问题,常用的优化算法包括:

  • 随机梯度下降(SGD):基本的优化算法,适用于大规模数据集。
  • Adam:自适应学习率优化算法,通常用于GAN的训练。

优化代码示例

# 使用PyTorch的Adam优化器
from torch.optim import Adamoptimizer_G = Adam(generator.parameters(), lr=0.0002, betas=(0.5, 0.999))
optimizer_D = Adam(discriminator.parameters(), lr=0.0002, betas=(0.5, 0.999))

2.2.3 高级概念

  • Wasserstein距离:在某些GAN变体中,用于衡量生成分布与真实分布之间的距离。
  • 模式崩溃:训练过程中生成器可能会陷入生成有限样本的情况,导致训练失败。

这些数学背景为理解生成对抗网络的工作原理提供了坚实基础,并揭示了训练过程中的复杂性和挑战性。通过深入探讨这些概念,读者可以更好地理解GAN的内部运作,从而进行更高效和有效的实现。

2.3 常见架构及变体

生成对抗网络自从提出以来,研究者们已经提出了许多不同的架构和变体,以解决原始GAN存在的一些问题,或者更好地适用于特定应用。

2.3.1 DCGAN(深度卷积生成对抗网络)

file
DCGAN是使用卷积层的GAN变体,特别适用于图像生成任务。

  • 特点:使用批量归一化,LeakyReLU激活函数,无全连接层等。
  • 应用:图像生成,特征学习等。

代码结构示例

# DCGAN生成器的PyTorch实现
import torch.nn as nnclass DCGAN_Generator(nn.Module):def __init__(self):super(DCGAN_Generator, self).__init__()# 定义卷积层等

2.3.2 WGAN(Wasserstein生成对抗网络)

WGAN通过使用Wasserstein距离来改进GAN的训练稳定性。

  • 特点:使用Wasserstein距离,剪裁权重等。
  • 优势:训练更稳定,可解释性强。

2.3.3 CycleGAN

CycleGAN用于进行图像到图像的转换,例如将马的图像转换为斑马的图像。

  • 特点:使用循环一致损失确保转换的可逆性。
  • 应用:风格迁移,图像转换等。

2.3.4 InfoGAN

InfoGAN通过最大化潜在代码和生成样本之间的互信息,使得潜在空间具有更好的解释性。

  • 特点:使用互信息作为额外损失。
  • 优势:潜在空间具有解释性,有助于理解生成过程。

2.3.5 其他变体

此外还有许多其他的GAN变体,例如:

  • ProGAN:逐渐增加分辨率的方法来生成高分辨率图像。
  • BigGAN:大型生成对抗网络,适用于大规模数据集上的图像生成。

生成对抗网络的这些常见架构和变体展示了GAN在不同场景下的灵活性和强大能力。理解这些不同的架构可以帮助读者选择适当的模型来解决具体问题,也揭示了生成对抗网络研究的多样性和丰富性。


三、实战演示

3.1 环境准备和数据集

file

在进入GAN的实际编码和训练之前,我们首先需要准备适当的开发环境和数据集。这里的内容会涵盖所需库的安装、硬件要求、以及如何选择和处理适用于GAN训练的数据集。

3.1.1 环境要求

构建和训练GAN需要一些特定的软件库和硬件支持。

软件依赖

  • Python 3.x: 编写和运行代码的语言环境。
  • PyTorch: 用于构建和训练深度学习模型的库。
  • CUDA: 如果使用GPU训练,则需要安装。

代码示例:安装依赖

# 安装PyTorch
pip install torch torchvision

硬件要求

  • GPU: 推荐使用具有足够内存的NVIDIA GPU,以加速计算。

3.1.2 数据集选择与预处理

GAN可以用于多种类型的数据,例如图像、文本或声音。以下是数据集选择和预处理的一般指南:

数据集选择

  • 图像生成:常用的数据集包括CIFAR-10, MNIST, CelebA等。
  • 文本生成:可以使用WikiText, PTB等。

数据预处理

  • 规范化:将图像像素值缩放到特定范围,例如[-1, 1]。
  • 数据增强:旋转、裁剪等增强泛化能力。

代码示例:数据加载与预处理

# 使用PyTorch加载CIFAR-10数据集
from torchvision import datasets, transformstransform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,))
])train_dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)

小结

环境准备和数据集的选择与预处理是实施GAN项目的关键初始步骤。选择适当的软件、硬件和数据集,并对其进行适当的预处理,将为整个项目的成功奠定基础。读者应充分考虑这些方面,以确保项目从一开始就在可行和有效的基础上进行。

3.2 生成器构建

生成器是生成对抗网络中的核心部分,负责从潜在空间的随机噪声中生成与真实数据相似的样本。以下是更深入的探讨:
file

架构设计

生成器的设计需要深思熟虑,因为它决定了生成数据的质量和多样性。

全连接层

适用于较简单的数据集,如MNIST。

class SimpleGenerator(nn.Module):def __init__(self):super(SimpleGenerator, self).__init__()self.main = nn.Sequential(nn.Linear(100, 256),nn.ReLU(),nn.Linear(256, 512),nn.ReLU(),nn.Linear(512, 784),nn.Tanh())def forward(self, input):return self.main(input)

卷积层

适用于更复杂的图像数据生成,如DCGAN。

class ConvGenerator(nn.Module):def __init__(self):super(ConvGenerator, self).__init__()self.main = nn.Sequential(# 逆卷积层nn.ConvTranspose2d(100, 512, 4),nn.BatchNorm2d(512),nn.ReLU(),# ...)def forward(self, input):return self.main(input)

输入潜在空间

  • 维度选择:潜在空间的维度选择对于模型的生成能力有重要影响。
  • 分布选择:通常使用高斯分布或均匀分布。

激活函数和归一化

  • ReLU和LeakyReLU:常用在生成器的隐藏层。
  • Tanh:通常用于输出层,将像素值缩放到[-1, 1]。
  • 批归一化:帮助提高训练稳定性。

反卷积技巧

  • 逆卷积:用于上采样图像。
  • PixelShuffle:更高效的上采样方法。

与判别器的协调

  • 设计匹配:生成器和判别器的设计应相互协调。
  • 卷积层参数共享:有助于增强生成能力。

小结

生成器构建是一个复杂和细致的过程。通过深入了解生成器的各个组成部分和它们是如何协同工作的,我们可以设计出适应各种任务需求的高效生成器。不同类型的激活函数、归一化、潜在空间设计以及与判别器的协同工作等方面的选择和优化是提高生成器性能的关键。

3.3 判别器构建

生成对抗网络(GAN)的判别器是一个二分类模型,用于区分生成的数据和真实数据。以下是判别器构建的详细内容:

判别器的角色和挑战

  • 角色:区分真实数据和生成器生成的虚假数据。
  • 挑战:平衡生成器和判别器的能力。

架构设计

  • 卷积网络:常用于图像数据,效率较高。
  • 全连接网络:对于非图像数据,例如时间序列。

代码示例:卷积判别器

class ConvDiscriminator(nn.Module):def __init__(self):super(ConvDiscriminator, self).__init__()self.main = nn.Sequential(nn.Conv2d(3, 64, 4, stride=2, padding=1),nn.LeakyReLU(0.2),# ...nn.Sigmoid() # 二分类输出)def forward(self, input):return self.main(input)

激活函数和归一化

  • LeakyReLU:增加非线性,防止梯度消失。
  • Layer Normalization:训练稳定性。

损失函数设计

  • 二分类交叉熵损失:常用损失函数。
  • Wasserstein距离:WGAN中使用,理论基础坚实。

正则化和稳定化

  • 正则化:如L1、L2正则化防止过拟合。
  • Gradient Penalty:例如WGAN-GP中,增加训练稳定性。

特殊架构设计

  • PatchGAN:局部感受域的判别器。
  • 条件GAN:结合额外信息的判别器。

与生成器的协调

  • 协同训练:注意保持生成器和判别器训练的平衡。
  • 渐进增长:例如ProGAN中,逐步增加分辨率。

小结

判别器的设计和实现是复杂的多步过程。通过深入了解判别器的各个组件以及它们是如何协同工作的,我们可以设计出适应各种任务需求的强大判别器。判别器的架构选择、激活函数、损失设计、正则化方法,以及如何与生成器协同工作等方面的选择和优化,是提高判别器性能的关键因素。

3.4 损失函数和优化器

损失函数和优化器是训练生成对抗网络(GAN)的关键组件,它们共同决定了GAN的训练速度和稳定性。

损失函数

损失函数量化了GAN的生成器和判别器之间的竞争程度。

1. 原始GAN损失

  • 生成器损失:欺骗判别器。
  • 判别器损失:区分真实和虚假样本。
# 判别器损失
real_loss = F.binary_cross_entropy(D_real, ones_labels)
fake_loss = F.binary_cross_entropy(D_fake, zeros_labels)
discriminator_loss = real_loss + fake_loss# 生成器损失
generator_loss = F.binary_cross_entropy(D_fake, ones_labels)

2. Wasserstein GAN损失

  • 理论优势:更连续的梯度。
  • 训练稳定性:解决模式崩溃问题。

3. LSGAN(最小平方损失)

  • 减小梯度消失:在训练早期。

4. hinge损失

  • 鲁棒性:对噪声和异常值具有鲁棒性。

优化器

优化器负责根据损失函数的梯度更新模型的参数。

1. SGD

  • 基本但强大
  • 学习率调整:如学习率衰减。

2. Adam

  • 自适应学习率
  • 用于大多数情况:通常效果很好。

3. RMSProp

  • 适用于非平稳目标
  • 自适应学习率
# 示例
optimizer_G = optim.Adam(generator.parameters(), lr=0.0002, betas=(0.5, 0.999))
optimizer_D = optim.Adam(discriminator.parameters(), lr=0.0002, betas=(0.5, 0.999))

超参数选择

  • 学习率:重要的调整参数。
  • 动量参数:例如Adam中的beta。
  • 批大小:可能影响训练稳定性。

小结

损失函数和优化器在GAN的训练中起着核心作用。损失函数界定了生成器和判别器之间的竞争关系,而优化器则决定了如何根据损失函数的梯度来更新这些模型的参数。在设计损失函数和选择优化器时需要考虑许多因素,包括训练的稳定性、速度、鲁棒性等。理解各种损失函数和优化器的工作原理,可以帮助我们为特定任务选择合适的方法,更好地训练GAN。

3.5 模型训练

在生成对抗网络(GAN)的实现中,模型训练是最关键的阶段之一。本节详细探讨模型训练的各个方面,包括训练循环、收敛监控、调试技巧等。

训练循环

训练循环是GAN训练的心脏,其中包括了前向传播、损失计算、反向传播和参数更新。

代码示例:训练循环

for epoch in range(epochs):for real_data, _ in dataloader:# 更新判别器optimizer_D.zero_grad()real_loss = ...fake_loss = ...discriminator_loss = real_loss + fake_lossdiscriminator_loss.backward()optimizer_D.step()# 更新生成器optimizer_G.zero_grad()generator_loss = ...generator_loss.backward()optimizer_G.step()

训练稳定化

GAN训练可能非常不稳定,下面是一些常用的稳定化技术:

  • 梯度裁剪:防止梯度爆炸。
  • 使用特殊的损失函数:例如Wasserstein损失。
  • 渐进式训练:逐步增加模型的复杂性。

模型评估

GAN没有明确的损失函数来评估生成器的性能,因此通常需要使用一些启发式的评估方法:

  • 视觉检查:人工检查生成的样本。
  • 使用标准数据集:例如Inception Score。
  • 自定义度量标准:与应用场景相关的度量。

超参数调优

  • 网格搜索:系统地探索超参数空间。
  • 贝叶斯优化:更高效的搜索策略。

调试和可视化

  • 可视化损失曲线:了解训练过程的动态。
  • 检查梯度:例如使用梯度直方图。
  • 生成样本检查:实时观察生成样本的质量。

分布式训练

  • 数据并行:在多个GPU上并行处理数据。
  • 模型并行:将模型分布在多个GPU上。

小结

GAN的训练是一项复杂和微妙的任务,涉及许多不同的组件和阶段。通过深入了解训练循环的工作原理,学会使用各种稳定化技术,和掌握模型评估和超参数调优的方法,我们可以更有效地训练GAN模型。

3.6 结果分析和可视化

生成对抗网络(GAN)的训练结果分析和可视化是评估模型性能、解释模型行为以及调整模型参数的关键环节。本节详细讨论如何分析和可视化GAN模型的生成结果。
file

结果可视化

可视化是理解GAN的生成能力的直观方法。常见的可视化方法包括:

1. 生成样本展示

  • 随机样本:从随机噪声生成的样本。
  • 插值样本:展示样本之间的平滑过渡。

2. 特征空间可视化

  • t-SNE和PCA:用于降维的技术,可以揭示高维特征空间的结构。

3. 训练过程动态

  • 损失曲线:观察训练稳定性。
  • 样本质量随时间变化:揭示生成器的学习过程。

量化评估

虽然可视化直观,但量化评估提供了更准确的性能度量。常用的量化方法包括:

1. Inception Score (IS)

  • 多样性和一致性的平衡
  • 在标准数据集上评估

2. Fréchet Inception Distance (FID)

  • 比较真实和生成分布
  • 较低的FID表示更好的性能

模型解释

理解GAN如何工作以及每个部分的作用可以帮助改进模型:

  • 敏感性分析:如何输入噪声的变化影响输出。
  • 特征重要性:哪些特征最影响判别器的决策。

应用场景分析

  • 实际使用情况下的性能
  • 与现实世界任务的结合

持续监测和改进

  • 自动化测试:保持模型性能的持续监测。
  • 迭代改进:基于结果反馈持续优化模型。

小结

结果分析和可视化不仅是GAN工作流程的最后一步,还是一个持续的、反馈驱动的过程,有助于改善和优化整个系统。可视化和量化分析工具提供了深入了解GAN性能的方法,从直观的生成样本检查到复杂的量化度量。通过这些工具,我们可以评估模型的优点和缺点,并做出有针对性的调整。

四、总结

生成对抗网络(GAN)作为一种强大的生成模型,在许多领域都有广泛的应用。本文全面深入地探讨了GAN的不同方面,涵盖了理论基础、常见架构、实际实现和结果分析。以下是主要的总结点:
file

1. 理论基础

  • 工作原理:GAN通过一个生成器和一个判别器的博弈过程实现强大的生成能力。
  • 数学背景:深入了解了损失函数、优化方法和稳定化策略。
  • 架构与变体:讨论了不同的GAN结构和它们的适用场景。

2. 实战实现

  • 环境准备:提供了准备训练环境和数据集的指导。
  • 模型构建:详细解释了生成器和判别器的设计以及损失函数和优化器的选择。
  • 训练过程:深入讨论了训练稳定性、模型评估、超参数调优等关键问题。
  • 结果分析:强调了可视化、量化评估和持续改进的重要性。

3. 技术挑战与前景

  • 训练稳定性:GAN训练可能不稳定,需要深入理解和恰当选择稳定化技术。
  • 评估标准:缺乏统一的评估标准仍是一个挑战。
  • 多样性与真实性的平衡:如何在保持生成样本多样性的同时确保其真实性。
  • 实际应用:将GAN成功地应用于实际问题,仍需进一步研究和实践。

展望

GAN的研究和应用仍然是一个快速发展的领域。随着技术的不断进步和更多的实际应用,我们期望未来能够看到更多高质量的生成样本,更稳定的训练方法,以及更广泛的跨领域应用。GAN的理论和实践的深入融合将为人工智能和机器学习领域开辟新的可能性。

作者 TechLead,拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人

相关文章:

GAN!生成对抗网络GAN全维度介绍与实战

目录 一、引言1.1 生成对抗网络简介1.2 应用领域概览1.3 GAN的重要性 二、理论基础2.1 生成对抗网络的工作原理2.1.1 生成器生成过程 2.1.2 判别器判别过程 2.1.3 训练过程训练代码示例 2.1.4 平衡与收敛 2.2 数学背景2.2.1 损失函数生成器损失判别器损失 2.2.2 优化方法优化代…...

自动驾驶仿真:基于Carsim开发的加速度请求模型

文章目录 前言一、加速度输出变量问题澄清二、配置Carsim动力学模型三、配置Carsim驾驶员模型四、添加VS Command代码五、Run Control联合仿真六、加速度模型效果验证 前言 1、自动驾驶行业中,算法端对于纵向控制的功能预留接口基本都是加速度,我们需要…...

.netcore grpc客户端工厂及依赖注入使用

一、客户端工厂概述 gRPC 与 HttpClientFactory 的集成提供了一种创建 gRPC 客户端的集中方式。可以通过依赖包Grpc.Net.ClientFactory中的AddGrpcClient进行gRPC客户端依赖注入AddGrpcClient函数提供了许多配置项用于处理一些其他事项;例如AOP、重试策略等 二、案…...

C语言入门_Day7 逻辑运算

目录: 前言 1.逻辑运算 2.优先级 3.易错点 4.思维导图 前言 算术运算用来进行数据的计算和处理;比较运算是用来比较不同的数据,进而来决定下一步怎么做;除此以外还有一种运算叫做逻辑运算,它的应用场景也是用来影…...

什么是Eureka?以及Eureka注册服务的搭建

导包 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 htt…...

Docker安装并配置镜像加速器,镜像、容器的基本操作

目录 1.安装docker服务&#xff0c;配置镜像加速器 &#xff08;1&#xff09;安装依赖的软件包 &#xff08;2&#xff09;设置yum源&#xff0c;我配置的阿里仓库 &#xff08;3&#xff09;选择一个版本安装 &#xff08;4&#xff09;启动docker服务&#xff0c;并设置…...

前端 -- 基础 网页、HTML、 WEB标准 扫盲详解

什么是网页 : 网页是构成网站的基本元素&#xff0c;它通常由 图片、链接、文字、声音、视频等元素组成。 通常我们看到的网页 &#xff0c;常见以 .html 或 .htm 后缀结尾的文件&#xff0c; 因此俗称 HTML 文件 什么是 HTML : HTML 指的是 超文本标记语言&#xff0c…...

分布式锁实现方式

分布式锁 1 分布式锁介绍 1.1 什么是分布式 一个大型的系统往往被分为几个子系统来做&#xff0c;一个子系统可以部署在一台机器的多个 JVM(java虚拟机) 上&#xff0c;也可以部署在多台机器上。但是每一个系统不是独立的&#xff0c;不是完全独立的。需要相互通信&#xff…...

C语言小练习(一)

&#x1f31e; “人生是用来体验的&#xff0c;不是用来绎示完美的&#xff0c;接受迟钝和平庸&#xff0c;允许出错&#xff0c;允许自己偶尔断电&#xff0c;带着遗憾&#xff0c;拼命绽放&#xff0c;这是与自己达成和解的唯一办法。放下焦虑&#xff0c;和不完美的自己和解…...

Flask-flask系统运行后台轮询线程

对于有些flask系统&#xff0c;后台需要启动轮询线程&#xff0c;执行特定的任务&#xff0c;以下是一个简单的例子。 globals/daemon.py import threading from app.executor.ops_service import find_and_run_ops_task_todo_in_redisdef context_run_func(app, func):with …...

jsp本质-servlet

jsp本质-servlet 一、jsp文件 <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>JSP Example…...

回归预测 | MATLAB实现GWO-SVM灰狼优化算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GWO-SVM灰狼优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现GWO-SVM灰狼优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基…...

科技资讯|苹果Vision Pro新专利曝光:可调节液态透镜

苹果公司近日申请了名为“带液态镜头的电子设备”&#xff0c;概述了未来可能的头显设计。头显设备中的透镜采用可调节的液态透镜&#xff0c;每个透镜可以具有填充有液体的透镜腔&#xff0c;透镜室可以具有形成光学透镜表面的刚性和 / 或柔性壁。 包括苹果自家的 Vision Pr…...

神经网络基础-神经网络补充概念-38-归一化输入

概念 归一化输入是一种常见的数据预处理技术&#xff0c;旨在将不同特征的取值范围映射到相似的尺度&#xff0c;从而帮助优化机器学习模型的训练过程。归一化可以提高模型的收敛速度、稳定性和泛化能力&#xff0c;减少模型受到不同特征尺度影响的情况。 常见的归一化方法 …...

【Redis】什么是缓存雪崩,如何预防缓存雪崩?

【Redis】什么是缓存雪崩&#xff0c;如何预防缓存雪崩&#xff1f; 如果缓存集中在一段时间内失效&#xff0c;也就是通常所说的热点数据集中失效 &#xff08;一般都会给缓存设定一个失效时间&#xff0c;过了失效时间后&#xff0c;该数据库会被缓存直接删除&#xff0c;从…...

[国产MCU]-W801开发实例-开发环境搭建

W801开发环境搭建 文章目录 W801开发环境搭建1、W801芯片介绍2、W801芯片特性3、W801芯片结构4、开发环境搭建1、W801芯片介绍 W801芯片是联盛德微电子推出的一款高性价比物联网芯片。 W801 芯片是一款安全 IoT Wi-Fi/蓝牙 双模 SoC芯片。芯片提供丰富的数字功能接口。支持2.…...

区间预测 | MATLAB实现QRGRU门控循环单元分位数回归时间序列区间预测

区间预测 | MATLAB实现QRGRU门控循环单元分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRGRU门控循环单元分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRGRU门控循环单元分位数回归时间序列区间预测。基于分位…...

改善神经网络——优化算法(mini-batch、动量梯度下降法、Adam优化算法)

改善神经网络——优化算法 梯度下降Mini-batch 梯度下降&#xff08;Mini-batch Gradient Descent&#xff09;指数加权平均包含动量的梯度下降RMSprop算法Adam算法 优化算法可以使神经网络运行的更快&#xff0c;机器学习的应用是一个高度依赖经验的过程&#xff0c;伴随着大量…...

大数据面试题:Spark的任务执行流程

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 可回答&#xff1a;1&#xff09;Spark的工作流程&#xff1f;2&#xff09;Spark的调度流程&#xff1b;3&#xff09;Spark的任务调度原理&#xf…...

通过 Amazon SageMaker JumpStart 部署 Llama 2 快速构建专属 LLM 应用

来自 Meta 的 Llama 2 基础模型现已在 Amazon SageMaker JumpStart 中提供。我们可以通过使用 Amazon SageMaker JumpStart 快速部署 Llama 2 模型&#xff0c;并且结合开源 UI 工具 Gradio 打造专属 LLM 应用。 Llama 2 简介 Llama 2 是使用优化的 Transformer 架构的自回归语…...

ansible远程执行命令

一、ansible简介 需要在一台机器上搭建ansible环境&#xff0c;且配置目的ip的密码&#xff0c;通道没有问题即可下发命令 使用的通道是ssh&#xff08;端口&#xff1a;36000&#xff09; 二、搭建细节 1、安装ansible yum install -y ansible 2、把目的ip密码写到配置…...

Windows快速恢复丢失的颜色校准

场景 有时开机或启动某个软件后&#xff0c;颜色校准&#xff08;设置项&#xff1a;校准显示器颜色&#xff09;会丢失&#xff0c;每次重新设置很麻烦。 文章首发及后续更新&#xff1a;https://mwhls.top/4723.html&#xff0c;无图/无目录/格式错误/更多相关请至首发页查看…...

Vue安装单文件组件

安装 npm npm 全称为 Node Package Manager&#xff0c;是一个基于Node.js的包管理器&#xff0c;也是整个Node.js社区最流行、支持的第三方模块最多的包管理器。 npm -v由于网络原因 安装 cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org安装 vue-cli…...

小白的Node.js学习笔记大全---不定期更新

Node.js是什么 Node. js 是一个基于 Chrome v8 引擎的服务器端 JavaScript 运行环境Node. js 是一个事件驱动、非阻塞式I/O 的模型&#xff0c;轻量而又高效Node. js 的包管理器 npm 是全球最大的开源库生态系统 特性 单一线程 Node.js 沿用了 JavaScript 单一线程的执行特…...

第二周晨考自测(2.0)

1.冒泡排序 冒泡排序是数组解构中的常见排序算法之一。规则如下&#xff1a;先遍历数组&#xff0c;让相邻的两个数据进行比较&#xff0c;如果前一个比后一个大&#xff0c;那么就把这两个数据交换位置&#xff0c;经过一轮遍历之后&#xff0c;最大的那个数字就排在数组最后…...

计算机视觉之三维重建(三)(单视图测量)

2D变换 等距变换 旋转平移保留形状、面积通常描述刚性物体运动 相似变换 在等距变换的基础增加缩放特点 射影变换 共线性、四共线点的交比保持不变 仿射变换 面积比值、平行关系等不变仿射变换是特殊的射影变换 影消点与影消线 2D无穷远点 两直线的交点可由两直线的…...

docker 批量快速删除容器和镜像

一、批量删除镜像 如果你想要批量删除 Docker 镜像,可以使用各种命令。以下是一些示例: 1. 删除所有镜像: docker rmi $(docker images -q) 2. 删除所有未标记的镜像(即 <none> 镜像): docker rmi $(docker images -f "dangling=true" -q) 请注意…...

【数据分析入门】Matplotlib

目录 零、图形解析与工作流0.1 图形解析0.2 工作流 一、准备数据1.1 一维数据1.2 二维数据或图片 二、绘制图形2.1 画布2.2 坐标轴 三、绘图例程3.1 一维数据3.2 向量场3.3 数据分布3.4 二维数据或图片 四、自定义图形4.1 颜色、色条与色彩表4.2 标记4.3 线型4.4 文本与标注4.5…...

mongodb.使用自带命令工具导出导入数据

在一次数据更新中&#xff0c;同事把老数据进行了清空操作&#xff0c;但是新的逻辑数据由于某种原因&#xff08;好像是她的电脑中病毒了&#xff09;&#xff0c;一直无法正常连接数据库进行数据插入&#xff0c;然后下午2点左右要给甲方演示&#xff0c;所以要紧急恢复本地的…...

IndexError: tensors used as indices must be long, byte or bool tensors

运行出现报错。修改数据格式 输出sample_ids的值&#xff0c;可以看到数据类型是 torch.int32 解决 需要将sample_ids类型转为long&#xff0c;修改方式&#xff1a; idx idx.type(torch.long)或 idx self.tensor(idx, dtypetorch.long)参考&#xff1a; IndexError: tenso…...

设计模式 : 单例模式笔记

文章目录 一.单例模式二.单例模式的两种实现方式饿汉模式懒汉模式 一.单例模式 一个类只能创建一个对象,这样的类的设计模式就称为单例模式,该模式保证系统中该类只能有一个实例(并且父子进程共享),一个很典型的单例类就是CSTL的内存池C单例模式的基本设计思路: 私有化构造函数…...

深度优先搜索算法

目录 4.1 二叉树的最大深度&#xff08;简单&#xff09;&#xff1a;深度优先搜索 4.2 对称二叉树&#xff08;简单&#xff09;&#xff1a;递归 4.3 岛屿数量&#xff08;中等&#xff09;&#xff1a;深度优先搜索 4.4 岛屿的最大面积&#xff08;中等&#xff09;&…...

k8s ----POD控制器详解

目录 一&#xff1a;pod控制器 1、Pod控制器及其功用 2、pod控制器类型 3、Pod与控制器之间的关系 二&#xff1a;Deployment 三&#xff1a;SatefulSet 1、StatefulSet组成 2、为什么要有headless&#xff1f; 3、为什么要有volumeClaimTemplate&#xff1f; 4、实现…...

ReactNative进阶(三十四):ipa Archive 阶段报错error: Multiple commands produce问题修复及思考

文章目录 一、前言二、问题描述三、问题解决四、拓展阅读五、拓展阅读 一、前言 在应用RN开发跨平台APP阶段&#xff0c;从git中拉取项目&#xff0c;应用Jenkins进行组包时&#xff0c;发现最终生成的ipa安装包版本号始终与项目中设置的版本号不一致。 二、问题描述 经过仔…...

MySQL索引ES索引

MySQL MySQL索引的种类 按照索引列值的唯一性:索引可分为唯一索引和非唯一索引; 唯一索引:此索引的每一个索引值只对应唯一的数据记录,对于单列唯一性索引,这保证单列不包含重复的值。对于多列唯一性索引,保证多个值的组合不重复。主键索引是唯一索引的特定类型。该索引…...

webSocket 聊天室 node.js 版

全局安装vue脚手架 npm install vue/cli -g 创建 vue3 ts 脚手架 vue create vue3-chatroom 后端代码 src 同级目录下建 server: const express require(express); const app express(); const http require(http); const server http.createServer(app);const io req…...

iptables防火墙(SNAT与DNAT)

目录 1 SNAT 1.1 SNAT原理与应用 1.2 SNAT工作原理 1.3 SNAT转换前提条件 2 SNAT示例 ​编辑 2.1 网关服务器配置 2.1.1 网关服务器配置网卡 2.1.2 开启SNAT命令 2.2 内网服务器端配置 2.3 外网服务器端配置 2.4 网卡服务器端添加规则 2.5 SNAT 测试 3 DNAT 3.1 网卡…...

第 359 场 LeetCode 周赛题解

A 判别首字母缩略词 签到题… class Solution { public:bool isAcronym(vector<string> &words, string s) {string pf;for (auto &s: words)pf.push_back(s[0]);return pf s;} };B k-avoiding 数组的最小总和 贪心&#xff1a;从 1 1 1开始升序枚举&#xff0c…...

【开源项目】Stream-Query的入门使用和原理分析

前言 无意间发现了一个有趣的项目&#xff0c;Stream-Query。了解了一下其基本的功能&#xff0c;可以帮助开发者省去Mapper的编写。在开发中&#xff0c;我们会编写entity和mapper来完成业务代码&#xff0c;但是Stream-Query可以省去mapper&#xff0c;只写entity。 快速入…...

微信小程序picker组件的简单使用 单选

<picker mode"selector" range"{{classData}}" bindchange"bindClassChange" value"{{classIndex}}" range-key"className"><view class"picker">{{classData[classIndex].className || 请选择班级}}…...

python、numpy、pytorch中的浅拷贝和深拷贝

1、Python中的浅拷贝和深拷贝 import copya [1, 2, 3, 4, [11, 22, 33, [111, 222]]] b a c a.copy() d copy.deepcopy(a)print(before modify\r\n a\r\n, a, \r\n,b a\r\n, b, \r\n,c a.copy()\r\n, c, \r\n,d copy.deepcopy(a)\r\n, d, \r\n)before modify a [1, 2…...

EasyRecovery14数据恢复软件支持各类存储设备的数据恢复

EasyRecovery14数据恢复软件专业数据恢复软件支持电脑、相机、移动硬盘、U盘、SD卡、内存卡、光盘、本地电子邮件和 RAID 磁盘阵列等各类存储设备的数据恢复。 目前市面上有许多数据恢复软件&#xff0c;但褒贬不一&#xff0c;而且数据恢复软件又不是一款会被经常使用的软件&a…...

玩机搞机----面具模块的组成 制作模块

root面具相信很多玩家都不陌生。早期玩友大都使用第三方卡刷补丁来对系统进行各种修复和添加功能。目前面具补丁代替了这些操作。今天的帖子了解下面具各种模块的组成和几种普遍的代码组成。 Magisk中运行的每个单独的shell脚本都将在内部的BusyBox的shell中执行。对于与第三方…...

注册中心/配置管理 —— SpringCloud Consul

Consul 概述 Consul 是一个可以提供服务发现&#xff0c;健康检查&#xff0c;多数据中心&#xff0c;key/Value 存储的分布式服务框架&#xff0c;用于实现分布式系统的发现与配置。Cousul 使用 Go 语言实现&#xff0c;因此天然具有可移植性&#xff0c;安装包仅包含一个可执…...

Next.js 13 你需要了解的 8 件事

目录 React 服务器组件 &#xff08;RSC&#xff09;服务器组件默认开启在 Next.js 中客户端组件也在服务器上呈现&#xff01;组成客户端和服务器组件编译Next.js 13 渲染模式桶文件有点坏了库集成&#xff1a;WIP 仍在进行中Route groups 路由组总结 在本文中&#xff0c;我们…...

计数排序(Count Sort)算法详解

1. 算法简介 计数排序&#xff08;Count Sort&#xff09;是一种非比较排序算法&#xff0c;其核心思想是统计数组中每个元素出现的次数&#xff0c;然后根据统计结果将元素按照顺序放回原数组中。计数排序的时间复杂度为O(nk)&#xff0c;其中n是数组的长度&#xff0c;k是数…...

Linux驱动开发(Day3)

驱动点灯&#xff1a;...

使用Vscode调试shell脚本

在vcode中安装bash dug插件 在vcode中添加launch.json配置&#xff0c;默认就好 参考&#xff1a;http://www.rply.cn/news/73966.html 推荐插件&#xff1a; shellman(支持shell,智能提示) shellcheck(shell语法检查) shell-format(shell格式化)...

OpenAI Function calling

开篇 原文出处 最近 OpenAI 在 6 月 13 号发布了新 feature&#xff0c;主要针对模型进行了优化&#xff0c;提供了 function calling 的功能&#xff0c;该 feature 对于很多集成 OpenAI 的应用来说绝对是一个“神器”。 Prompt 的演进 如果初看 OpenAI 官网对function ca…...

【C语言】字符分类函数、字符转换函数、内存函数

前言 之前我们用两篇文章介绍了strlen、strcpy、stract、strcmp、strncpy、strncat、strncmp、strstr、strtok、streeror这些函数 第一篇文章strlen、strcpy、stract 第二篇文章strcmp、strncpy、strncat、strncmp 第三篇文章strstr、strtok、streeror 今天我们就来学习字…...