大数据机器学习GAN:生成对抗网络GAN全维度介绍与实战

news2024/12/23 19:09:15

文章目录

  • 大数据机器学习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的研究者和实践者提供全面、深入和实用的指导。通过本文的理论解释和实际操作指南,读者能够掌握GAN的核心概念,理解其工作原理,学会设计和训练自己的GAN模型,并能够对结果进行有效的分析和评估。

一、引言

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 训练过程

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

  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 Adam

optimizer_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 nn

class 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, transforms

transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])
#使用 datasets.CIFAR10 加载 CIFAR-10 数据集
#root='./data' 指定数据集的存储根目录为当前目录下的 data 文件夹
#download=True 表示如果数据集不存在,则从互联网下载
#transform=transform 表示对加载的图像应用之前定义的转换管道。
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_loss
        discriminator_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的研究和应用仍然是一个快速发展的领域。随着技术的不断进步和更多的实际应用,我们期望未来能够看到更多高质量的生成样本,更稳定的训练方法,以及更广泛的跨领域应用。

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

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

相关文章

Python爬虫---selenium基本使用

为什么使用selenium? 使用urllib.request.urlopen()模拟浏览器有时候获取不到数据,所以使用selenium (1) selenium是一个用于web应用程序测试的工具 (2) selenium 测试直接运行在浏览器中,就像真正的用户在操作一样 (3) 支持通过各种driver (FirfoxDri…

工单系统搭建方案 低代码平台快速开发客服工单系统

随着企业数字化转型的加速,工单系统已成为企业运营管理的重要工具之一。通过工单系统,企业可以高效地管理任务、工作流程和业务流程。而低代码平台作为快速应用开发的方式,为企业搭建工单系统提供了更加便捷和灵活的解决方案。本文将介绍如何…

2012年第一届数学建模国际赛小美赛B题大规模灭绝尚未到来解题全过程文档及程序

2012年第一届数学建模国际赛小美赛 B题 大规模灭绝尚未到来 原题再现: 亚马逊是地球上现存最大的雨林,比地球上任何地方都有更多的野生动物。它位于南美洲大陆的北侧,共有9个国家:巴西、玻利维亚、厄瓜多尔、秘鲁、哥伦比亚、委…

让电脑变得更聪明——用python实现五子棋游戏

作为经典的棋类游戏,五子棋深受大众喜爱,但如果仅实现人与人的博弈,那程序很简单,如果要实现人机对战,教会计算机如何战胜人类,那就不是十分容易的事了。本文我们先从简单入手,完成五子棋游戏的…

C# OpenCvSharp读取rtsp流录制mp4可分段保存

软件界面: 测试环境: VS2019 .NET Framework 4.7.2 OpencvSharp4.8.0 输入RTSP流地址即可拉取RTSP流,支持抓拍和录制RTSP流视频,且支持支持按固定时间保存,比如我想5分钟保存一个视频,设置保存间隔为30…

英飞凌TC3xx之一起认识GTM系列(一)先来认识GTM架构

英飞凌TC3xx之一起认识GTM系列(一)先来认识GTM架构 1 先来认识GTM的通用架构2 概览2.1 架构的简要说明2.2 架构概述1 先来认识GTM的通用架构 GTM系统使用GTM全局时钟fGTM 运行(本文称为SYS_CLK)。 特点如下: GTM模块由两个主要部分组成: 由博世设计的GTM IP v3.1.5.1 …

leaflet学习笔记-leaflet-ajax获取数据(五)

前言 地图开发中都会用一些GeoJSON数据进行渲染,这是用就会需要加载GeoJSON数据,这时就可以使用leaflet-ajax进行数据的获取 数据准备 本文通过阿里云的地图选择器(DataV.GeoAtlas官网)可以找到云南省的GeoJSON数据&#xff0c…

Vue3 watch 的使用,如何监听一个对象中的属性值的变化 vue3 + ts + vite

Vue3 watch 的使用,如何监听一个对象中的属性值的变化 由 vue2 转到 vue3 ts vite 之后都不会写这些玩意了。搜了下,找到了答案: vue2 的 watch export default {watch: {$route.query.id(newValue){// 可以这样监听路由的变化},formUse…

漏洞分析|jeecg-boot 未授权SQL注入漏洞(CVE-2023-1454)

1.漏洞描述 JeecgBoot的代码生成器是一种可以帮助开发者快速构建企业级应用的工具,它可以通过一键生成前后端代码,无需写任何代码,让开发者更多关注业务逻辑。 jeecg-boot 3.5.0版本存在SQL注入漏洞,该漏洞源于文件 jmreport/qu…

华为鸿蒙运行Hello World

前言: 从11月中旬开始通过B站帝心接触鸿蒙,至今一个半月左右不到,从小白到入坑,再到看官网案例,分析案例,了解技术点,还需要理清思路,再写博客,在决定写 <Har…

七、HTML 文本格式化

一、HTML 文本格式化 加粗文本斜体文本电脑自动输出 这是 下标 和 上标 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>HTML文本格式化</title> </head><body><b>加粗文本</b><br>…

商用密码应用安全评估实施方案(50页PPT)

商用密码应用安全评估:简称密评&#xff0c;是指在采用商用密码技术、产品和服务集成建设的网络和信息系统中&#xff0c;对其密码应用的合规性、正确性和有效性进行评估的过程。这一评估过程是根据《中华人民共和国密码法》等相关法规和标准进行的。 合规性评估主要是检查密码…

Premiere Pro教程(全)

项目面板 素材箱 工具面板 轨道选择工具 波纹编辑工具 视频裁剪工具 时间轴面板 时间轴相关快捷键 素材编辑 源面板 插入 节目面板 基本声音 效果面板 效果快捷键 视频效果 视频过渡 全部面板 通用快捷键 效果控件 效果控件概述 码表 运动 不透明度 字幕组 字幕…

7+WGCNA+机器学习+泛癌生信思路,非肿瘤也能结合泛癌分析

今天给同学们分享一篇生信文章“Analysis and Experimental Validation of Rheumatoid Arthritis Innate Immunity Gene CYFIP2 and Pan-Cancer”&#xff0c;这篇文章发表在Front Immunol期刊上&#xff0c;影响因子为7.3。 结果解读&#xff1a; DEG筛选和数据预处理 数据在…

Vue3复习笔记

目录 挂载全局属性和方法 v-bind一次绑定多个值 v-bind用在样式中 Vue指令绑定值 Vue指令绑定属性 动态属性的约束 Dom更新时机 ”可写的“计算属性 v-if与v-for不建议同时使用 v-for遍历对象 数组变化检测 事件修饰符 v-model用在表单类标签上 v-model还可以绑定…

HTML5+CSS3④——选择器、复合选择器

目录 选择器 标签选择器 类选择器 id选择器 通配符选择器 复合选择器 后代选择器 子代选择器 并集选择器 交集选择器 选择器 标签选择器 类选择器 id选择器 通配符选择器 复合选择器 后代选择器 子代选择器 并集选择器 交集选择器

dns主从搭建测试

一、DNS的介绍 1、DNS&#xff1a;Domain Name System&#xff0c;域名系统。将主机名解析为IP地址的过程&#xff0c;完成从域名到主机识别ip地址之间的转换&#xff0c;如&#xff1a;www.baidu.com, 其中 www为主机名&#xff0c;baidu.com为域名。 2、DNS无论是走TCP,还是走…

Latex使用BibTeX添加参考文献,保持专有名词原格式,如全部大写方法

一、背景 当我们使用Latex写文章时&#xff0c;通常使用BibTeX的方式添加参考文献&#xff0c;这种方式非常方便&#xff0c;可以使用期刊定义好的参考文献格式。但有时&#xff0c;某篇参考文献题目中含有专有名词时&#xff0c;如DMPs&#xff0c;参考文献会自动将其转为小写…

密码学:一文读懂非对称密码体制

文章目录 前言非对称密码体制的保密通信模型私钥加密-公钥解密的保密通信模型公钥加密-私钥解密的保密通信模型 复合式的非对称密码系统散列函数数字签名数字签名满足的三个基本要求先加密还是先签名&#xff1f;数字签名成为公钥基础设施以及许多网络安全机制的基础什么是单向…

【数据结构】七、图

一、概念 图&#xff1a;记为G(V,E) 有向图&#xff1a;每条边都有方向 无向图&#xff1a;边无方向 完全图&#xff1a;每个顶点都与剩下的所有顶点相连 完全有向图有n(n-1)条边&#xff1b;完全无向图有n(n-1)/2条边 对于完全无向图&#xff0c;第一个节点与剩下n-1个节点…