深度学习 精选笔记(12)卷积神经网络-理论基础1

学习参考:

  • 动手学深度学习2.0
  • Deep-Learning-with-TensorFlow-book
  • pytorchlightning

①如有冒犯、请联系侵删。
②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。
③非常推荐上面(学习参考)的前两个教程,在网上是开源免费的,写的很棒,不管是开始学还是复习巩固都很不错的。

深度学习回顾,专栏内容来源多个书籍笔记、在线笔记、以及自己的感想、想法,佛系更新。争取内容全面而不失重点。完结时间到了也会一直更新下去,已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。所有文章涉及的教程都会写在开头、一起学习一起进步。

推荐阅读、学习参考:

  • https://blog.csdn.net/IronmanJay/article/details/128689946
  • CNN笔记:通俗理解卷积神经网络
  • 卷积神经网络原理【十分推荐】
  • 卷积神经网络(CNN)详细介绍及其原理详解

1.从全连接层到卷积

多层感知机十分适合处理表格数据,其中行对应样本,列对应特征。 对于表格数据,寻找的模式可能涉及特征之间的交互,但是不能预先假设任何与特征交互相关的先验结构。 此时,多层感知机可能是最好的选择,然而对于高维感知数据,这种缺少结构的网络可能会变得不实用。

例如,在之前猫狗分类的例子中:假设有一个足够充分的照片数据集,数据集中是拥有标注的照片,每张照片具有百万级像素,这意味着网络的每次输入都有一百万个维度。 即使将隐藏层维度降低到1000,这个全连接层也将有 106×103=109
个参数。 想要训练这个模型将不可实现,因为需要有大量的GPU、分布式优化训练的经验和超乎常人的耐心。

1.1不变性

想象一下,假设想从一张图片中找到某个物体。 合理的假设是:无论哪种方法找到这个物体,都应该和物体的位置无关。 理想情况下,系统应该能够利用常识:猪通常不在天上飞,飞机通常不在水里游泳。 但是,如果一只猪出现在图片顶部,还是应该认出它。

可以从儿童游戏”沃尔多在哪里”中得到灵感:
在这个游戏中包含了许多充斥着活动的混乱场景,而沃尔多通常潜伏在一些不太可能的位置,读者的目标就是找出他。 尽管沃尔多的装扮很有特点,但是在眼花缭乱的场景中找到他也如大海捞针。 然而沃尔多的样子并不取决于他潜藏的地方,因此可以使用一个“沃尔多检测器”扫描图像。 该检测器将图像分割成多个区域,并为每个区域包含沃尔多的可能性打分。

卷积神经网络正是将空间不变性(spatial invariance)的这一概念系统化,从而基于这个模型使用较少的参数来学习有用的表示。

  • 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。
  • 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测。

下面探究:以上两个原则是如何转化为数学表示的。

1.2多层感知机的限制

多层感知机(MLP)作为一种人工神经网络模型,在解决许多机器学习问题上表现出色。然而,它也有一些限制,包括:

  • 需要大量数据集: MLP通常需要大量的标记数据来有效地训练模型,特别是在具有许多参数的大型网络中,过拟合是一个常见的问题。
  • 需要调优的超参数: MLP具有许多超参数,如隐藏层的数量、每层的神经元数量、学习率等,需要仔细调优才能获得最佳性能。
  • 对特征的敏感: MLP对输入数据的特征表示非常敏感,因此在训练之前可能需要对数据进行归一化或标准化,以避免不同特征值的影响不均衡。
  • 容易过拟合: 由于MLP的参数数量较多,模型很容易过拟合训练数据,特别是在没有足够正则化措施的情况下。
  • 计算资源需求高: 复杂的MLP可能需要大量的计算资源来训练,特别是当处理大规模的数据集时。
  • 非线性关系的建模: 如果数据集包含复杂的非线性关系,MLP可能需要更多的层和神经元才能很好地捕捉这些关系,增加了模型的复杂性和训练难度。
  • 黑盒模型: MLP作为深度学习模型,通常被认为是黑盒模型,难以解释其预测结果,这可能在需要透明决策过程的应用中造成一定的困扰。

多层感知机的输入是二维图像 𝐗 ,其隐藏表示 𝐇 在数学上是一个矩阵,在代码中表示为二维张量。 其中 𝐗 和 𝐇 具有相同的形状。 为了方便理解,可以认为无论是输入还是隐藏表示都拥有空间结构。

使用 [𝐗]𝑖,𝑗 和 [𝐇]𝑖,𝑗 分别表示输入图像和隐藏表示中位置( 𝑖 , 𝑗 )处的像素。 为了使每个隐藏神经元都能接收到每个输入像素的信息,将参数从权重矩阵替换为四阶权重张量 𝖶 。假设 𝐔 包含偏置参数,可以将全连接层形式化地表示为

在这里插入图片描述
其中,从 𝖶 到 𝖵 的转换只是形式上的转换,因为在这两个四阶张量的元素之间存在一一对应的关系。只需重新索引下标(𝑘,𝑙),使 𝑘=𝑖+𝑎 、 𝑙=𝑗+𝑏 ,此可得 [𝖵]𝑖,𝑗,𝑎,𝑏=[𝖶]𝑖,𝑗,𝑖+𝑎,𝑗+𝑏 。索引 𝑎 和 𝑏 通过在正偏移和负偏移之间移动覆盖了整个图像。 对于隐藏表示中任意给定位置( 𝑖 , 𝑗 )处的像素值 [𝐇]𝑖,𝑗 ,可以通过在 𝑥 中以 (𝑖,𝑗) 为中心对像素进行加权求和得到,加权使用的权重为 [𝖵]𝑖,𝑗,𝑎,𝑏 。
(1)平移不变性
引用上述的第一个原则:平移不变性。 这意味着检测对象在输入 𝐗 中的平移,应该仅导致隐藏表示 𝐇
中的平移。也就是说, 𝖵 和 𝐔 实际上不依赖于 (𝑖,𝑗) 的值,即 [𝖵]𝑖,𝑗,𝑎,𝑏=[𝐕]𝑎,𝑏 。并且 𝐔 是一个常数,比如 𝑢 。因此,可以简化 𝐇 定义为:
在这里插入图片描述

这就是卷积(convolution)。是在使用系数 [𝐕]𝑎,𝑏 对位置 (𝑖,𝑗) 附近的像素 (𝑖+𝑎,𝑗+𝑏) 进行加权得到 [𝐇]𝑖,𝑗 。 注意, [𝐕]𝑎,𝑏 的系数比 [𝖵]𝑖,𝑗,𝑎,𝑏 少很多,因为前者不再依赖于图像中的位置。这就是显著的进步!
(2)局部性

引用上述的第二个原则:局部性。如上所述,为了收集用来训练参数 [𝐇]𝑖,𝑗的相关信息,不应偏离到距 (𝑖,𝑗)很远的地方。这意味着在 |𝑎|>Δ 或 |𝑏|>Δ的范围之外,可以设置 [𝐕]𝑎,𝑏=0 。因此,可以将 [𝐇]𝑖,𝑗
重写为
在这里插入图片描述
上面该公式是一个卷积层(convolutional layer),而卷积神经网络是包含卷积层的一类特殊的神经网络。 在深度学习研究社区中, 𝐕 被称为卷积核(convolution kernel)或者滤波器(filter),亦或简单地称之为该卷积层的权重,通常该权重是可学习的参数。

1.3卷积

在数学中,两个函数(比如 𝑓,𝑔:ℝ(d)→ℝ )之间的“卷积”被定义为
在这里插入图片描述
也就是说,卷积是当把一个函数“翻转”并移位 𝐱时,测量 𝑓和 𝑔 之间的重叠。 当为离散对象时,积分就变成求和。例如,对于由索引为 ℤ 的、平方可和的、无限维向量集合中抽取的向量,得到以下定义:
在这里插入图片描述
对于二维张量,则为 𝑓 的索引 (𝑎,𝑏) 和 𝑔 的索引 (𝑖−𝑎,𝑗−𝑏)上的对应加和:
在这里插入图片描述

1.4通道

图像一般包含三个通道/三种原色(红色、绿色和蓝色)。 实际上,图像不是二维张量,而是一个由高度、宽度和颜色组成的三维张量,比如包含 1024×1024×3 个像素。 前两个轴与像素的空间位置有关,而第三个轴可以看作每个像素的多维表示。 因此,我们将 𝖷 索引为 [𝖷]𝑖,𝑗,𝑘 。由此卷积相应地调整为 [𝖵]𝑎,𝑏,𝑐 ,而不是 [𝐕]𝑎,𝑏 。

此外,由于输入图像是三维的,隐藏表示 𝖧 也最好采用三维张量。 换句话说,对于每一个空间位置,想要采用一组而不是一个隐藏表示。这样一组隐藏表示可以想象成一些互相堆叠的二维网格。 因此,可以把隐藏表示想象为一系列具有二维张量的通道(channel)。 这些通道有时也被称为特征映射(feature maps),因为每个通道都向后续层提供一组空间化的学习特征。 直观上可以想象在靠近输入的底层,一些通道专门识别边缘,而一些通道专门识别纹理。

为了支持输入 𝖷 和隐藏表示 𝖧 中的多个通道,可以在 𝖵 中添加第四个坐标,即 [𝖵]𝑎,𝑏,𝑐,𝑑 。
在这里插入图片描述
其中隐藏表示 𝖧 中的索引 𝑑 表示输出通道,而随后的输出将继续以三维张量 𝖧 作为输入进入下一个卷积层。 故而可以定义具有多个通道的卷积层,而其中 𝖵 是该卷积层的权重。

1.5总结(直接看这个)

全连接层在图像任务上的缺点:

  • 参数量过大: 全连接层会将图像中的每个像素都连接到神经网络中,导致参数量巨大。对于高分辨率的图像,这样的连接方式会引起巨大的计算和内存负担。
  • 位置信息丢失: 全连接层并不保留像素之间的位置信息,因为每个像素与所有神经元连接,使得网络无法捕捉到空间结构和位置信息,这在图像处理任务中通常是关键的。
  • 过拟合风险高: 参数量巨大会增加模型的复杂性,容易过拟合训练数据,特别是在训练数据较少的情况下,容易导致泛化能力下降。
  • 不适合大尺寸输入: 对于大尺寸输入的图像,全连接层的参数量迅速增长,会使得训练过程变得困难并且需要更多的计算资源。
  • 计算开销大: 全连接层需要大量的计算资源和时间来训练模型,尤其是在处理大规模数据集时,会增加训练时间和成本。

以上这些缺点,导致了全连接网络无法胜任图片任务,为了克服全连接层在图像处理任务中的缺点,通常会使用卷积神经网络(CNN)来代替全连接层。CNN具有局部连接和权值共享的特性,可以更有效地处理图像数据,提取空间信息,并且减少参数量和计算开销。因此,在图像人物识别等任务中,CNN通常被认为是更有效和更适合的模型架构。

2.卷积通俗理解(直接从这里开始看)

卷积神经网络通过充分利用局部相关性和权值共享的思想,大大地减少了网络的参数量,从而提高训练效率,更容易实现超大规模的深层网络。

2.1什么是卷积?

对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。

非严格意义上来讲,下图中红框框起来的部分便可以理解为一个滤波器,即带着一组固定权重的神经元。多个滤波器叠加便成了卷积层。

在这里插入图片描述
比如下图中,图中左边部分是原始输入数据,图中中间部分是滤波器filter,图中右边是输出的新的二维数据。(就是一个提取特征的过程)
在这里插入图片描述
中间滤波器filter与数据窗口做内积,其具体计算过程则是:40 + 00 + 00 + 00 + 01 + 01 + 00 + 01 + -4*2 = -8

卷积层有时被称为特征映射(feature map),因为它可以被视为一个输入映射到下一层的空间维度的转换器。 在卷积神经网络中,对于某一层的任意元素 𝑥 ,其感受野(receptive field)是指在前向传播期间可能影响 𝑥 计算的所有元素(来自所有先前层)。

2.2图像上的卷积

具体来说,左边是图像输入,中间部分就是滤波器filter(带着一组固定权重的神经元),不同的滤波器filter会得到不同的输出数据,比如颜色深浅、轮廓。相当于如果想提取图像的不同特征,则用不同的滤波器filter,提取想要的关于图像的特定信息:颜色深浅或轮廓。
在这里插入图片描述

2.3卷积的过程

在CNN中,滤波器filter(带着一组固定权重的神经元)对局部输入数据进行卷积计算。每计算完一个数据窗口内的局部数据后,数据窗口不断平移滑动,直到计算完所有数据。这个过程中,有这么几个参数:

  • 深度depth:神经元个数,决定输出的depth厚度。同时代表滤波器个数。
  • 步长stride:决定滑动多少步可以到边缘。
  • 填充值zero-padding:在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了总长能被步长整除。

在这里插入图片描述

2.4卷积网络之激励层与池化层

(1)激励层(激活函数层)

卷积网络使用ReLU激活函数,优点是收敛快,求梯度简单。
在这里插入图片描述
sigmoid激活函数容易饱和、造成终止梯度传递,且没有0中心化。

(2)池化pool层

池化,简言之,即取区域平均或最大,如下图所示(图引自cs231n)
在这里插入图片描述
上图所展示的是取区域最大,即上图左边部分中 左上角2x2的矩阵中6最大,右上角2x2的矩阵中8最大,左下角2x2的矩阵中3最大,右下角2x2的矩阵中4最大,所以得到上图右边部分的结果:6 8 3 4。

池化就是这个意思,如果是取平均,那么就取这个区域内的平均。

2.5 特征映射和感受野

卷积层有时被称为特征映射(feature map),因为它可以被视为一个输入映射到下一层的空间维度的转换器。 在卷积神经网络中,对于某一层的任意元素 𝑥 ,其感受野(receptive field)是指在前向传播期间可能影响 𝑥 计算的所有元素(来自所有先前层)。

3.快速认识卷积网络的 层

3.1输入层

输入层比较简单,这一层的主要工作就是输入图像等信息,因为卷积神经网络主要处理的是图像相关的内容。对于输入图像,首先要将其转换为对应的二维矩阵,这个二位矩阵就是由图像每一个像素的像素值大小组成的。
在这里插入图片描述
上图又称为灰度图像,因为其每一个像素值的范围是0 ~ 255(由纯黑色到纯白色),表示其颜色强弱程度。
另外还有黑白图像,每个像素值要么是0(表示纯黑色),要么是255(表示纯白色)。

日常生活中最常见的就是RGB图像,有三个通道,分别是红色、绿色、蓝色。每个通道的每个像素值的范围也是0~255,表示其每个像素的颜色强弱。但是日常处理的基本都是灰度图像,因为比较好操作(值范围较小,颜色较单一),有些RGB图像在输入给神经网络之前也被转化为灰度图像,也是为了方便计算,否则三个通道的像素一起处理计算量非常大。当然,随着计算机性能的高速发展,现在有些神经网络也可以处理三通道的RGB图像。

3.2卷积层

卷积操作会为存在特征的区域确定一个高值,否则确定一个低值。这个过程需要通过计算其与卷积核(Convolution Kernel)的乘积值来确定。假设现在的输入图片是一个人的脑袋,而人的眼睛是需要提取的特征,那么就将人的眼睛作为卷积核,通过在人的脑袋的图片上移动来确定哪里是眼睛。
在这里插入图片描述
通过整个卷积过程又得到一个新的二维矩阵,此二维矩阵也被称为特征图(Feature Map),最后可以将得到的特征图进行上色处理(我只是打个比方,比如高值为白色,低值为黑色),最后可以提取到关于人的眼睛的特征。

如果每次计算的时候,边缘只被计算一次,而中间被多次计算,那么得到的特征图也会丢失边缘特征,最终会导致特征提取不准确,那为了解决这个问题,可以在原始的输入图像的二维矩阵周围再拓展一圈或者几圈,这样每个位置都可以被公平的计算到了,也就不会丢失任何特征,此过程可见下面情况,这种通过拓展解决特征丢失的方法又被称为Padding(填充)。Padding取值为2,拓展两圈:
在这里插入图片描述
如果使用两个卷积核去提取一张彩色图片呢?彩色图片都是三个通道,也就是说一个彩色图片会有三个二维矩阵。此时使用两组卷积核,每组卷积核都用来提取自己通道的二维矩阵的特征,只需要用两组卷积核的第一个卷积核来计算得到特征图就可以了。【注意,这里的3通道用一组也是可以的、根据自己需要来,用一组的话那就是删掉Filter W1,然后输出就只有一个矩阵。】

在这里插入图片描述

简而言之的总结:
如果是一个通道那就需要使用一个卷积核去操作(使用),三个通道需要使用3个卷积核去操作。处理多通道输入时,每个通道通常都会有对应的卷积核进行卷积操作。这个过程称为多通道卷积(Multi-channel Convolution)。当一个输入信号有多个通道时,每个通道都需要有相应的卷积核去提取特征。在每个通道上应用卷积核后,将每个通道的卷积结果求和,得到最终的输出特征图。

3.3池化层

有几个卷积核就有多少个特征图,现实中情况肯定更为复杂,也就会有更多的卷积核,那么就会有更多的特征图,当特征图非常多的时候,意味着我们得到的特征也非常多,但是这么多特征并不都是所需要的。

为了解决这个问题,可以利用池化层,池化层又称为下采样,也就是说,当进行卷积操作后,再将得到的特征图进行特征提取,将其中最具有代表性的特征提取出来,可以起到减小过拟合和降低维度的作用,这个过程如下所示:
在这里插入图片描述
其实这个过程类似于卷积的过程,就是一个正方形的小方块在图片上进行移动,每次取这个正方形方框中最具有代表性的特征,那么问题又来了,如何提取到最有代表性的特征呢,通常有两种方法:

  • 最大池化:顾名思义,最大池化就是每次取正方形中所有值的最大值,这个最大值也就相当于当前位置最具有代表性的特征。
  • 平均池化:平均池化就是取此正方形区域中所有值的平均值,考虑到每个位置的值对于此处特征的影响,平均池化计算也比较简单。
  • 还可以实现加权形式的池化,对深色区域或者浅色区域,或者明显痕迹部分进行突出表达,比如加大权重的方式进行。

3.4全连接层

卷积和最大池化之后,得到最后的特征图,此时的特征都是经过计算后得到的,所以代表性比较强,最后经过全连接层,展开为一维的向量,再经过一次计算后,得到最终的识别概率,这就是卷积神经网络的整个过程。

3.5输出层

卷积神经网络的输出层理解起来就比较简单了,只需要将全连接层得到的一维向量经过计算后得到识别值的一个概率,当然,这个计算可能是线性的,也可能是非线性的。

在深度学习中,需要识别的结果一般都是多分类的,所以每个位置都会有一个概率值,代表识别为当前值的概率,取最大的概率值,就是最终的识别结果。在训练的过程中,可以通过不断地调整参数值来使识别结果更准确,从而达到最高的模型准确率。

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

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

相关文章

JS原型和原型链的理解

原型链图,图中Parent是构造函数,p1是通过Parent实例化出来的一个对象 前置知识 js中对象和函数的关系,函数其实是对象的一种 函数、构造函数的区别,任何函数都可以作为构造函数,但是并不能将任意函数叫做构造函数&…

【Godot4.2】颜色完全使用手册

概述 本篇简单汇总Godot中的颜色的构造和使用,内容包括了: RGB、RGBA,HSV以及HTML16进制颜色值、颜色常量等形式构造颜色颜色的运算以及取反、插值用类型化数组、紧缩数组或PNG图片形式存储多个颜色 构造颜色 因为颜色是一种视觉元素&…

Vue中使用Lodash

Vue中使用Lodash 前言安装Lodash引用方法vue中使用1、cloneDeep 深拷贝2、uniq 数组去重3、uniqWith 数组对象去重 isEqual 深度比对4、intersection 提取数组相同元素5、chunk 数组切分6、compact去除假值7、reject:根据条件删除指定的值8、find:查找结果的第一个值9、filter:…

VsCode 配置go开发环境之下载go tools

ctrl shift P 选择 go install/update tools,下载go tools 报错, 提升dial err。 将GOPROXY 和 GOSUMDB 按照如下配置,重启IDE即可成功下载 set GOPROXYhttps://goproxy.cn set GOSUMDBoff

(18)C#采集微信群群成员列表信息-微信UI自动化(.Net)

往期知识回顾 (1)C#开启探索微信自动化之路-微信UI自动化 (2)C#创建微信窗体自动化实例-微信UI自动化 (3)C#针对系统热键管理-微信UI自动化 (4)C#采集微信通讯录和联系人-微信UI自动化 (5)C#实现针对微信窗体鼠标静默点击-微信UI自动化 (6)C#搜索微信通讯录联系人-微信UI…

什么是API安全性以及为什么它很重要?

API指的是应用程序接口(Application Programming Interface),是一组定义和描述不同软件组件如何通信以及相互操作的规范。它允许不同的软件系统之间共享数据和功能,使它们能够相互连接和交互。 API可以是不同软件之间的通信桥梁&…

进入docker容器中安装软件失败解,国外源慢,时间不同步,执行命令权限不够等问题解决办法

进入docker容器中安装软件失败解,时间不同步, 国外源慢,执行命令权限不够 等问题解决办法 首先我进入docker容器中,为了安装一个软件,引出了很多报错问题,报错如下: 1、无法用 ifconfig 或者 ip addr 的方…

HAProxy高性能负载均衡器

一、HAProxy基础知识 (一)HAProxy概述 HAProxy是一款基于事件驱动、单进程模型设计的四层与七层负载均衡器,它能够在TCP/UDP层面以及HTTP(S)等应用层协议上实现高效的流量分发。HAProxy不仅适用于Web服务器负载均衡,还能应用于数据…

vulhub中DNS域传送漏洞复现

DNS协议支持使用axfr类型的记录进行区域传送,用来解决主从同步的问题。如果管理员在配置DNS服务器的时候没有限制允许获取记录的来源,将会导致DNS域传送漏洞。 环境搭建 Vulhub使用Bind9来搭建dns服务器,但不代表只有Bind9支持AXFR记录。运行…

网络通信.

1.物理层:网络通信的基础设施 运快递的公路 2.数据链路层 两个相邻的节点之间如何传输 两个集散点之间的传输 3.网络层 两个点之间的路径规划 物流公司规划快递的路径 4.传输层 两个点之间的通信(不考虑路径规划) 卖家发货 只考虑起点和终点 …

java----网络编程(一)

一.什么是网络编程 用户在浏览器中,打开在线视频网站,如优酷看视频,实质是通过网络,获取到网络上的一个视频资源。 与本地打开视频文件类似,只是视频文件这个资源的来源是网络。所谓网络资源就是网络中获取数据。而所…

SpringTask实现的任务调度与XXL-job实现的分布式任务调度【XXL-Job工作原理】

目录 任务调度 分布式任务调度 分布式任务调度存在的问题以及解决方案 使用SpringTask实现单体服务的任务调度 XXL-job分布式任务调度系统工作原理 XXL-job系统组成 XXL-job工作原理 使用XXL-job实现分布式任务调度 配置调度中心XXL-job 登录调度中心创建执行器和任务 …

安装OpenEBS,镜像总是报错ImagePullBackOff或者ErrImagePull的解决方法

按照 KubeSphere 官方文档安装 OpenEBS,镜像总是报错ImagePullBackOff或者ErrImagePull的解决方法 helm 有很多更换 源 的文章,有一些是写更换阿里云的源,但是阿里云的源根本没更新OpenEBS的镜像。 在网上找到1个可用的源: 可用的…

nodejs pkg打包跨平台执行文件,带.node插件

在nodejs引入的第三方库中,大部分插件都是nodejs原生开发,使用pkg可以快速打包,生成windows、linux(ubuntu、centOS等)、麒麟系统下面执行文件。遇到了第三方插件gdal、sharp、sqlite3,在webstorm中打包生成执行文件,跨平台部署的时候会出现找不到###.node文件,需要获取部…

BUUCTF-----[CISCN 2019 初赛]Love Math

<?php error_reporting(0); //听说你很喜欢数学&#xff0c;不知道你是否爱它胜过爱flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];if (strlen($content) > 80) {die("太长了不会算");}$blacklist [ , \t, \r, \n…

Employing Multi-Estimations for Weakly-Supervised Semantic Segmentation

eighted selective training (WST) 辅助信息 作者未提供代码

《手把手教你》系列技巧篇(三十七)-java+ selenium自动化测试-日历时间控件-上篇(详解教程)

1.简介 我们在实际工作中&#xff0c;有可能遇到有些web产品&#xff0c;网页上有一些时间选择&#xff0c;然后支持按照不同时间段范围去筛选数据。网页上日历控件一般&#xff0c;是一个文本输入框&#xff0c;鼠标点击&#xff0c;就会弹出日历界面&#xff0c;可以选择具体…

x6.js 从流程图组件库中拖拽组件到画布dnd使用

上一篇已经了解到了x6.js常用功能以及使用方法。但我们使用流程图的时候还少不了一个非常重要的功能那就是拖拽组件库里的组件进来。如下图&#xff1a; 首先是布局这块&#xff0c;拖拽组件库的视图中布局无需我们去写&#xff0c;我们只需把界面搭建好。 添加组件库 1.搭建布…

LeetCode 0310.最小高度树:拓扑排序秒了

【LetMeFly】310.最小高度树&#xff1a;拓扑排序秒了 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-height-trees/ 树是一个无向图&#xff0c;其中任何两个顶点只通过一条路径连接。 换句话说&#xff0c;一个任何没有简单环路的连通图都是一棵树。 给你…

JavaScript 进阶(一)

一、作用域 作用域&#xff08;scope&#xff09;规定了变量能够被访问的“范围”&#xff0c;离开了这个“范围”变量便不能被访问。 作用域分为&#xff1a; 局部作用域 、全局作用域。 1.1局部作用域 局部作用域分为函数作用域和块作用域。 1. 函数作用域&#xff1a; 在函数…