sheng的学习笔记-卷积神经网络经典架构-LeNet-5、AlexNet、VGGNet-16

目录:目录

看本文章之前,需要学习卷积神经网络基础,可参考  sheng的学习笔记-卷积神经网络-CSDN博客

目录

LeNet-5

架构图

层级解析

1、输入层(Input layer)

2、卷积层C1(Convolutional layer C1)

3、采样/池化层S2(Subsampling layer S2)

4、卷积层C3(Convolutional layer C3)

5、采样/池化层S4(Subsampling layer S4)

6、全连接层C5(Fully connected layer C5)

7、全连接层F6(Fully connected layer F6)

8、输出层(Output layer)

AlexNet

架构图

AlexNet 模型的特点

1)使用 ReLU 激活函数

2)数据扩充(Data augmentation)

3)重叠池化 (Overlapping Pooling)

4)局部归一化(Local Response Normalization,简称 LRN)

5)Dropout

6) 多 GPU 训练

详细的逐层解析

1、第一层(卷积层)

2、第二层(卷积层)

3、第三层(卷积层)

4、第四层(卷积层)

5、第五层(卷积层)

6、第六层(全连接层)

7、第七层(全连接层)

8、第八层(全连接层)

总结图

 VGG-16

架构图

参考文章:


卷积神经网络常用的架构:一个或多个卷积层后面跟着一个池化层,然后又是若干个卷积层再接一个池化层,然后是全连接层,最后是输出,这种排列方式很常用

LeNet-5

LeNet-5是一个经典的深度卷积神经网络,由Yann LeCun在1998年提出,旨在解决手写数字识别问题,被认为是卷积神经网络的开创性工作之一。该网络是第一个被广泛应用于数字图像识别的神经网络之一,也是深度学习领域的里程碑之一。

架构图

LeNet-5的基本结构包括7层网络结构(不含输入层),其中包括2个卷积层、2个降采样层(池化层)、2个全连接层和输出层

  •  从左往右看,随着网络越来越深,图像的高度和宽度在缩小,从最初的32×32缩小到28×28,再到14×14、10×10,最后只有5×5。与此同时,随着网络层次的加深,通道数量一直在增加,从1增加到6个,再到16个。这种架构,可以支持的入参 数量,没有那么多,对于高清图像的处理没那么好
  • LeNet-5的论文是在1998年撰写的,当时人们并不使用padding,或者总是使用valid卷积(不填充,padding为0),这就是为什么每进行一次卷积,图像的高度和宽度都会缩小

层级解析

1、输入层(Input layer)

输入层接收大小为 32×32 的手写数字图像,其中包括灰度值(0-255)。在实际应用中,我们通常会对输入图像进行预处理,例如对像素值进行归一化,以加快训练速度和提高模型的准确性。

2、卷积层C1(Convolutional layer C1)

卷积层C1包括6个卷积核,每个卷积核的大小为 5×5 ,步长为1,填充为0。因此,每个卷积核会产生一个大小为 28×28 的特征图(输出通道数为6)。

3、采样/池化层S2(Subsampling layer S2)

采样层S2采用最大池化(max-pooling)操作,每个窗口的大小为 2×2 ,步长为2。因此,每个池化操作会从4个相邻的特征图中选择最大值,产生一个大小为 14×14 的特征图(输出通道数为6)。这样可以减少特征图的大小,提高计算效率,并且对于轻微的位置变化可以保持一定的不变性。

4、卷积层C3(Convolutional layer C3)

卷积层C3包括16个卷积核,每个卷积核的大小为 5×5 ,步长为1,填充为0。因此,每个卷积核会产生一个大小为 10×10 的特征图(输出通道数为16)。

5、采样/池化层S4(Subsampling layer S4)

采样层S4采用最大池化操作,每个窗口的大小为 2×2 ,步长为2。因此,每个池化操作会从4个相邻的特征图中选择最大值,产生一个大小为 5×5 的特征图(输出通道数为16)。

6、全连接层C5(Fully connected layer C5)

C5将每个大小为 5×5 的特征图拉成一个长度为400的向量,并通过一个带有120个神经元的全连接层进行连接。120是由LeNet-5的设计者根据实验得到的最佳值。

7、全连接层F6(Fully connected layer F6)

全连接层F6将120个神经元连接到84个神经元。

8、输出层(Output layer)

输出层由10个神经元组成,每个神经元对应0-9中的一个数字,并输出最终的分类结果。在训练过程中,使用交叉熵损失函数计算输出层的误差,并通过反向传播算法更新卷积核和全连接层的权重参数。

AlexNet

2012 年,Alex Krizhevsky、Ilya Sutskever 在多伦多大学 Geoff Hinton 的实验室设计出了一个深层的卷积神经网络 AlexNet,夺得了 2012 年 ImageNet LSVRC 的冠军,且准确率远超第二名(top5 错误率为 15.3%,第二名为 26.2%),引起了很大的轰动。AlexNet 可以说是具有历史意义的一个网络结构,在此之前,深度学习已经沉寂了很长时间,自 2012 年 AlexNet 诞生之后,后面的 ImageNet 冠军都是用卷积神经网络(CNN)来做的,并且层次越来越深,使得 CNN 成为在图像识别分类的核心算法模型,带来了深度学习的大爆发。

架构图

AlexNet首先用一张227×227×3的图片作为输入,实际上原文中使用的图像是224×224×3,但是如果你尝试去推导一下,你会发现227×227这个尺寸更好一些。

  1. 第一层我们使用96个11×11的过滤器,步幅为4,由于步幅是4,因此尺寸缩小到55×55,缩小了4倍左右。
  2. 然后用一个3×3的过滤器构建最大池化层,f=3,步幅s为2,卷积层尺寸缩小为27×27×96。
  3. 接着再执行一个5×5的卷积,padding之后,输出是27×27×276。
  4. 然后再次进行最大池化,尺寸缩小到13×13。
  5. 再执行一次same卷积,相同的padding,得到的结果是13×13×384,384个过滤器。
  6. 再做一次same卷积。
  7. 再做一次同样的操作,
  8. 最后再进行一次最大池化,尺寸缩小到6×6×256。6×6×256等于9216,将其展开为9216个单元
  9. 然后是一些全连接层。
  10. 最后使用softmax函数输出识别的结果,看它究竟是1000个可能的对象中的哪一个。

实际上,这种神经网络与LeNet有很多相似之处,不过AlexNet要大得多。LeNetLeNet-5大约有6万个参数,而AlexNet包含约6000万个参数。当用于训练图像和数据集时,AlexNet能够处理非常相似的基本构造模块,这些模块往往包含着大量的隐藏单元或数据。

AlexNet网络结构看起来相对复杂,包含大量超参数,这些数字(55×55×96、27×27×96、27×27×256……)都是Alex Krizhevsky及其合著者不得不给出的。

AlexNet 模型的特点

AlexNet 之所以能够成功,跟这个模型设计的特点有关,主要有:

  • 使用了非线性激活函数:ReLU
  • 防止过拟合的方法:Dropout,数据扩充(Data augmentation)
  • 其他:多 GPU 实现,LRN 归一化层的使用

1)使用 ReLU 激活函数


传统的神经网络普遍使用 Sigmoid 或者 tanh 等非线性函数作为激励函数,然而它们容易出现梯度弥散或梯度饱和的情况。以 Sigmoid 函数为例,当输入的值非常大或者非常小的时候,这些神经元的梯度接近于 0(梯度饱和现象),如果输入的初始值很大的话,梯度在反向传播时因为需要乘上一个 Sigmoid 导数,会造成梯度越来越小,导致网络变的很难学习。
在 AlexNet 中,使用了 ReLU (Rectified Linear Units)激励函数,该函数的公式为:f (x)=max (0,x),当输入信号 < 0 时,输出都是 0,当输入信号 > 0 时,输出等于输入,如下图所示:

使用 ReLU 替代 Sigmoid/tanh,由于 ReLU 是线性的,且导数始终为 1,计算量大大减少,收敛速度会比 Sigmoid/tanh 快很多,如下图所示:

2)数据扩充(Data augmentation)

有一种观点认为神经网络是靠数据喂出来的,如果能够增加训练数据,提供海量数据进行训练,则能够有效提升算法的准确率,因为这样可以避免过拟合,从而可以进一步增大、加深网络结构。而当训练数据有限时,可以通过一些变换从已有的训练数据集中生成一些新的数据,以快速地扩充训练数据。
其中,最简单、通用的图像数据变形的方式:水平翻转图像,从原始图像中随机裁剪、平移变换,颜色、光照变换,如下图所示:

AlexNet 在训练时,在数据扩充(data augmentation)这样处理:
(1)随机裁剪,对 256×256 的图片进行随机裁剪到 224×224,然后进行水平翻转,相当于将样本数量增加了((256-224)^2)×2=2048 倍;
(2)测试的时候,对左上、右上、左下、右下、中间分别做了 5 次裁剪,然后翻转,共 10 个裁剪,之后对结果求平均。作者说,如果不做随机裁剪,大网络基本上都过拟合;
(3)对 RGB 空间做 PCA(主成分分析),然后对主成分做一个(0, 0.1)的高斯扰动,也就是对颜色、光照作变换,结果使错误率又下降了 1%。

3)重叠池化 (Overlapping Pooling)

一般的池化(Pooling)是不重叠的,池化区域的窗口大小与步长相同,如下图所示:


在 AlexNet 中使用的池化(Pooling)却是可重叠的,也就是说,在池化的时候,每次移动的步长小于池化的窗口长度。AlexNet 池化的大小为 3×3 的正方形,每次池化移动步长为 2,这样就会出现重叠。重叠池化可以避免过拟合,这个策略贡献了 0.3% 的 Top-5 错误率。

此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果

4)局部归一化(Local Response Normalization,简称 LRN)

局部响应归一层的基本思路是,假如这是网络的一块,比如是13×13×256,LRN要做的就是选取一个位置,比如说这样一个位置,从这个位置穿过整个通道,能得到256个数字,并进行归一化。进行局部响应归一化的动机是,对于这张13×13的图像中的每个位置来说,我们可能并不需要太多的高激活神经元

5)Dropout

引入 Dropout 主要是为了防止过拟合。在神经网络中 Dropout 通过修改神经网络本身结构来实现,对于某一层的神经元,通过定义的概率将神经元置为 0,这个神经元就不参与前向和后向传播,就如同在网络中被删除了一样,同时保持输入层与输出层神经元的个数不变,然后按照神经网络的学习方法进行参数更新。在下一次迭代中,又重新随机删除一些神经元(置为 0),直至训练结束。

其主要的思想是,随机减少中间层节点,减少每个节点对最终结果的影响,从而防止过拟合

6) 多 GPU 训练

AlexNet 当时使用了 GTX580 的 GPU 进行训练,由于单个 GTX 580 GPU 只有 3GB 内存,这限制了在其上训练的网络的最大规模,因此他们在每个 GPU 中放置一半核(或神经元),将网络分布在两个 GPU 上进行并行计算,大大加快了 AlexNet 的训练速度。

详细的逐层解析

下图是 AlexNet 的网络结构图:

AlexNet 网络结构共有 8 层,前面 5 层是卷积层,后面 3 层是全连接层,最后一个全连接层的输出传递给一个 1000 路的 softmax 层,对应 1000 个类标签的分布。
由于 AlexNet 采用了两个 GPU 进行训练,因此,该网络结构图由上下两部分组成,一个 GPU 运行图上方的层,另一个运行图下方的层,两个 GPU 只在特定的层通信。例如第二、四、五层卷积层的核只和同一个 GPU 上的前一层的核特征图相连,第三层卷积层和第二层所有的核特征图相连接,全连接层中的神经元和前一层中的所有神经元相连接。

下面逐层解析 AlexNet 结构:

1、第一层(卷积层)

该层的处理流程为:卷积 -->ReLU--> 池化 --> 归一化,流程图如下:

(1)卷积
输入的原始图像大小为 224×224×3(RGB 图像),在训练时会经过预处理变为 227×227×3。在本层使用 96 个 11×11×3 的卷积核进行卷积计算,生成新的像素。由于采用了两个 GPU 并行运算,因此,网络结构图中上下两部分分别承担了 48 个卷积核的运算。
卷积核沿图像按一定的步长往 x 轴方向、y 轴方向移动计算卷积,然后生成新的特征图,其大小为:floor ((img_size - filter_size)/stride) +1 = new_feture_size,其中 floor 表示向下取整,img_size 为图像大小,filter_size 为核大小,stride 为步长,new_feture_size 为卷积后的特征图大小,这个公式表示图像尺寸减去卷积核尺寸除以步长,再加上被减去的核大小像素对应生成的一个像素,结果就是卷积后特征图的大小。
AlexNet 中本层的卷积移动步长是 4 个像素,卷积核经移动计算后生成的特征图大小为 (227-11)/4+1=55,即 55×55。
(2)ReLU
卷积后的 55×55 像素层经过 ReLU 单元的处理,生成激活像素层,尺寸仍为 2 组 55×55×48 的像素层数据。
(3)池化
RuLU 后的像素层再经过池化运算,池化运算的尺寸为 3×3,步长为 2,则池化后图像的尺寸为 (55-3)/2+1=27,即池化后像素的规模为 27×27×96
(4)归一化
池化后的像素层再进行归一化处理,归一化运算的尺寸为 5×5,归一化后的像素规模不变,仍为 27×27×96,这 96 层像素层被分为两组,每组 48 个像素层,分别在一个独立的 GPU 上进行运算。

2、第二层(卷积层)

该层与第一层类似,处理流程为:卷积 -->ReLU--> 池化 --> 归一化,流程图如下:

(1)卷积
第二层的输入数据为第一层输出的 27×27×96 的像素层(被分成两组 27×27×48 的像素层放在两个不同 GPU 中进行运算),为方便后续处理,在这里每幅像素层的上下左右边缘都被填充了 2 个像素(填充 0),即图像的大小变为 (27+2+2) ×(27+2+2)。第二层的卷积核大小为 5×5,移动步长为 1 个像素,跟第一层第(1)点的计算公式一样,经卷积核计算后的像素层大小变为 (27+2+2-5)/1+1=27,即卷积后大小为 27×27。
本层使用了 256 个 5×5×48 的卷积核,同样也是被分成两组,每组为 128 个,分给两个 GPU 进行卷积运算,结果生成两组 27×27×128 个卷积后的像素层。
(2)ReLU
这些像素层经过 ReLU 单元的处理,生成激活像素层,尺寸仍为两组 27×27×128 的像素层。
(3)池化
再经过池化运算的处理,池化运算的尺寸为 3×3,步长为 2,池化后图像的尺寸为 (57-3)/2+1=13,即池化后像素的规模为 2 组 13×13×128 的像素层
(4)归一化
然后再经归一化处理,归一化运算的尺度为 5×5,归一化后的像素层的规模为 2 组 13×13×128 的像素层,分别由 2 个 GPU 进行运算。

3、第三层(卷积层)

 

第三层的处理流程为:卷积 -->ReLU

(1)卷积
第三层输入数据为第二层输出的 2 组 13×13×128 的像素层,为便于后续处理,每幅像素层的上下左右边缘都填充 1 个像素,填充后变为 (13+1+1)×(13+1+1)×128,分布在两个 GPU 中进行运算。
这一层中每个 GPU 都有 192 个卷积核,每个卷积核的尺寸是 3×3×256。因此,每个 GPU 中的卷积核都能对 2 组 13×13×128 的像素层的所有数据进行卷积运算。如该层的结构图所示,两个 GPU 有通过交叉的虚线连接,也就是说每个 GPU 要处理来自前一层的所有 GPU 的输入。
本层卷积的步长是 1 个像素,经过卷积运算后的尺寸为 (13+1+1-3)/1+1=13,即每个 GPU 中共 13×13×192 个卷积核,2 个 GPU 中共有 13×13×384 个卷积后的像素层。
(2)ReLU
卷积后的像素层经过 ReLU 单元的处理,生成激活像素层,尺寸仍为 2 组 13×13×192 的像素层,分配给两组 GPU 处理。

4、第四层(卷积层)

与第三层类似,第四层的处理流程为:卷积 -->ReLU

(1)卷积
第四层输入数据为第三层输出的 2 组 13×13×192 的像素层,类似于第三层,为便于后续处理,每幅像素层的上下左右边缘都填充 1 个像素,填充后的尺寸变为 (13+1+1)×(13+1+1)×192,分布在两个 GPU 中进行运算。
这一层中每个 GPU 都有 192 个卷积核,每个卷积核的尺寸是 3×3×192(与第三层不同,第四层的 GPU 之间没有虚线连接,也即 GPU 之间没有通信)。卷积的移动步长是 1 个像素,经卷积运算后的尺寸为 (13+1+1-3)/1+1=13,每个 GPU 中有 13×13×192 个卷积核,2 个 GPU 卷积后生成 13×13×384 的像素层。
(2)ReLU
卷积后的像素层经过 ReLU 单元处理,生成激活像素层,尺寸仍为 2 组 13×13×192 像素层,分配给两个 GPU 处理。

5、第五层(卷积层)

第五层的处理流程为:卷积 -->ReLU--> 池化

(1)卷积
第五层输入数据为第四层输出的 2 组 13×13×192 的像素层,为便于后续处理,每幅像素层的上下左右边缘都填充 1 个像素,填充后的尺寸变为 (13+1+1)×(13+1+1) ,2 组像素层数据被送至 2 个不同的 GPU 中进行运算。
这一层中每个 GPU 都有 128 个卷积核,每个卷积核的尺寸是 3×3×192,卷积的步长是 1 个像素,经卷积后的尺寸为 (13+1+1-3)/1+1=13,每个 GPU 中有 13×13×128 个卷积核,2 个 GPU 卷积后生成 13×13×256 的像素层。
(2)ReLU
卷积后的像素层经过 ReLU 单元处理,生成激活像素层,尺寸仍为 2 组 13×13×128 像素层,由两个 GPU 分别处理。
(3)池化
2 组 13×13×128 像素层分别在 2 个不同 GPU 中进行池化运算处理,池化运算的尺寸为 3×3,步长为 2,池化后图像的尺寸为 (13-3)/2+1=6,即池化后像素的规模为两组 6×6×128 的像素层数据,共有 6×6×256 的像素层数据。

6、第六层(全连接层)

第六层的处理流程为:卷积(全连接)-->ReLU-->Dropout

(1)卷积(全连接)
第六层输入数据是第五层的输出,尺寸为 6×6×256。本层共有 4096 个卷积核,每个卷积核的尺寸为 6×6×256,由于卷积核的尺寸刚好与待处理特征图(输入)的尺寸相同,即卷积核中的每个系数只与特征图(输入)尺寸的一个像素值相乘,一一对应,因此,该层被称为全连接层。由于卷积核与特征图的尺寸相同,卷积运算后只有一个值,因此,卷积后的像素层尺寸为 4096×1×1,即有 4096 个神经元。
(2)ReLU
这 4096 个运算结果通过 ReLU 激活函数生成 4096 个值。
(3)Dropout
然后再通过 Dropout 运算,输出 4096 个结果值。

7、第七层(全连接层)

第七层的处理流程为:全连接 -->ReLU-->Dropout

第六层输出的 4096 个数据与第七层的 4096 个神经元进行全连接,然后经 ReLU 进行处理后生成 4096 个数据,再经过 Dropout 处理后输出 4096 个数据。

8、第八层(全连接层)

第八层的处理流程为:全连接

第七层输出的 4096 个数据与第八层的 1000 个神经元进行全连接,经过训练后输出 1000 个 float 型的值,这就是预测结果。

总结图

 VGG-16

VGGNet 是由牛津大学视觉几何小组(Visual Geometry Group, VGG)提出的一种深层卷积网络结构,他们以 7.32% 的错误率赢得了 2014 年 ILSVRC 分类任务的亚军(冠军由 GoogLeNet 以 6.65% 的错误率夺得)和 25.32% 的错误率夺得定位任务(Localization)的第一名(GoogLeNet 错误率为 26.44%)。VGG可以看成是加深版本的AlexNet. 都是conv layer + FC layer。

论文地址:https://arxiv.org/pdf/1409.1556.pdf

VGG-16的这个数字16,就是指在这个网络中包含16个卷积层和全连接层(conv+fc的总层数是16,是不包括max pool的层数)

总共包含约1.38亿个参数,但VGG-16的结构并不复杂,而且这种网络结构很规整,整个网络都使用卷积核尺寸为 3×3 和最大池化尺寸 2×2,都是几个卷积层后面跟着可以压缩图像大小的池化层,池化层缩小图像的高度和宽度。同时,卷积层的过滤器数量变化存在一定的规律,由64翻倍变成128,再到256和512。每一步都进行翻倍,或者说在每一组卷积层进行过滤器翻倍操作,正是设计此种网络结构的另一个简单原则。这种相对一致的网络结构对研究者很有吸引力,而它的主要缺点是需要训练的特征数量非常巨大。 

架构图

VGG-16网络没有那么多超参数,这是一种只需要专注于构建卷积层的简单网络。

  • 假设这个小图是我们的输入图像,尺寸是224×224×3
  • 进行第一个卷积:用64个3×3的过滤器对输入图像进行卷积,输出结果是224×224×64,因为使用了same卷积,通道数量也一样,
  • 接着还有一层224×224×64,得到这样2个厚度为64的卷积层,意味着我们用64个过滤器进行了两次卷积

  • 接下来创建一个池化层,池化层将输入图像进行压缩,从224×224×64缩小到112×112×64。
  • 然后又是若干个卷积层,使用128个过滤器,以及一些same卷积,缩小到112×112×128
  • 然后进行池化,可以推导出池化后的结果是这样(56×56×128)。
  • 接着再用256个相同的过滤器进行三次卷积操作,
  • 再池化,得到28×28×256
  • 再卷积三次,使用512个过滤器,得到28×28×512
  • 再池化,得到14×14×512。如此进行几轮操作后,将最后得到的7×7×512的特征图进行全连接操作,得到4096个单元,然后进行softmax激活,输出从1000个对象中识别的结果。

参考文章:

吴恩达的深度学习-卷积神经网络,第四周

AlexNet - 知乎

卷积神经网络之VGG - 知乎

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

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

相关文章

Vue3_2024_1天【Vue3创建和响应式,对比Vue2】

前言&#xff1a; Vue3对比Vue2版本&#xff0c;它在性能、功能、易用性和可维护性方面都有显著的提升和改进。 性能优化&#xff1a;模板编译器的优化、对Proxy的支持以及使用了更加高效的Virtual DOM算法等。这使得Vue3的打包大小减少了41%&#xff0c;初次渲染提速55%&#…

k8s 集群调度,标签,亲和性和反亲和性,污点和容忍,pod启动状态 排错详解

目录 pod启动创建过程 kubelet持续监听的原因 调度概念 调度约束 调度过程 优点 原理 优先级选项 示例 指定调度节点 标签基本操作 获取标签帮助 添加标签&#xff08;Add Labels&#xff09;&#xff1a; 更新标签&#xff08;Update Labels&#xff09; 删除标…

练习 1 Web EasySQL极客大挑战

CTF Week 1 EasySQL极客大挑战 BUUCTF 典中典复习 Web SQL 先尝试输入&#xff0c;找一找交互页面 check.php 尝试万能语句 a’ or true SQL注入&#xff1a;#和–的作用 get传参只能是url编码&#xff0c;注意修改编码&#xff0c;输入的字符串要改成url格式。 POST请求和…

从基础到高级:Go 语言中 Base32 编码的全面指南

从基础到高级&#xff1a;Go 语言中 Base32 编码的全面指南 引言基础知识base32 编码简介为什么选择 base32 encoding/base32 包概览包的结构和主要类型基本概念 实战教程开始使用 encoding/base32设置开发环境基本的 base32 编码示例解码示例 深入编码细节使用不同的编码表 错…

【Spring云原生】Spring官宣,干掉原生JVM,推出 Spring Native!整体提升性能!Native镜像技术在Spring中的应用

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &#x1f680; 本…

大模型之SORA技术学习

文章目录 sora的技术原理文字生成视频过程sora的技术优势量大质优的视频预训练库算力多&#xff0c;采样步骤多&#xff0c;更精细。GPT解释力更强&#xff0c;提示词(Prompt&#xff09;表现更好 使用场景参考 Sora改变AI认知方式&#xff0c;开启走向【世界模拟器】的史诗级的…

Redis在中国火爆,为何MongoDB更受欢迎国外?

一、概念 Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个使用ANSI C编写的开源、支持网络、基于内存、分布式、可选持久性的键值对存储数据库。Redis是由Salvatore Sanfilippo于2009年启动开发的&#xff0c;首个版本于同年5月发布。 MongoDB MongoDB…

亿道信息发布两款升级款全加固笔记本电脑

2022年5月19日&#xff0c;加固手持终端。加固平板电脑、加固笔记本电脑专业设计商和制造商&#xff0c;以及加固型移动计算机软硬件整体定制解决方案提供商亿道信息&#xff0c;宣布对其两款广受欢迎的加固笔记本电脑产品EM-X14U和EM-X15U进行重大升级。新发布的两款升级款全加…

One Line of Code to Say Goodbye to Confusing Python Error Messages

该图片由15548337在Pixabay上发布 告别令人困惑的 Python 错误消息 灵活的错误消息增强库 — PrettyError 编程是一项活动&#xff0c;我们可能会用 20% 的时间将想法写成代码&#xff0c;然后用 80% 的时间清除错误并修复错误。错误消息绝对是我们每天都会看到的。但是&…

浅谈XSS简单漏洞xss-labs-master(初级)

一、环境以及xss漏洞简介 网上很多gethub自己下就行 XSS简介&#xff1a; 当用户访问被XSS注入的网页&#xff0c;XSS代码就会被提取出来。用户浏览器就会解析这段XSS代码&#xff0c;也就是说用户被攻击了。 用户最简单的动作就是使用浏览器上网&#xff0c;并且浏览器中有J…

案例介绍:汽车售后服务网络构建与信息抽取技术应用(开源)

一、引言 在当今竞争激烈的汽车行业中&#xff0c;售后服务的质量已成为品牌成功的关键因素之一。作为一位经验丰富的项目经理&#xff0c;我曾参与构建一个全面的汽车售后服务网络&#xff0c;旨在为客户提供无缝的维修、保养和配件更换服务。这个项目的核心目标是通过高效的…

自动化测试介绍、selenium用法(自动化测试框架+爬虫可用)

文章目录 一、自动化测试1、什么是自动化测试&#xff1f;2、手工测试 vs 自动化测试3、自动化测试常见误区4、自动化测试的优劣5、自动化测试分层6、什么项目适合自动化测试 二、Selenuim1、小例子2、用法3、页面操作获取输入内容模拟点击清空文本元素拖拽frame切换窗口切换/标…

统信UOS及麒麟KYLINOS操作系统上如何切换键盘布局

原文链接&#xff1a;如何切换键盘布局 | 统信UOS | 麒麟KYLINOS Hello&#xff0c;大家好啊&#xff0c;最近有朋友在群里提到他的键盘输入“Y”会显示“Z”&#xff0c;输入“Z”会显示“Y”。这个问题听起来可能有些奇怪&#xff0c;但其实并不罕见。出现这种情况的原因&…

SpringMVC总结

SpringMVC SpringMVC是隶属于Spring框架的一部分&#xff0c;主要是用来进行Web开发&#xff0c;是对Servlet进行了封装。 对于SpringMVC我们主要学习如下内容: SpringMVC简介 请求与响应 REST风格 SSM整合(注解版) 拦截器 SpringMVC是处理Web层/表现层的框架&#xff…

langchain学习笔记(九)

RunnableBranch: Dynamically route logic based on input | &#x1f99c;️&#x1f517; Langchain 基于输入的动态路由逻辑&#xff0c;通过上一步的输出选择下一步操作&#xff0c;允许创建非确定性链。路由保证路由间的结构和连贯。 有以下两种方法执行路由 1、通过Ru…

AI算法项目优化流程

算法优化的调试流程可以根据具体情况有所不同&#xff0c;但通常包括以下关键步骤&#xff0c;希望对大家有所帮助。通过以下流程&#xff0c;可以有效地识别和解决算法优化过程中的问题&#xff0c;提升算法性能和稳定性。北京木奇移动技术有限公司&#xff0c;专业的软件外包…

制作耳机壳的UV树脂和塑料材质相比优势有哪些?

制作耳机壳的UV树脂相比塑料材质有以下优势&#xff1a; 高强度与耐磨性&#xff1a;UV树脂具有高强度和耐磨性&#xff0c;能够更好地保护耳机内部零件&#xff0c;延长耳机使用寿命。相比之下&#xff0c;塑料材质可能较易磨损或刮伤。耐高温&#xff1a;UV树脂具有较好的耐…

排序——归并排序

归并排序和快排一样&#xff0c; 都是一种利用二叉树分治思想实现的排序。同时归并排序也和快排一样有递归归并排序和非递归归并排序两种。 本节主要复习归并排序&#xff0c; 并且两种实现方式都会复习到。 递归归并 要实现递归归并排序的代码。 我们首先需要理解递归归并排序…

PyTorch-神经网络

神经网络&#xff0c;这也是深度学习的基石&#xff0c;所谓的深度学习&#xff0c;也可以理解为很深层的神经网络。说起这里&#xff0c;有一个小段子&#xff0c;神经网络曾经被打入了冷宫&#xff0c;因为SVM派的崛起&#xff0c;SVM不了解的同学可以去google一下&#xff0…

stm32触发硬件错误位置定位

1.背景 1. 项目中&#xff0c;调试过程或者测试中都会出现程序跑飞问题&#xff0c;这个时候问题特别难查找。 2. 触发硬件错误往往是因为内存错误。这种问题特别难查找&#xff0c;尤其是产品到了测试阶段&#xff0c;而这个异常复现又比较难的情况下&#xff0c;简直头疼。…