【计算机视觉中的 GAN 】 - 生成学习简介(1)

news/2024/4/24 23:59:22/文章来源:https://blog.csdn.net/gongdiwudu/article/details/131990495

一、说明

        在阅读本文之前,强烈建议先阅读预备知识,否则缺乏必要的推理基础。本文是相同理论GAN原理的具体化范例,阅读后有两个好处:1 巩固了已经建立的GAN基本概念 2 对具体应用的过程和套路进行常识学习,这种练习题一般的项目,是需要反复几个才能成为行家。好了,我们出发吧!

预备知识:

计算机视觉中的 GAN - 生成学习简介 |人工智能之夏 (theaisummer.com)

【深度学习】生成对抗网络Generative Adversarial Nets_无水先生的博客-CSDN博客

二、GAN概念概述

        什么是生成式学习?什么是 GAN?我们为什么要使用它?与自动编码器有什么区别?GAN模型的基本训练算法是什么?我们如何让它学习有意义的表示?它在什么计算机视觉应用中有用?如何为她/他的问题设计一个?

        我们将解决所有这些问题以及很多问题!在本评论系列文章中,我们将重点介绍用于计算机视觉应用的大量 GAN。具体来说,我们将慢慢建立导致生成对抗网络(GAN)发展的想法和原则。我们将遇到不同的任务,例如条件图像生成,3D对象生成,视频合成。

        让我们从回顾第一部分的内容开始!

        通常,数据生成方法存在于从计算机视觉到自然语言处理的各种现代深度学习应用程序中。在这一点上,我们能够通过人眼产生几乎无法区分的生成数据。生成学习大致可分为两大类:

  • a)变分自动编码器(VAE)
  • b)生成对抗网络(GAN)。

2.1 为什么不只是自动编码器?

        很多人仍然想知道为什么研究人员让GANs变得如此困难。为什么不直接使用自动编码器并最小化均方误差,使目标图像与预测图像匹配?原因是这些模型产生的结果很差(对于图像生成)。实际上,由于平均,仅最小化距离会产生模糊的预测。请记住,L1 或 L2 损失是标量,它是所有像素的平均数量。直观地说,这是一个类似于应用平滑过滤器的概念,该滤镜根据平均值对像素值求平均值。其次,不可能以这种方式产生多样性(如变分自动编码器)。这就是为什么研究界的注意力采用了GAN模型。请记住,这不是比较,而是GAN方法的区别。

        那么,让我们从头开始:对抗式学习到底是什么

2.2 什么是对抗式学习?

        我们已经通过实验验证,深度学习模型极易受到攻击,这些攻击基于测试时对模型输入的微小修改。假设您有一个经过训练的分类器,该分类器可以使用正确的标签正确识别图像中的对象。

        可以构建一个对抗性示例,这是一个视觉上无法区分的图像。这些对抗图像可以通过噪声扰动来构建。但是,图像分类不正确。为了解决这个问题,一种常见的方法是将对抗性示例注入训练集(对抗性训练)。因此,可以提高神经网络的鲁棒性。这种类型的示例可以通过添加噪声、应用数据增强技术或沿与梯度相反的方向扰动图像(以最大化损失而不是最小化损失)来生成。尽管如此,这些类型的技术还是有点手工制作的,所以总会有不同的扰动可以用来欺骗我们的分类器。现在让我们反过来想!

        如果我们对拥有一个健壮的分类器不感兴趣,而是对替换对抗性示例的手工制作过程感兴趣,该怎么办?通过这种方式,我们可以让网络创建视觉上吸引人的不同示例。所以,这正是生成术语发挥作用的地方。我们专注于生成数据集的代表性示例,而不是使网络对扰动更健壮!让我们使用另一个网络为我们完成这项工作。您如何调用生成类似于训练示例的现实示例的网络?当然是发电机!

三、香草 GAN(生成对抗网络 2014)

3.1 生成机

        由于生成器只是一个神经网络,我们需要为它提供一个输入并决定输出是什么。在最简单的形式中,输入是从小范围的实数分布中采样的随机噪声。这就是我们所说的潜在空间或连续空间。但是,由于我使用“随机”一词,这意味着每次从随机分布中采样时,我都会得到不同的向量样本。这就是随机性的意义所在。这样的输入将为我们提供非确定性的输出。因此,我们可以生成的样本数量没有限制!随机性也是您在与生成对抗学习(GAN)相关的论文中看到期望值符号的原因。输出将是用于生成图像的生成图像或我们想要生成的内容。主要区别在于,现在我们专注于生成特定分布的代表性示例(即狗、绘画、街道图片、飞机等)。

3.2 鉴别器

        鉴别器只不过是分类器。但是,我们不是在正确的类中对图像进行分类,而是专注于学习类的分布(假设生成建筑物图像)。因此,由于所需类是已知的,我们希望分类器量化该类对实际类分布的代表性。这就是为什么鉴别器输出单个概率的原因,其中 0 对应于虚假生成的图像,1 对应于我们分布中的真实样本。

        理想的发生器会产生无法区分的示例,这意味着输出为 0.5。在博弈论方面,这个对手被称为2人最小最大游戏。在博弈论中,最小-最大博弈或纳什均衡是涉及两个玩家的非合作博弈的数学表示,其中假设每个玩家都知道另一个玩家的均衡策略,并且没有玩家通过改变自己的策略而获得任何好处。

        生成器 G 试图生成接近真实分布的假示例,以欺骗鉴别器 D,而 D 试图确定分布的起源。规则GAN的核心思想是基于通过D的“间接”训练,该训练也在动态更新。

3.3 生成对抗训练方案

        基于上述原则,第一个GAN于2014年推出。了解生成式学习的训练过程很重要。一个关键的见解是间接训练:这基本上意味着生成器的训练不是为了最小化到特定图像的距离,而只是为了欺骗鉴别器!这使模型能够以无监督的方式学习。最后,请注意,训练生成器时的基本事实在输出中为 1(如真实图像),即使示例是假的。发生这种情况是因为我们的目标只是愚弄D。下图说明了此过程:

发电机
生成器训练方案的图解

        另一方面,判别器使用真实图像和生成的图像来区分它们,将真实图像的预测推到1(真实),将生成图像的预测推到0(假)。在此阶段,请注意生成器未经过训练

鉴别器
鉴别器训练方案示意图

        GAN的作者提出了一种由G和D的4个全连接层组成的架构。当然,G 输出图像的一维向量,D 输出 (1,0) 范围内的标量。

3.4 GAN培训计划在行动

        代表性赋予我们控制思想的权力。在看到代码之前了解数学是很好的。因此,给定鉴别器 D、生成器 G、vale 函数 V,基本的双人最小值游戏可以定义为(M 是样本):

在实践中,回想一下期望值的离散定义,它看起来像这样:

         事实上,鉴别器执行梯度上升,而生成器执行梯度下降。这可以通过检查上述方程的生成器部分的差异来观察到。请注意,D 需要访问真实和虚假数据,而 G 无法访问真实图像。让我们看看这个美丽而惊人的想法在真正的python代码中实践:

import torchdef ones_target(size):'''For real data when training D, while for fake data when training GTensor containing ones, with shape = size'''return torch.ones(size, 1)def zeros_target(size):'''For data when training DTensor containing zeros, with shape = size'''return torch.zeros(size, 1)def train_discriminator(discriminator, optimizer, real_data, fake_data, loss):N = real_data.size(0)# Reset gradientsoptimizer.zero_grad()# Train on Real Dataprediction_real = discriminator(real_data)# Calculate error and backpropagatetarget_real = ones_target(N)error_real = loss(prediction_real, target_real)error_real.backward()# Train on Fake Dataprediction_fake = discriminator(fake_data)# Calculate error and backpropagatetarget_fake = zeros_target(N)error_fake = loss(prediction_fake, target_fake)error_fake.backward()# Update weights with gradientsoptimizer.step()return error_real + error_fake, prediction_real, prediction_fakedef train_generator(discriminator, optimizer, fake_data, loss):N = fake_data.size(0)# Reset the gradientsoptimizer.zero_grad()# Sample noise and generate fake dataprediction = discriminator(fake_data)# Calculate error and backpropagatetarget = ones_target(N)error = loss(prediction, target)error.backward()optimizer.step()return error

甘尼斯特
在 Mnist 中生成的香草 GAN 图像

3.5 GAN 中的模式折叠

        一般来说,GAN容易出现所谓的模式崩溃问题。后者通常是指无法充分表示所有可能输出的像素空间的生成器。相反,G只选择几个与噪声图像相对应的有限影响模式。通过这种方式,D能够区分真假,并且G的损失变得非常不稳定(由于梯度爆炸)。我们将在我们的系列中多次重温模式崩溃,因此掌握基本原理至关重要。

        基本上,G 卡在一个参数设置中,它总是发出相同的点。发生崩溃后,鉴别器了解到这个单点来自发生器,但梯度下降无法分离相同的输出。结果,D的梯度将生成器产生的单个点永远推到空间周围。

        模式崩溃可能会以相反的方式发生:如果在训练鉴别器时卡在局部最小值并且他无法找到最佳策略,那么生成器很容易欺骗当前的鉴别器(在几次迭代中)。

        最后,我会用简单的术语来解释模式崩溃:2 人游戏的状态,其中一名玩家获得了几乎不可逆转的优势,这使得很难输掉游戏。

四、条件 GAN(条件生成对抗网络 2014)

      条件概率是给定另一个事件发生的概率的度量。在这项工作中,介绍了GAN的条件版本。基本上,条件信息可以通过简单地输入任何“额外”数据来利用,例如图像标签/标签等。通过根据辅助信息调节模型,可以指导数据生成过程。

        根据生成任务,可以通过将信息输入 D 和 G 作为通过级联的额外输入来执行条件反射。在诸如医学图像生成等其他领域中,条件可能是人口统计信息(即年龄,身高)或语义分割。

有条件的氮化镓

从cGAN论文中获取的GAN调节的视觉表示

五、DCGAN(使用深度卷积生成对抗网络的无监督表示学习 2015)

        DCGAN是第一个卷积GAN。深度卷积生成对抗网络(DCGAN)是GAN的拓扑约束变体。为了减少每层的参数数量,以及使训练更快、更稳定,引入了以下原则:

  1. 将任何池化层替换为 D 中的跨步卷积。这是合理的,因为池化是固定操作。相比之下,跨步卷积也可以看作是学习池化操作,这增加了模型的表现能力。缺点是它还增加了可训练参数的数量。

  2. 在 G 中使用转置卷积。由于采样噪声是一维向量,因此通常将其投影并重塑为具有大量特征图的小二维网格(即1x2)。这就是为什么G使用转置卷积来增加空间维度(通常将它们加倍)并减少特征图的数量。

  3. 在 G 和 D 中使用批量归一化。批量归一化可根据层中每个批次的统计数据稳定训练并启用具有更高学习率的训练。

  4. 删除完全连接的隐藏层以获得更深的架构,以减少训练参数的数量和训练时间。

  5. 在 G 中对所有图层使用 ReLU 激活,但输出除外,输出在图像范围内生成值 [-1,1]

  6. 在所有层的鉴别器中使用 LeakyReLU 激活。这两个激活函数都是非线性的,使模型能够学习更复杂的表示。

  7. D 的特征映射比比较方法(K 均值)少。一般来说,对于 G 和 D,不清楚哪个模型应该更复杂,因为它与任务相关。在这项工作中,G 比 D 具有更多的可训练参数。但是,这种设计选择背后没有理论依据。

无条件甘

DCGAN的无条件生成器

结果和讨论

让我们观察 MNIST 数据集中 DCGAN 模型的输出,给定一个简单的实现

DCGAN-MNIST

使用 DCGAN 提高图像质量

使用卷积模块,输出数字更清晰,包含的噪声更少。如果你想在实践中观察模式崩溃,你可以尝试在CIFAR-10中训练DCGAN,只使用一个类:

DCGAN-CIFAR

在CIFAR10中观测DCGAN中的模式崩溃,使用一个类

基本上,你从噪音开始。然后,您有一个公平的表示,它开始看起来像所需的图像。然后轰!生成器从字面上折叠它是重复的方形图案。发生了什么事?模式崩溃!.

总而言之,DCGAN是大多数下一个架构所基于的标准卷积基线。与标准GAN相比,它在视觉质量(模糊度较小)和训练稳定性方面都显示出很大的改进。然而,正如我们将看到的,对于像CIFAR-10的无条件图像生成这样的大尺度,它有很大的空间来创造伟大的工程魔法。最后,让我们看一下在整个 CIFAR-10 数据集中用所有类训练 DCGAN 的结果。

DCGAN-CIFAR10

DCGAN在CIFAR10

很公平,对吧?

六、Info GAN:通过信息最大化生成对抗网络进行表征学习(2016)

我们已经讨论过 cGAN 的条件变量,通常是类标签或标签。但是,有两个问题没有答案:

a)与噪声相比,有多少信息被传递到生成过程中,以及

b)位于潜在空间中的完全无监督条件可以帮助我们在发电机空间中“行走”吗?

这项工作通过解开的表征和相互信息来解决这些问题。

6.1 解开的表示

        解缠表示是一种无监督学习技术,它将每个特征分解(解缠)为狭义定义的变量,并将它们编码为单独的维度。如原始Info GAN论文中所述,解开表示对于需要了解数据重要属性(面部识别,对象识别)的自然任务很有用。就我个人而言,我喜欢将解开表示视为数据较低维度的解码信息。因此,有人认为一个好的生成模型会自动学习解开的表示。

        动机是合成观察到的数据的能力具有某种形式的理解。基本上,我们希望模型能够发现独立和关键的无监督表示。这是通过引入一些独立的连续/分类变量来实现的。问题是,是什么让这些条件变量(通常称为潜在代码)与GAN中的现有输入噪声不同?相互信息最大化!

 

6.2 GAN中的互信息

        在通用GAN中,生成器可以自由忽略额外的潜在条件变量。这可以通过找到满足以下条件的解决方案来实现:P(x|c) = P(x)。为了解决琐碎代码的问题,提出了一种信息论正则化。更具体地说,潜在代码c和生成器分布G(z,c)之间应该有高度的互信息。

        两个随机变量(条件和输出)的互信息 (MI) 是它们之间相互依赖性的定量度量。从字面上看,它通过观察生成器的输出来量化获得的有关条件变量的“信息量”。因此,如果 I 是给定生成器输出的代码信息量,则I(c |G(z, c))应该很高MI有一个直观的解释:它是在观察条件随机变量时减少生成的输出中的不确定性。

因此,我们希望P(c|x)要高(小熵)。这意味着给定观察到的生成的图像x,我们很有可能观察到该条件。换句话说,潜在变量c中的信息不应该在生成过程中丢失。接下来的问题自己出现了,我们如何估计条件分布P(c|x)?让我们训练一个神经网络来模拟所需的分布!

6.3 实现条件互信息

        由于添加另一个网络来模拟此概率会增加复杂性,因此作者建议通过添加输出此概率的附加层,使用现有的鉴别器对其进行建模。因此,D还有另一个需要学习的目标:最大化互信息!这个额外的目标就是它在标题中被称为互信息正则化(类似于权重衰减)的原因。

        因此,给定Q具有D层加上额外分类层的模型,可以定义添加到GAN目标中的辅助损失L_I(G,Q)。最后,我们对GAN的训练过程没有变化,几乎没有额外的开销(计算上没有额外的目标)。这就是 InfoGan 如此绝妙的想法!

6.4 结果

        改变连续条件变量,说明我们可以使用低维解缠表示在图像的高维空间中导航。实际上,观察到表征学习会导致有意义的表征,例如旋转和厚度。代码可以在这里找到。

信息甘结果

旋转和厚度的无监督建模,InfoGAN

“值得注意的是,在潜在变量中,生成器不会简单地拉伸或旋转数字,而是调整其他细节,如厚度或笔触样式,以确保生成的图像看起来很自然。” ~ 信息甘

七、改进的 GAN 训练技术 (2016)

        这是一项伟大的实验工作,总结了可用于自身问题的训练技巧,以稳定 GAN 中的训练。由于GAN训练包括寻找两个玩家的纳什均衡梯度下降,因此对于许多任务(游戏)可能无法收敛。基本上,纳什均衡是一个没有一个球员可以通过改变其权重来提高的点。主要原因是成本函数通常是非凸的,参数是连续的。最后,参数空间是极高维的。

        为了更好地理解这一点,请考虑预测分辨率为128x128(16384像素)的图像的任务就像试图在R16384的复杂世界中寻找路径一样。高维路径称为流形,基本上是满足我们目标的生成图像的集合。如果我们的目标是学习人脸,那么我们的目标是找到世界上代表人脸的一小部分。在这条路径中移动就是在表示人脸的向量解决方案内移动。我強烈推薦英伟達的這個視頻。这项工作的代码可以在这里找到。现在,让我们开始训练魔法吧!

7.1 功能匹配

        基本上,生成器被训练为匹配鉴别器中间层上特征的期望值。新目标要求生成器生成与真实数据的统计信息(中间表示)匹配的数据。通过以这种方式训练鉴别器,我们要求D找到那些对真实数据与当前模型生成的数据最具区别的特征。到目前为止的经验结果表明,特征匹配在常规GAN变得不稳定的情况下确实有效。为了测量距离,采用了L2范数。

7.2 小批量歧视

        理念:小批量判别使我们能够非常快速地生成具有视觉吸引力的样品。

        动机:由于鉴别器独立处理每个示例,因此其梯度之间没有协调,因此没有机制来告诉生成器的输出彼此更加不同。

小批量区分
小批量区分的工作原理。

        解决方案:允许鉴别器组合查看多个数据示例,并执行我们所说的小批量判别。如上图所示,中间特征向量乘以 3D 张量,得到由 M1 表示的矩阵序列。基于矩阵,最终目标是量化每个数据对的成对相似性的度量。直观地说,现在每个样本都会有额外的信息o(xi),表示与其他数据样本相比的相似性。

        事实上,它们将小批量层的输出相似度 o(xi) 与其输入的中间特征 f(xi) 连接起来。然后,结果被输入到鉴别器的下一层。因此,鉴别器的任务仍然有效地将单个示例分类为真实数据或生成数据,但它现在能够使用小批量中的其他示例作为辅助信息。然而,这种方法的计算复杂度巨大,因为它需要所有样本之间的成对相似性。

7.3 历史平均体重

        参数的历史平均值可以在线更新,因此此学习规则可以很好地扩展到较长的时间序列。它对于梯度下降可能失败的低维问题非常有用。如果你曾经看过动量是如何工作的,它的工作原理是相同的,只是它只解释了之前的梯度。历史权重平均大致相同,但过去有多个时间步长。

7.4 单侧标签平滑和虚拟批次归一化

        仅在正标签(真实数据样本)中将标签平滑化为α(而不是 0)。这里不多说。与标准批次规范化相反,在虚拟批次归一化中,每个示例 x 都基于在参考批次示例上收集的统计信息进行规范化。动机是批量规范化导致输入示例 x 的神经网络输出高度依赖于同一小批量的其他输入。为了应对这种情况,选择一次参考批次的示例,并在训练期间保持固定。但是,引用批处理仅使用其自己的统计信息进行规范化,因此计算成本很高。

7.5 初始分数:评估图像质量

        该文没有逐一检查视觉质量,而是提出了一种新的定量方法来评估模型。这可以简单地描述为两步方法:首先,使用预先训练的分类器(InceptionNet)推断生成图像的标签(条件概率)。然后,测量分类器的KL散度与无条件概率的比较。为此,我们不需要志愿者来评估我们的模型,我们可以量化模型的分数。

7.6 半监督学习

        可以使用任何标准分类器进行半监督学习,只需将来自 GAN 生成器 G 的样本添加到我们的数据集中,用新的“生成”类标记它们,或者没有额外的类,因为预训练分类器以低熵(高概率,即人类 97/100)识别标签(条件概率)。

7.7 结果和讨论

小批量结果

摘自原始出版物

基于所提出的技术,GANs首次能够学习可区分的特征。图示的动物特征包括眼睛和鼻子。然而,这些特征并没有正确地组合成具有真实解剖结构的动物。尽管如此,这是朝着GAN发展迈出的一大步。总而言之,这项基础工作的结果是:

基于特征匹配的思想,可以生成人类认可的全局统计数据。发生这种情况是因为人类视觉系统对图像统计数据有很强的适应性,可以帮助推断图像所代表的类别,而它可能对对图像解释不太重要的局部统计数据不太敏感。但是,我们将在下一篇文章中看到,更好的模型尝试使用不同的技术来学习它们。

此外,通过让鉴别器D对图像中显示的对象进行分类,作者试图偏置D,从而开发内部表示。后者强调与人类强调的相同特征。这种效应可以理解为迁移学习的一种方法,并且可以更广泛地应用。

八、结论

        在本文中,我们以生成学习的思想为基础。我们引入了对抗学习和GAN训练方案的概念。然后,我们讨论了模态崩溃、条件生成和基于互信息的解缠表示。基于观察到的训练问题,我们介绍了训练GAN的基本技巧。最后,我们在训练网络和实际观察到的模式崩溃时看到了一些结果。有关最近发布的具有多个 GAN 以进行大量实验的出色存储库,请访问此存储库。

如果您想要一门全新的 GAN 课程,我们强烈推荐 Coursera 专业化。如果您想建立自动编码器的背景,我们还建议以下Udemy课程。

        到现在为止,您开始意识到我们声称只是第一部分,是大多数教程声称的完整GAN指南。但是,我谦虚地请您考虑检查该系列的其余部分,还有更多有趣的东西。每天一篇 GAN 文章就足够了!

        在下一篇文章中,我们将看到更高级的架构和训练技巧,这些技巧导致了更高分辨率的图像和 3D 对象生成。

}

九、引用

  1. Goodfellow, I., Pouget-Abadie, J., Mirza, M., Xu, B., Warde-Farley, D., Ozair, S., ...和Bengio, Y. (2014).生成对抗网络。神经信息处理系统进展(第2672-2680页)。
  2. Mirza, M., & Osindero, S. (2014).条件生成对抗网络。arXiv预印本arXiv:1411.1784。 Radford, A., Metz, L., & Chintala, S. (2015).使用深度卷积生成对抗网络的无监督表示学习。arXiv预印本arXiv:1511.06434。
  3. Chen, X., Duan, Y., Houthooft, R., Schulman, J., Sutskever, I., & Abbeel, P. (2016).Infogan:通过信息最大化生成对抗网络进行可解释的表示学习。神经信息处理系统进展(第2172-2180页)。
  4. Salimans,T.,Goodfellow,I.,Zaremba,W.,Cheung,V.,Radford,A.和Chen,X.(2016)。改进了训练甘斯的技术。神经信息处理系统进展(第2234-2242页)。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ概论

目录 前言: 1.概述 2.下载安装、集群搭建 3.消息模型 4.如何保证吞吐量 4.1.消息存储 4.1.1顺序读写 4.1.2.异步刷盘 4.1.3.零拷贝 4.2.网络传输 前言: RocketMQ的代码示例在安装目录下有全套详细demo,所以本文不侧重于讲API这种死…

四种刷题模式的爱刷题无后端无数据库刷题应用网站H5源码

四种刷题模式的爱刷题无后端无数据库刷题应用网站H5源码。提供了简单轻量化的部署方式和详细的四种刷题模式教程。该应用使用JSON作为题库的存储方式,层次清晰、结构简单易懂。 配套的word模板和模板到JSON转换工具可供使用,方便将题库从word格式转换为…

抖音seo短视频账号矩阵系统技术开发简述

说明:本开发文档适用于抖音seo源码开发,抖音矩阵系统开发,短视频seo源码开发,短视频矩阵系统源码开发 一、 抖音seo短视频矩阵系统开发包括 抖音seo短视频账号矩阵系统的技术开发主要包括以下几个方面: 1.前端界面设…

SpringBoot的三层架构以及IOCDI

目录 一、IOC&DI入门 二、三层架构 数据库访问层 业务逻辑层 控制层 一、IOC&DI入门 在软件开发中,IOC(Inversion of Control)和DI(Dependency Injection)是密切相关的概念。 IOC(控制反转&a…

【每日一题】141. 环形链表

【每日一题】141. 环形链表 【每日一题】141. 环形链表题目描述解题思路 【每日一题】141. 环形链表 题目描述 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环…

37 coredump 的生成和使用

前言 呵呵 coredump 之前对于我而言也是一个挺陌生的概念 但是 只从开始了 linux 的相关学习之后, 对于这个 概念也有了一些 理解 呵呵 这里 以一些 简单的例子 来看一下 coredump 的生成和使用 首先执行 "ulimit -c unlimited" 测试用例1 - 除数为 0 root…

【TypeScript】TS入门级基础学习(一)

【TypeScript】TS入门级基础学习(一) 一、前言 TypeScript 是一种用于应用程序规模的 JavaScript 语言。 TypeScript 向 JavaScript 添加了可选类型,支持用于任何浏览器、任何主机、任何操作系统的大规模 JavaScript 应用程序的工具。 Type…

Spark(37):Streaming DataFrame 和 Streaming DataSet 创建

目录 0. 相关文章链接 1. 概述 2. socket source 3. file source 3.1. 读取普通文件夹内的文件 3.2. 读取自动分区的文件夹内的文件 4. kafka source 4.1. 导入依赖 4.2. 以 Streaming 模式创建 Kafka 工作流 4.3. 通过 Batch 模式创建 Kafka 工作流 5. Rate Source…

2023牛客暑期多校-J-Qu‘est-ce Que C‘est?(DP)

题意: 给定长度为n的数列,要求每个数都在的范围,且任意长度大于等于2的区间和都大于等于0,问方案数。。 思路: 首先要看出是dp题,用来表示遍历到第i位且后缀和最小为x的可行方案数(此时的后缀可以只有最…

Java 版 spring cloud +spring boot 工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单

工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…

linux下nginx的安装和使用

文章目录 📒安装nginx正常使用nginx包安装1️⃣上传到对应目录2️⃣解压nginx3️⃣检查是否启动成功 使用docker安装nginx 📒使用nginx1️⃣简单的反向代理2️⃣介绍location配置中root和alias的区别 📒安装nginx 正常使用nginx包安装 官网…

BLE基础理论/Android BLE开发示例

参考:https://blog.csdn.net/qq_36075612/article/details/127739150?spm1001.2014.3001.5502 参考: https://blog.csdn.net/qq_36075612/article/details/122772966?spm1001.2014.3001.5502 目录 蓝牙的分类传统蓝牙低功耗蓝牙 蓝牙专业词汇&#xff…

SpringAOP的相关概念

文章目录 一.什么是AOP二.AOP的组成部分三.SpringAOP的实现3.1 增加SpringAOP依赖3.2 创建切面3.2 创建切点3.3 创建通知3.4 创建连接点 四.SpringAOP的实现原理4.1 JDK动态代理4.2 CGLIB 动态代理总结 一.什么是AOP AOP,全称为Aspect-Oriented Programming&#x…

解决 tensorflow 出现的 ImportError: Could not find the DLL(s) ‘msvcp140_1.dll‘. 问题

在安装完tensorflow库后出现 问题详述: ImportError: Could not find the DLL(s) msvcp140_1.dll. TensorFlow requires that these DLLs be installed in a directory that is named in your %PATH% environment variable. You may install these DLLs by downlo…

新零售行业如何做会员管理和会员营销

蚓链数字化营销系统全渠道会员管理解决方案,线上线下统一管理,打造私域流量,微信、门店会员全渠道管理,打通私域流量池,实现裂变营销: 开启新零售之路,必然要摒弃原有的管理模式,大…

郑州多域名https证书

多域名https证书是https证书中比较特殊的一款,它保护的域名记录是众多https证书中最灵活的。不管是DV基础型的多域名https证书还是OV企业型和EV增强型的多域名https证书既可以保护多个主域名或者子域名,还可以主域名子域名随意组合,只要申请者…

【动态规划part11】| 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

目录 🎈LeetCode123.买卖股票的最佳时机III 🎈LeetCode188.买卖股票的最佳时机IV 🎈LeetCode123.买卖股票的最佳时机III 链接:123.买卖股票的最佳时机III 给定一个数组,它的第 i 个元素是一支给定的股票在第 i…

无涯教程-jQuery - Pulsate方法函数

Pulsate 效果可以与effect()方法一起使用。这会使元素的不透明性产生多次脉冲。 Pulsate - 语法 selector.effect( "pulsate", {arguments}, speed ); 这是所有参数的描述- times - 脉动的时间。默认值为3。model - 效果的模式。可以是"显示(show)"&a…

基于Java+SpringBoot+vue前后端分离技术交流和分享平台设计实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

Moke 一百万条 Mysql 的数据

文章目录 前言创建数据库创建表结构生成数据 前言 想研究一下,数据量大的情况下,如何优化前端分页,所以需要 Moke 一些数据 创建数据库 在 Mysql的基础上,可以写个语句执行 CREATE DATABASE test_oneMillion; USE test_oneMi…