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 生成对抗网络简介

生成对抗网络(GAN)是深度学习的一种创新架构,由Ian Goodfellow等人于2014年首次提出。其基本思想是通过两个神经网络,即生成器(Generator)和判别器(Discriminator),相互竞争来学习数据分布。
- 生成器:负责从随机噪声中学习生成与真实数据相似的数据。
 - 判别器:尝试区分生成的数据和真实数据。
 
两者之间的竞争推动了模型的不断进化,使得生成的数据逐渐接近真实数据分布。
1.2 应用领域概览
GANs在许多领域都有广泛的应用,从艺术和娱乐到更复杂的科学研究。以下是一些主要的应用领域:
- 图像生成:如风格迁移、人脸生成等。
 - 数据增强:通过生成额外的样本来增强训练集。
 - 医学图像分析:例如通过GAN生成医学图像以辅助诊断。
 - 声音合成:利用GAN生成或修改语音信号。
 

 
 
1.3 GAN的重要性
GAN的提出不仅在学术界引起了广泛关注,也在工业界取得了实际应用。其重要性主要体现在以下几个方面:
- 数据分布学习:GAN提供了一种有效的方法来学习复杂的数据分布,无需任何明确的假设。
 - 多学科交叉:通过与其他领域的结合,GAN开启了许多新的研究方向和应用领域。
 - 创新能力:GAN的生成能力使其在设计、艺术和创造性任务中具有潜在的用途。
 
二、理论基础
2.1 生成对抗网络的工作原理
生成对抗网络(GAN)由两个核心部分组成:生成器(Generator)和判别器(Discriminator),它们共同工作以达到特定的目标。
 
2.1.1 生成器
生成器负责从一定的随机分布(如正态分布)中抽取随机噪声,并通过一系列的神经网络层将其映射到数据空间。其目标是生成与真实数据分布非常相似的样本,从而迷惑判别器。
生成过程
def generator(z):# 输入:随机噪声z# 输出:生成的样本# 使用多层神经网络结构生成样本# 示例代码,输出生成的样本return generated_sample
 
2.1.2 判别器
判别器则尝试区分由生成器生成的样本和真实的样本。判别器是一个二元分类器,其输入可以是真实数据样本或生成器生成的样本,输出是一个标量,表示样本是真实的概率。
判别过程
def discriminator(x):# 输入:样本x(可以是真实的或生成的)# 输出:样本为真实样本的概率# 使用多层神经网络结构判断样本真伪# 示例代码,输出样本为真实样本的概率return probability_real
 
2.1.3 训练过程
生成对抗网络的训练过程是一场两个网络之间的博弈,具体分为以下几个步骤:
- 训练判别器:固定生成器,使用真实数据和生成器生成的数据训练判别器。
 - 训练生成器:固定判别器,通过反向传播调整生成器的参数,使得判别器更难区分真实和生成的样本。
 
训练代码示例
# 训练判别器和生成器
# 示例代码,同时注释后增加指令的输出
 
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(深度卷积生成对抗网络)

 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 环境准备和数据集

在进入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 生成器构建
生成器是生成对抗网络中的核心部分,负责从潜在空间的随机噪声中生成与真实数据相似的样本。以下是更深入的探讨:
 
架构设计
生成器的设计需要深思熟虑,因为它决定了生成数据的质量和多样性。
全连接层
适用于较简单的数据集,如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模型的生成结果。
 
结果可视化
可视化是理解GAN的生成能力的直观方法。常见的可视化方法包括:
1. 生成样本展示
- 随机样本:从随机噪声生成的样本。
 - 插值样本:展示样本之间的平滑过渡。
 
2. 特征空间可视化
- t-SNE和PCA:用于降维的技术,可以揭示高维特征空间的结构。
 
3. 训练过程动态
- 损失曲线:观察训练稳定性。
 - 样本质量随时间变化:揭示生成器的学习过程。
 
量化评估
虽然可视化直观,但量化评估提供了更准确的性能度量。常用的量化方法包括:
1. Inception Score (IS)
- 多样性和一致性的平衡。
 - 在标准数据集上评估。
 
2. Fréchet Inception Distance (FID)
- 比较真实和生成分布。
 - 较低的FID表示更好的性能。
 
模型解释
理解GAN如何工作以及每个部分的作用可以帮助改进模型:
- 敏感性分析:如何输入噪声的变化影响输出。
 - 特征重要性:哪些特征最影响判别器的决策。
 
应用场景分析
- 实际使用情况下的性能。
 - 与现实世界任务的结合。
 
持续监测和改进
- 自动化测试:保持模型性能的持续监测。
 - 迭代改进:基于结果反馈持续优化模型。
 
小结
结果分析和可视化不仅是GAN工作流程的最后一步,还是一个持续的、反馈驱动的过程,有助于改善和优化整个系统。可视化和量化分析工具提供了深入了解GAN性能的方法,从直观的生成样本检查到复杂的量化度量。通过这些工具,我们可以评估模型的优点和缺点,并做出有针对性的调整。
四、总结
生成对抗网络(GAN)作为一种强大的生成模型,在许多领域都有广泛的应用。本文全面深入地探讨了GAN的不同方面,涵盖了理论基础、常见架构、实际实现和结果分析。以下是主要的总结点:
 
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服务,配置镜像加速器 (1)安装依赖的软件包 (2)设置yum源,我配置的阿里仓库 (3)选择一个版本安装 (4)启动docker服务,并设置…...
前端 -- 基础 网页、HTML、 WEB标准 扫盲详解
什么是网页 : 网页是构成网站的基本元素,它通常由 图片、链接、文字、声音、视频等元素组成。 通常我们看到的网页 ,常见以 .html 或 .htm 后缀结尾的文件, 因此俗称 HTML 文件 什么是 HTML : HTML 指的是 超文本标记语言,…...
分布式锁实现方式
分布式锁 1 分布式锁介绍 1.1 什么是分布式 一个大型的系统往往被分为几个子系统来做,一个子系统可以部署在一台机器的多个 JVM(java虚拟机) 上,也可以部署在多台机器上。但是每一个系统不是独立的,不是完全独立的。需要相互通信ÿ…...
C语言小练习(一)
🌞 “人生是用来体验的,不是用来绎示完美的,接受迟钝和平庸,允许出错,允许自己偶尔断电,带着遗憾,拼命绽放,这是与自己达成和解的唯一办法。放下焦虑,和不完美的自己和解…...
Flask-flask系统运行后台轮询线程
对于有些flask系统,后台需要启动轮询线程,执行特定的任务,以下是一个简单的例子。 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灰狼优化算法优化支持向量机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现GWO-SVM灰狼优化算法优化支持向量机多输入单输出回归预测(多指标,多图)效果一览基…...
科技资讯|苹果Vision Pro新专利曝光:可调节液态透镜
苹果公司近日申请了名为“带液态镜头的电子设备”,概述了未来可能的头显设计。头显设备中的透镜采用可调节的液态透镜,每个透镜可以具有填充有液体的透镜腔,透镜室可以具有形成光学透镜表面的刚性和 / 或柔性壁。 包括苹果自家的 Vision Pr…...
神经网络基础-神经网络补充概念-38-归一化输入
概念 归一化输入是一种常见的数据预处理技术,旨在将不同特征的取值范围映射到相似的尺度,从而帮助优化机器学习模型的训练过程。归一化可以提高模型的收敛速度、稳定性和泛化能力,减少模型受到不同特征尺度影响的情况。 常见的归一化方法 …...
【Redis】什么是缓存雪崩,如何预防缓存雪崩?
【Redis】什么是缓存雪崩,如何预防缓存雪崩? 如果缓存集中在一段时间内失效,也就是通常所说的热点数据集中失效 (一般都会给缓存设定一个失效时间,过了失效时间后,该数据库会被缓存直接删除,从…...
[国产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 梯度下降(Mini-batch Gradient Descent)指数加权平均包含动量的梯度下降RMSprop算法Adam算法 优化算法可以使神经网络运行的更快,机器学习的应用是一个高度依赖经验的过程,伴随着大量…...
大数据面试题:Spark的任务执行流程
面试题来源: 《大数据面试题 V4.0》 大数据面试题V3.0,523道题,679页,46w字 可回答:1)Spark的工作流程?2)Spark的调度流程;3)Spark的任务调度原理…...
通过 Amazon SageMaker JumpStart 部署 Llama 2 快速构建专属 LLM 应用
来自 Meta 的 Llama 2 基础模型现已在 Amazon SageMaker JumpStart 中提供。我们可以通过使用 Amazon SageMaker JumpStart 快速部署 Llama 2 模型,并且结合开源 UI 工具 Gradio 打造专属 LLM 应用。 Llama 2 简介 Llama 2 是使用优化的 Transformer 架构的自回归语…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
