当前位置: 首页 > news >正文

【通俗易懂说模型】一篇弄懂几个经典CNN图像模型(AlexNet、VGGNet、ResNet)

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 

目录

1. 前言

2. AlexNet

3. VGGNet

4. ResNet

5. SqueezeNet

6. 总结


1. 前言

        进入这篇文章之前,想必大家已经阅读过前面的系列文章:

【通俗易懂说模型】线性回归(附深度学习、机器学习发展史)-CSDN博客

【通俗易懂说模型】非线性回归和逻辑回归(附神经网络图详细解释)-CSDN博客

【通俗易懂说模型】反向传播(附多元分类与Softmax函数)-CSDN博客

【通俗易懂说模型】卷积神经网络(呕心沥血版)-CSDN博客

        通过前面的文章, 猫猫相信友友们对深度学习、机器学习一定有了一个较为全面且细致的理解,接下来的本篇文章,将基于前面提到的回归、反向传播、卷积神经网络等知识,从深度学习在图像识别领域发展的历史脉络出发,带你遨游几大经典模型。从模型学习深度学习中的奇思妙想,感悟前辈伟人的思想精华🥰~~

2. AlexNet

        AlexNet是2012年ImageNet竞赛中获得冠军的卷积神经网络模型,其准确率领先第二名ISI模型10%。由于当时GPU计算速度有限,所以采用了两台GPU服务器进行计算。如下图所示,该模型共分为8层,其中有5个卷积层(特征层),3个全连接层。下面我们对每一层卷积层进行分析。

卷积层:也可以认为是特征层,严格意义上包括卷积层和激活层,用于提取特征。

全连接层:对特征(局部特征、全局特征)全连接,从而学习组织方式, 最终用于分类等。

        一、第一层卷积和池化过程。如下图所示,在第一层卷积层中,我们采用11×11的过滤器对尺寸为224×224的图片进行卷积,产生96张55×55的特征图(由于是彩色图片,所以第三个维度是3,下面对此不再进行特别说明)。然后使用ReLU函数,使特征图内的数值保持在合理的范围内。接着使用3×3的核进行池化,最终生成96张27×27的特征图。 

输出图片大小和卷积的关系:

        二、第二层卷积和池化过程。如下图所示,在第二层卷积层中,采用5x5的过滤器进行卷积,产生256张27x27的特征图。再经过ReLU函数后,使用3x3的核进行池化,得到256张13x13的特征图。 

三个要点:

  • 卷积输出通道数等于卷积核数量。例如上图卷积核数量为256。
  • 卷积核通道数等于输入图片通道数。例如上图卷积核通道数为96,卷积核大小为5*5。
  • 越上层提取的成分越抽象。每一次卷积会利用到前面所有的底层知识组合成上层知识。

        三、第三层卷积过程。如下图所示,在第三层卷积层中没有池化,采用3x3的过滤器进行卷积,产生384张13x13的特征图,然后经过ReLU函数(特征提取层中池化不是必须的)。

         四、第四层卷积过程。如下图所示,在第四层卷积层中也没有池化,采用3×3的过滤器进行卷积,产生384张13x13的特征图,然后经过ReLU函数。

        五、第五层卷积过程。如下图所示,在第五层卷积层中,采用3×3的过滤器进行卷积,产生256张13x13的特征图,经过ReLU函数,然后使用3x3的核进行池化,产生256张6x6的特征图。

        六、三层全连接层。在第六层中,我们将256张6×6的特征图全连接到2048个神经元节点上,经过ReLU激活层,再进行Dropout。Dropout是前向传播过程中随机丢弃的一些神经网络层节点,这种方法可以有效避免模型过拟合。在第七层中,将2048个神经元节点全连接到2048个神经元上,经过ReLU激活层,进行Dropout。在第八层中,将2048个神经元全连接到1000个神经元输出节点,因为我们进行的是1000个分类的任务。

3. VGGNet

        VGGNet是牛津大学计算机视觉组和GoogleDeepMind公司研究员一起研发的深度卷积神经网络在2014年的ImageNetILSVRC中取得了亚军。VGGNet探索了卷积神经网络的深度和性能之间的关系,通过多次堆叠3×3的过滤器和2×2的最大池化层,使得网络层数总体变多,达到了16层~19层。与只有8层的AlexNet相比,VGGNet具有参数的神经网络层数翻了一倍多。

        VGGNet采用了多个3x3的卷积核来代替AlexNet中11x11和5x5的卷积核,这样做的目的是减少参数的数量。具体是如何做到的呢?如下图所示,两个3×3的卷积核效果相当于一个5x5的卷积
核效果。倘若被卷积的特征图数为N,卷积之后得到的特征图数为M,则使用两次3×3卷积核的总参数为18NM,使用一次5×5卷积核的总参数为25NM。类似地,3个3×3的卷积核相当于1个7x7的卷积核,而1个7×7的卷积核的总参数为49NM,而3个3×3卷积核的总参数量仅为27NM。

相同硬件条件下,训练所能接受的参数总量是有限的:

  • VGGNet利用将5*5分解为两个3*3从而减少了参数量,可以增加更多网络结构。
  • 同时一层5*5变为两层3*3让整体网络结构变得更深,探索了卷积神经网络的深度和性能之间的关系

        如下图所示,VGGNet有5段卷积,每一段卷积由2~4个3x3的卷积核与1个池化层构成,取
大小为3x3的卷积是因为3x3可以同时获取上下左右像素信息的最小卷积核。所有卷积的步长均为1,padding也为1。这种利用多个小卷积核代替一个大卷积核的方式有两个好处:一是减少了训练的参数量,减少资源占用率;二是增加了非线性变换的次数,提高网络对特征的学习能力。该网络也同时证明:在一定条件下,网络结构越深,网络的学习能力就越好,分类能力就越强。

使用3*3代替5*5卷积核的优点: 

  • 减少参数,减少运算量达到同样效果。
  • 两个3*3代替5*5网络结构更深,增加了非线性变换的次数,更有利于分类。

4. ResNet

        我们刚才在VGGNet里受到了启发,觉得网络结构越深越好,但是事实上却不是那么容易。如下图所示,20层的卷积神经网络无论是在训练集还是在测试集,其误差都比56层的要小。也就是说,如果在不进行任何特殊处理的情况下增加层数,较深的网络会有更大的误差。其中的原因之一是网络越深,梯度消失的现象就越来越明显,网络的训练效果也不会很好,我们把该问题称为“退化”。但是现在,浅层的网络又无法明显提升网络的识别效果,所以要解决的问题就是怎样在加深网络的情况下解决“退化”的问题。

问题

  • 网络结构越深整体效果越好。
  • 但是网络深到一定程度后因为梯度消失的原因导致训练效果下降,出现“退化”现象。

对梯度消失的理解:

  • 假设一个神经网络有多个线性层,每个层的权重都是一个较大的正数。当输入数据经过这些层计算时,每个层的输出都会变得越来越大,导致接下来的层需要处理的数值也越来越大。这时候,在反向传播的时候,计算梯度时,因为涉及到乘积,这些大的数值相乘会导致梯度变得非常小,甚至趋近于零。这就是梯度消失的原因。
  • 🌰举个例子,假设有一个三层神经网络,每层的权重都是2。假设输入是1,那么经过第一层后变成2,经过第二层变成4,经过第三层变成8。在反向传播的时候,梯度会按照链式法则计算,每次乘以权重。所以,梯度会是1乘以2,乘以2,再乘以2,也就是8。如果权重更大,比如3,那么梯度会是1×3×3×3=27,这样梯度会变得越来越大,而不是变小。但是,如果权重都是0.5,那么前向传播时数值变小,反向传播时梯度会是1×0.5×0.5×0.5=0.125,也就是梯度变小,这时候梯度消失。所以,当权重的绝对值小于1时,梯度会逐渐变小,导致梯度消失;而如果权重的绝对值大于1,梯度会逐渐变大,导致梯度爆炸。

  • 梯度消失会导致每次参数更新的很少,结果就是训练始终无法收敛,同时遗忘模型前面的训练块,模型效果很差

  • 梯度爆炸会导致每次参数更新都很大,结果就是训练结果波动性强,同样无法收敛,模型效果差

        针对这个问题,微软研究团队提出了ResNet模型,成功地解决了上述难题,并获得了2015年的ImageNet比赛的冠军。ResNet模型引入残差网络结构,可以成功地训练层数高达152层的神经网络。该残差网络结构如下图所示,在两层或两层以上的节点两端添加了一条“捷径”,这样一来,原来的输出F(x)就变成了F(x)+x。就是这一点点的小改动,我们就可以直接使用传统的反向传播训练法对非常深的神经网络进行训练,并且收敛速度快,误差小。

        下图给我们展示了2015年时赢得ImageNet比赛冠军的ResNet模型,我们可以看到该网络的特别之处在于每隔两层就设置了一个“捷径”。

        为何ResNet的这种连接方式可以“解决”之前的“退化”问题呢?我们先来观察一下下图,可以发现,左边我们熟悉的残差网络模块可以看成右边的串联关系。可以把右边的图联想为串联的电路,把数据经过的神经网络层看成是电阻元件。我们知道在串联电路中,电阻越小的支路,电流就越大,对总输出电流的贡献比例就越大。再回到残差网络模块,梯度进行反向传播时,会因为所遇层数的增多而不断变小如果我们把梯度传播时遇到的神经网络层看成是一种“阻力”的话,那么这些“捷径”就会因为“阻力”小而把梯度顺利地反传回来,不至于“消失”,如此一来,“退化”的问题就被顺利解决了。有了残差网络模块,我们可以疯狂地叠加神经网络层,甚至到达1000层以上。

5. SqueezeNet

        在很多实际的运用中,我们希望神经网络模型在尽量小的情况下保持足够的精度。例如,在自动驾驶汽车这一应用中,我们并不希望把入上传到服务器进行识别,如果这么做会产生延迟,很可能发生车祸。这时候,我们希望自动驾驶汽车能够从网络上下载神经网络模型,直接在本地进行实时的识别。除此之外,移动手机上的人工智能产品也同样希望直接在本地进行识别,避免网络传输所带来的长时间等待。我们以前一直在关注如何通过提高模型的复杂度来提高模型识别的正确率。在相同的正确率下更小的神经网络模型有如下3个优势:

  • 在分布式的训练中,模型越小,各计算节点的通信需求就越小,从而训练得更快:
  • 模型越小,从云端下载的数据量就越小;
  • 更小的神经网络模型更适合在内存和硬盘资源有限的设备上部署。

        为了解决模型太大的问题,UCBerkeley和Stanford研究人员提出了SqueezeNet模型,其识别精度与AlexNet相同,但模型大小却只有AlexNet的1/50,如果再加上其他的模型压缩技术,可以缩小至0.5MB,即仅为AlexNet模型大小的1/510。SqueezeNet采用以下3种策略来优化模型:

  • 使用1×1卷积来代替3x3卷积,减少模型参数(1*1卷积块本质上可以认为仅仅在通道层面卷积了一下,并没有考虑局部特征的联系);
  • 减少输入的通道数,减少模型参数;
  • 延后池化,保留更多信息,提高准确率。(本身参数量很少就不需要池化来减少特征值了)。

 假如一张图片如下:

可以认为其仅仅展示了各自的位置信息

卷积后如下:

可以认为除了位置信息还包含彼此的联系信息,因此卷积核越少处理后包含的联系信息更少,因此计算量更小

        具体来说,SqueezeNet设计了一个叫Fire Module的模块,其结构如下图所示,该模块分为压缩和扩展两个部分。首先压缩部分是由若干1×1的卷积核构成,图中示例使用了3个卷积核。而扩展部分包含1×1的卷积核和3×3的卷积核,这里使用了4个1×1卷积核及4个3×3卷积核。假设输入的通道数为5,在压缩部分,我们使用3个1×1卷积核,将输入的通道数压缩为3,然后分别经过4个1×1和4个3x3卷积核后,将输出进行合并,最后得到8张特征图。

        随着卷积神经网络的发展,我们经常搭配一些固定的卷积核,构造成一个微结构进行使用,从而方便网络设计。SqueezeNet的FireModule也是一个微结构,如下图所示。在Fire Module这个微结构中,分为压缩和扩展两部分卷积核,压缩模块采用了3个1x1卷积核,因此S1x1=3;扩展模块中我们采用了4个1×1卷积核和4个3x3卷积核,因此e1x1=4,e3x3=4。在每个卷积之后,都经过了非线性函数ReLU的处理,我们要求S1x1<e1x1+e3x3以限制输入通道数。

        整个SqueezeNet结构如下图所示,左边是原始的SqueezeNet,我们分别在conv1、fire4、fire8、conv10之后加池化层,这样做推迟了池化而保留了更多的信息,提高识别精度。中间和右边借鉴了ResNet的做法,在各层之间加人了许多“捷径”,化解“退化”问题,提高识别正确率。在最后的池化层里,使用全局平均池化(GlobalAveragePooling,GAP)来代替以往的全连接层,节省了大量参数。

        全局平均池化是直接利用特征图来计算对应分类的概率相关值。如下图所示,以上面的任务为例,我们需要对1000个类进行分类。那么在最后一层卷积层的输出部分,我们设置输出为1000张特征图,然后对每一张特征图求平均值。接着将1000个平均值输入softmax函数,得到1000个类的概率。

全局平均池化:

  • 池化代表减少参数量。从特征图最后降维一个概率自然是池化
  • 全局代表直接求1000个类的概率。
  • 平均是指这个概率是特征图的概率的平均值。
  • 全剧平均池化可用来代替全连接层求解分类问题

怎么理解全局平均池化分类和全连接后分类?

       1、全局平均池化就是直接拿特征图去分类,如下图:

将一个狗狗分为好几块,然后得到的就是一个个特征图。全局平均池化就是直接看后面乱序的特征图去判断是不是狗

       2、全连接后分类就是得到特征图后,通过全连接拼凑出狗狗的图片,如下图:

然后再用这个完整有序的图片去判断是不是狗

6. 总结

【如果想学习更多深度学习文章,可以订阅一下热门专栏】

深度学习_十二月的猫的博客-CSDN博客

PyTorch实战深度学习80例_十二月的猫的博客-CSDN博客

零基础入门PyTorch框架_十二月的猫的博客-CSDN博客

如果想要学习更多pyTorch/python编程的知识,大家可以点个关注并订阅,持续学习、天天进步

你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~

相关文章:

【通俗易懂说模型】一篇弄懂几个经典CNN图像模型(AlexNet、VGGNet、ResNet)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;深度学习_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …...

机器学习 | scikit-learn中分块拟合vs一次性拟合所有数据

Scikit-learn是一个广泛使用的机器学习Python库&#xff0c;提供了一系列分类、回归、聚类等算法。机器学习的关键挑战之一是处理无法一次性放入内存的大型数据集。本文探讨了使用scikit-learn将数据分块拟合与一次性拟合的策略&#xff0c;讨论了每种方法的优点和局限性。 大…...

两个同一对象targetList和 sourceList 去重

我现在需要解决的问题是从一个Java的源列表`sourceList`中移除所有在目标列表`targetList`中存在的数据,并且还要去除`targetList`中的重复数据。让我先理清楚这两个问题的思路。 首先,如何快速从`sourceList`中移除含有`targetList`的数据。这里的“含有”应该是指两个列表中…...

小游戏源码开发之可跨app软件对接是如何设计和开发的

专业小游戏开发的团队往往会面临跨领域和不同平台客户需要追加同一款游戏的需求&#xff0c;所以就要设计和开发一款可任意对接不同 App 软件的小游戏&#xff0c;那么针对这类需求小游戏开发团队早已有了成熟的解决方案&#xff0c;针对设计和开发可跨平台游戏对接大概流程简单…...

掌握正则表达式_模式匹配的艺术

当然,以下是《掌握正则表达式:模式匹配的艺术》文章内容,使用 Java 正则表达式,并包含丰富的代码示例: 1. 引言 1.1 正则表达式的定义与历史 正则表达式(Regular Expression,简称 regex 或 regexp)是一种用于描述文本模式的强大工具。它最初由数学家 Stephen Kleene…...

FacePoke详细使用指南:如何利用开源AI工具优化照片人物表情

文章目录 前言1. 本地使用FacePoke1.1 整合包方式安装1.2 Docker方式部署 2. FacePoke功能演示3. 公网使用FacePoke3.1 创建远程连接公网地址 4. 固定远程访问公网地址 前言 在数字创意的世界里&#xff0c;一款名为FacePoke的工具正以其风趣而强大的功能吸引着无数创作者的目…...

本地部署【LLM-deepseek】大模型 ollama+deepseek/conda(python)+openwebui/docker+openwebui

通过ollama本地部署deepseek 总共两步 1.模型部署 2.[web页面] 参考官网 ollama:模型部署 https://ollama.com/ open-webui:web页面 https://github.com/open-webui/open-webui 设备参考 Mac M 芯片 windows未知 蒸馏模型版本:deepseek-r1:14b 运行情况macminim2 24256 本地…...

分发饼干(力扣455)

从这道题开始我们就进入贪心算法的学习了。这个算法没有固定的套路&#xff0c;甚至题目之间的联系也很少&#xff0c;基本上每一道题都要当新题来写。我们能做的只有见多识广&#xff0c;这样才有机会在考试中根据以往经验解决贪心的题目。贪心的本质上就是找到局部最优解&…...

信息收集-主机服务器系统识别IP资产反查技术端口扫描协议探针角色定性

知识点&#xff1a; 1、信息收集-服务器系统-操作系统&IP资产 2、信息收集-服务器系统-端口扫描&服务定性 一、演示案例-应用服务器-操作系统&IP资产 操作系统 1、Web大小写(windows不区分大小写&#xff0c;linux区分大小写) 2、端口服务特征(22就是linux上的服…...

建筑兔零基础自学python记录18|实战人脸识别项目——视频检测07

本次要学视频检测&#xff0c;我们先回顾一下图片的人脸检测建筑兔零基础自学python记录16|实战人脸识别项目——人脸检测05-CSDN博客 我们先把上文中代码复制出来&#xff0c;保留红框的部分。 ​ 然后我们来看一下源代码&#xff1a; import cv2 as cvdef face_detect_demo(…...

vue-点击生成动态值,动态渲染回显输入框

1.前言 动态点击生成数值&#xff0c;回显输入框&#xff0c;并绑定。 2.实现 <template><div style"display:flex;align-items: center;flex-direction:row"><a-input:key"inputKey"v-model"uploadData[peo.field]"placehold…...

Idea 插件 Quickly-Code-Toolkit

使用说明 &#xff08;一&#xff09;全局设置 Paging Wrapper Setting&#xff08;分页设置&#xff09; 功能&#xff1a;主要用于在方法写入时&#xff0c;为返回参数提供分页包装类。设置方式&#xff1a;需准确填写分页包装类的全限定名&#xff0c;例如&#xff1a;com…...

fun-transformer学习笔记-Task1——Transformer、Seq2Seq、Encoder-Decoder、Attention之间的关系

Transformer、Seq2Seq、Encoder-Decoder、Attention由这四者之间的关系可以从模型架构的发展脉络来理解&#xff1a; Seq2Seq 与 Encoder–Decoder 模型 “Seq2Seq”&#xff08;sequence‐to‐sequence&#xff09;是一类用于将一个变长序列映射为另一个变长序列的任务&#x…...

使用瑞芯微RK3588的NPU进行模型转换和推理

使用边缘设备进行算法落地时&#xff0c;通常要考虑模型推理速度&#xff0c;NVIDA系列平台可以使用TensorRT和CUDA加速&#xff0c;瑞芯微RK3588的板子上都是Arm的手机GPU&#xff0c;虽然没有类似CUDA的加速计算方式&#xff0c;但是提供了NPU进行加速推理&#xff0c;本文说…...

mysql读写分离与proxysql的结合

上一篇文章介绍了mysql如何设置成主从复制模式&#xff0c;而主从复制的目的&#xff0c;是为了读写分离。 读写分离&#xff0c;拿spring boot项目来说&#xff0c;可以有2种方式&#xff1a; 1&#xff09;设置2个数据源&#xff0c;读和写分开使用 2&#xff09;使用中间件…...

Vue笔记(九)

一、文章分类架子--PageContainer 学习PageContainer组件的封装&#xff0c;这一组件用于搭建页面基础结构&#xff0c;为后续内容展示提供统一布局。它可能包含通用的页面样式、导航栏、侧边栏等基础元素的结构搭建。 在Vue组件中&#xff0c; <template> 标签内定义基础…...

YOLO11框架使用

YOLO11 1. Frame Understanding2. What can YOLO11 do?3.如何训练自己数据集?3.1 配置环境3.2 制作自己数据集3.3 配置文件3.3.1 数据集配置文件3.3.2 网络模块配置文件4.修改训练参数配置文件5. 训练脚本编写6.结果展示1. Frame Understanding 2. What can YOLO11 do? Ult…...

RK3588视觉控制器与AI 算法:开启工业视觉检测新境界

在实际应用中&#xff0c;工业相机拍摄产品的图像&#xff0c;RK3588 迅速接收并进行预处理。AI 算法随即对图像进行深入分析&#xff0c;提取特征并与预设的标准进行对比&#xff0c;从而准确判断是否存在缺陷。 例如&#xff0c;在电子元件生产线上&#xff0c;RK3588 和 AI…...

C语言基础入门:2.5基础输入输出

【C语言基础】输入输出完全指南&#xff1a;从printf到缓冲区安全 文章目录 【C语言基础】输入输出完全指南&#xff1a;从printf到缓冲区安全一、格式化输出艺术&#xff1a;printf函数详解二、scanf输入安全与缓冲区处理三、字符级交互&#xff1a;getchar与putchar实战程序员…...

压缩stl文件大小

1、MeshLab下载界面&#xff0c;从MeshLab下载适合自己系统的最新版本。 2、打开 MeshLab软件&#xff0c;将stl文件拖入其中。 3、 4、Percentage reduction参数即为缩放比例&#xff0c;根据自身想要将文件压缩到多大来。 然后点击apply 5、CtrlE弹出窗口保存文件后&…...

二、交换机的vlan子设备接入

一、交换机的vlan设置-CSDN博客 二、交换机的vlan子设备接入-CSDN博客 接上篇的文章&#xff0c;本文接入了子设备 网络结构如下&#xff1a; 用路由器A和POE交换机B代替第一篇中的笔记本电脑&#xff0c;路由器A和交换机B都关闭DHCP服务&#xff0c;并分别接入一个IPC&#…...

KEPServerEX 的接口类型与连接方式的详细说明

目录 一、KEPServerEX 核心架构 二、KEPServerEX 支持的接口类型 三、KEPServerEX 支持的连接类型 1. 通用工业协议 2. 品牌专属协议 3. 行业专用协议 4. 数据库与文件接口 四、配置示例 1. 接口配置&#xff08;以OPC UA为例&#xff09; 2. 连接配置&#xff08;以…...

Stack(栈)

定义&#xff1a;在Java编程语言中&#xff0c;栈(Stack)是一种非常重要的数据结构&#xff0c;具有后进先出的特性&#xff0c;即最后入栈的元素最先出栈。栈通常用于存储临时性的数据&#xff0c;如方法调用过程中的局部遍历、操作数栈等。 图像理解&#xff1a; 我们在这里要…...

【Vue3 Computed 与 Watch 维护对比】

让我们从开发体验和维护性的角度深入对比 computed 和 watch&#xff0c;通过具体场景分析它们的差异&#xff1a; 一、维护成本对比 1. 依赖管理差异 // 原始代码 const productFilter computed(() > {return products.value.filter((p) > p.price > minPrice.val…...

在node.js环境中使用web服务器http-server运行html静态文件

http-server http-server是一个超轻量级web服务器&#xff0c;它可以将任何一个文件夹当作服务器的目录供自己使用。 当我们想要在服务器运行一些代码&#xff0c;但是又不会配置服务器的时候&#xff0c;就可以使用http-server就可以搞定了。 使用方法 因为http-server需要…...

详解电子邮箱工作原理|SMTP、POP3、IMAP、SPF、MIME

写在前面 电子邮件&#xff08;Email&#xff09;是一种通过互联网进行异步通信的技术&#xff0c;工作原理涉及多个协议、服务器和客户端协同工作。 接下来我们来介绍一下电子邮箱的工作原理 1. 电子邮件的核心组成部分 邮件客户端&#xff1a;用户直接交互的软件&#xf…...

算法学习笔记之并查集

简介 问题描述&#xff1a;将编号为1-N的N个对象划分为不相交集合&#xff0c;在每个集合中&#xff0c;选择其中的某个元素代表所在集合。 常见两种操作&#xff1a; 1.合并两个集合 2.查找某元素属于哪个集合 实现方法1 用编号最小的元素标记所在集合&#xff1b; 定义…...

【开源项目】ShowDoc适合IT团队的在线API文档、技术文档工具

1. 介绍 通过showdoc&#xff0c;可以方便地使用markdown语法来书写出美观的API文档、数据字典文档、技术文档、在线excel文档等等。还可以利用showdoc的自动化能力&#xff0c;从程序注释中自动生成API文档&#xff0c;或者从搭配的RunApi客户端&#xff08;类似postman的api…...

Tomcat添加到Windows系统服务中,服务名称带空格

要将Tomcat添加到Windows系统服务中&#xff0c;可以通过Tomcat安装目录中“\bin\service.bat”来完成&#xff0c;如果目录中没有service.bat&#xff0c;则需要使用其它方法。 打到CMD命令行窗口&#xff0c;通过cd命令跳转到Tomcat安装目录的“\bin\”目录&#xff0c;然后执…...

SQL最佳实践(笔记)

写在前面&#xff1a; 之前baeldung的Java Weekly &#xfeff;Reviews里面推荐了一篇关于SQL优化的文章&#xff0c;正好最近在学习数据库相关知识&#xff0c;记一些学习笔记 原文地址&#xff1a;SQL Best Practices Every Java Engineer Must Know 1. 使用索引 使用索引…...

历史性突破!DeepSeek双模型GitHub热度超OpenAI,展现中国AI力量

在2025年2月7日&#xff0c;中国AI领域传来了一则振奋人心的消息&#xff1a;DeepSeek旗下的两大开源项目在GitHub平台上实现了历史性突破&#xff0c;其Star数成功超越了OpenAI的明星项目。这一成就不仅标志着DeepSeek在技术研发和市场影响力上的重大飞跃&#xff0c;也为中国…...

deepseek+kimi一键生成PPT

1、deepseek生成大纲内容 访问deepseek官方网站&#xff1a;https://www.deepseek.com/ 将你想要编写的PPT内容输入到对话框&#xff0c;点击【蓝色】发送按钮&#xff0c;让deepseek生成内容大纲&#xff0c;并以markdown形式输出。 等待deepseek生成内容完毕后&#xff0c…...

Java学习

一、赋值 赋值表达式&#xff0c;左边一定是变量&#xff0c;右边是变量或者数值&#xff0c;变量与数值都有类型&#xff0c;(数值里整数默认int,小数默认double) 类型由小转大&#xff0c;存储空间变大&#xff0c;数据不会丢失&#xff0c;是安全的&#xff0c;在需要时编译…...

Shell-基本命令与运算符

1.为什么要进行shell编程? 在Linux系统中&#xff0c;虽然有各种各样的图形化接口工具&#xff0c;但是shell仍然是一个非常灵活的 工具。 Shell不仅仅是命令的收集&#xff0c;而且是一门非常棒的编程语言。 您可以通过使用shell使大量的任务自动化&#xff0c; 因此&#…...

JUnit 5 自定义注解:方法级 JSON 参数注入

JUnit 5 自定义注解&#xff1a;方法级 JSON 参数注入 为了实现 在测试方法上使用注解&#xff0c;并通过注解属性指定参数名称和 JSON 字符串&#xff08;转换为 Java 对象&#xff09;&#xff0c;以下是基于 JUnit 5 正确扩展接口的解决方案&#xff1a; 一、实现步骤 1. …...

anolis os 8.9安装jenkins

一、系统版本 # cat /etc/anolis-release Anolis OS release 8.9 二、安装 # dnf install -y epel-release # wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo # rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.…...

【CXX】0 Rust与C 互操作利器:CXX库介绍与示例

CXX库是一个非常强大的工具&#xff0c;它使得Rust和C之间的互操作性变得既安全又高效。本专栏将展示如何使用CXX库来桥接Rust和C代码&#xff0c;同时保持两者语言的特性和惯用法。 一、关键概念回顾 类型安全&#xff1a;CXX库通过静态分析类型和函数签名来保护Rust和C的不…...

tensorflow环境中已安装库

1. 深度学习课前准备工作 Anaconda3、TensorFlow和keras安装方法 1 下载Anaconda&#xff1a; Anaconda3-5.2.0-Windows-x86_64.exe 双击安装&#xff0c;选定环境变量 2 开始菜单打开Anaconda Prompt&#xff1a;&#xff08;2、3、4有链接科学上网&#xff09; 创建环境&am…...

构建现代微服务安全体系:Spring Security、JWT 与 Spring Cloud Gateway 实践

构建现代微服务安全体系&#xff1a;Spring Security、JWT 与 Spring Cloud Gateway 实践 本文将基于提供的代码示例&#xff0c;详细介绍如何在一个Java微服务项目中使用Spring Security、JWT和Spring Cloud Gateway来构建一个高效且安全的微服务体系&#xff0c;并整合性能优…...

蓝桥杯(B组)-每日一题(求最大公约数最小公倍数)

题目&#xff1a; 代码展现&#xff1a; #include<iostream> using namespace std; int main() {int m,n,x,y;cin>>m>>n;//输入两个整数int b;bm%n;//取余数xm;//赋值yn;while(b)//当余数不为0的时候{xy;//辗转相除求最小公约数yb;bx%y;}cout<<y<&…...

RocketMQ、RabbitMQ、Kafka 的底层实现、功能异同、应用场景及技术选型分析

1️⃣ 引言 在现代分布式系统架构中&#xff0c;&#x1f4e9;消息队列&#xff08;MQ&#xff09;是不可或缺的组件。它在系统&#x1f517;解耦、&#x1f4c9;流量削峰、⏳异步处理等方面发挥着重要作用。目前&#xff0c;主流的消息队列系统包括 &#x1f680;RocketMQ、&…...

CEF132编译指南 MacOS 篇 - 构建 CEF (六)

1. 引言 经过前面一系列的精心准备&#xff0c;我们已经完成了所有必要的环境配置和源码获取工作。本篇作为 CEF132 编译指南系列的第六篇&#xff0c;将详细介绍如何在 macOS 系统上构建 CEF132。通过配置正确的编译命令和参数&#xff0c;我们将完成 CEF 的构建工作&#xf…...

使用stm32控制esp01s

title: 使用stm32控制esp01s date: 2025年2月9日 18:41:20 tags: 单片机模块使用 categories: stm32 description: 使用stm32控制esp01s连接WiFi查看内容等操作 前言 使用stm32f103控制esp01s是步入物联网的第一步&#xff0c;接下来的文章会详细讲解如何使用stm32控制esp01s…...

返回倒数第N个链表节点

力扣题目&#xff1a;LCR 140. 训练计划 II - 力扣&#xff08;LeetCode&#xff09; 给定一个头节点为 head 的链表用于记录一系列核心肌群训练项目编号&#xff0c;请查找并返回倒数第 cnt 个训练项目编号。 示例 1&#xff1a; 输入&#xff1a;head [2,4,7,8], cnt 1 输…...

一、计算机等级考试——标准评分

&#xff08;1&#xff09;选择题 未做选择题 &#xff08;2&#xff09;基本造作 &#xff08;3&#xff09;上网题 &#xff08;4&#xff09;文字题 &#xff08;5&#xff09;表格题 &#xff08;6&#xff09;演示文稿 二、计算机等级考试——题库 &#xff08;1&#x…...

tweenjs动画

目录 ​编辑 安装 HTML中应用 Threejs中应用 安装 npm install tweenjs/tween.js HTML中应用 <script src"https://cdnjs.cloudflare.com/ajax/libs/tween.js/23.1.3/tween.umd.js"></script><div id"box"></div><style…...

IGBT工作原理

IGBT其实可以看成是BJT和MOS管的融合体&#xff0c;IGBT具有BJT的输入特性和mos管的输出特性。与 BJT 或 MOS管相比&#xff0c;绝缘栅双极型晶体管 IGBT 的优势在于它提供了比标准双极型晶体管更大的功率增益&#xff0c;以及更高的工作电压和更低的 MOS 管输入损耗。 IGBT是绝…...

FlashDecoding

Flash Attention是将Q划分到所有SM block上。每个SM block上的Q&#xff0c;负责和所有K和所有V进行计算&#xff0c;得到对应的结果。期间&#xff0c;SM block彼此之间&#xff0c;不需要通信。 在prefill阶段&#xff0c;seqLength*batchSize*Heads足够多&#xff0c;所以每…...

03:Spring之Web

一&#xff1a;Spring整合web环境 1&#xff1a;web的三大组件 Servlet&#xff1a;核心组件&#xff0c;负责处理请求和生成响应。 Filter&#xff1a;用于请求和响应的预处理和后处理&#xff0c;增强功能。 Listener&#xff1a;用于监听 Web 应用中的事件&#xff0c;实…...

OpenWebUI使用DeepSeek R1满血版,DeepSeek R1 API调用

https://www.dong-blog.fun/post/1935 API调用 登录这里&#xff1a; https://console.volcengine.com/ark/region:arkcn-beijing/endpoint?config%7B%7D 注册后&#xff0c;创建DeepSeek R1 API接入点&#xff1a; 接着Python就可以直接调用了&#xff1a; import os fro…...