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

卷积神经网络(CNN)基础

目录

一、应用场景

二、卷积神经网络的结构

1. 输入层(Input Layer)

2. 卷积层(Convolutional Layer)

3. 池化层(Pooling Layer)

最大池化(max_pooling)或平均池化( mean_pooling):

4. 全连接层(Fully Connected Layer)

5. 输出层(Output Layer)

 三、 Relu激活函数

四、 Softmax激活函数

定义和公式: 

五、损失函数(softmax_loss)

1、定义:

2. 作用(Function)

(1)衡量预测与真实标签之间的差异

(2)优化网络参数

(3)适用于多分类任务

(4)防止数值不稳定

(5)损失函数与Softmax的结合

3. 示例说明

4. 总结

 六、前向传播(forward propagation)

cnn例子图解: 

1.输入层---->卷积层

2.卷积层---->池化层 

3.池化层---->全连接层

4.全连接层---->输出层

七、反向传播 

八、参考文献


一、应用场景

        卷积神经网络的应用不可谓不广泛,主要有两大类,数据预测和图片处理。数据预测自然不需要多说,图片处理主要包含有图像分类,检测,识别,以及分割方面的应用。

图像分类:场景分类,目标分类

图像检测:显著性检测,物体检测,语义检测等等

图像识别:人脸识别,字符识别,车牌识别,行为识别,步态识别等等

图像分割:前景分割,语义分割

二、卷积神经网络的结构

        卷积神经网络主要是由输入层、卷积层、激活函数、池化层、全连接层、损失函数组成,表面看比较复杂,其实质就是特征提取以及决策推断。

        要使特征提取尽量准确,就需要将这些网络层结构进行组合,比如经典的卷积神经网络模型AlexNet:5个卷积层+3个池化层+3个连接层结构。

        卷积的作用就是提取特征,因为一次卷积可能提取的特征比较粗糙,所以多次卷积,以及层层纵深卷积,层层提取特征。

1. 输入层(Input Layer)

        ·输入层是CNN的起点,负责接收输入数据。在图像处理中,输入通常是一张RGB或灰度图像,其尺寸为宽度×高度×通道数(即 height × width × channels)。对于颜色图像,通道数为3(分别代表红、绿、蓝),而灰度图像通道数为1。

        定义:输入层的形状直接决定了网络处理的原始数据的大小和格式。

        作用:传递原始输入数据到网络中,为后续层提供基础数据。

        示例:比如,输入一张224×224×3的图像(224像素宽,224像素高,3个颜色通道),输入层会将这些数据传入网络,供后续的卷积层处理。

2. 卷积层(Convolutional Layer)

        卷积层是CNN的核心部分,负责从输入数据中提取局部特征。通过应用一组可学习的滤镜(kernel或filter),卷积层能够检测输入图像中的边缘、纹理或其他显著特征。

        定义:每一卷积层由多个滤镜组成,每个滤镜负责检测特定类型的特征。滤镜在输入图像上滑动,计算局部区域的点积,得到特征图(feature map)

作用

  • 特征提取:通过滤镜滑动,检测输入图像中的特征,如边缘、纹理等。
  • 权重共享:每个滤镜的参数在整个输入图像上共享,减少了参数数量,提升了计算效率。
  • 空间感受野:每个特征图中的每个单元只关注输入图像的局部区域,增强了网络对局部结构的感知能力。

        示例:假设输入图像为224×224×3,使用3×3×3的滤镜,步长为1,无填充。卷积计算后,输出特征图的尺寸为222×222×n(n为滤镜数量),每个特征图对应一种特定的特征。

3. 池化层(Pooling Layer)

        池化层的主要作用是降低特征图的尺寸,减少计算复杂度,同时提升网络的翻译不变性(即网络对输入图像的位置偏移的鲁棒性)。

定义:池化层通过在特征图上应用池化操作(如最大池化或平均池化),将局部区域的特征进行汇总,生成更小尺寸的特征图。

作用

  • 降维:通过池化操作减少特征图的空间尺寸,降低后续层的计算量。
  • 防止过拟合:池化操作丢弃了部分特征,减少了网络的复杂度,有助于防止过拟合。
  • 平移不变性:池化使得网络对目标位置的小范围偏移不那么敏感,增强了网络的稳健性。

示例:假设输入特征图为222×222×n,应用2×2的最大池化,步长为2。池化后的输出尺寸为111×111×n,特征图的尺寸减半,但保留了主要的特征信息。

最大池化(max_pooling)或平均池化( mean_pooling):

        mean_pooling 就是输入矩阵池化区域求均值,这里要注意的是池化窗口在输入矩阵滑动的步长跟stride有关,一般stride = 2.

        最右边7/4 => (1 + 1 + 2 + 3)/4

         max_pooling 最大值池化,就是每个池化区域的最大值放在输出对应位置上。

4. 全连接层(Fully Connected Layer)

        全连接层是传统的神经网络层,每个神经元都与前一层的所有神经元相连。在CNN中,全连接层通常用于将特征图展平(flatten)后,进行分类任务。

定义:全连接层接收展平的特征图作为输入,经过线性变换和激活函数,输出到下一个层或作为最终的预测输出。

作用

  • 特征整合:全连接层将来自不同区域和通道的特征进行综合,提供一个全局的特征向量。
  • 分类任务:通过全连接层,网络可以进行多类别的分类,输出每个类别的概率分数

示例:假设池化后的特征图为111×111×n,展平后为111×111×n = m个神经元。全连接层可能将m个输入映射到类别数为k的向量,每个元素表示对应类别的概率。

5. 输出层(Output Layer)

        输出层是CNN的最后一层,负责产生最终的分类结果或输出其他需要的任务结果。

定义:输出层的结构和激活函数取决于具体任务。例如,在分类任务中,输出层通常使用Softmax激活函数(后面有介绍),输出一个类别概率分布;在回归任务中,可能直接输出原始值。

作用

  • 预测结果:将前面的全连接层的输出转化为最终的预测结果。
  • 损失计算:输出层的输出与真实标签的对比,计算损失函数,指导网络的训练和参数优化。

示例:在分类任务中,输出层可能包含与类别数量相同的神经元,每个神经元对应一个类别的概率,如Softmax函数输出。 

 三、 Relu激活函数

1、 为什么要用激活函数?它的作用是什么?

        由 y = w * x + b 可知,如果不用激活函数,每个网络层的输出都是一种线性输出,而我们所处的现实场景,其实更多的是各种非线性的分布。

        这也说明了激活函数的作用是将线性分布转化为非线性分布,能更逼近我们的真实场景。

        它的公式:f(x)=max(0,x)。也就是说,对于任何输入x,如果x大于0,输出就是x;如果x小于等于0,输出就是0。这样,ReLU函数可以将负数全部剪切为0,而正数保持不变。 

        那Relu函数在卷积神经网络中有什么作用呢?卷积神经网络主要用于处理图像数据,比如分类、检测等任务。在这些任务中,激活函数是用来引入非线性,使模型能够更好地拟合复杂的函数。

        ReLU之前的激活函数,比如sigmoid或tanh,都有一个显著的问题:当输入很大的时候,梯度会变得非常小,导致训练速度变慢甚至停止。这被称为梯度消失问题。相比之下,ReLU函数在x>0时的梯度始终为1,这意味着在前向传播和后向传播过程中,梯度不会消失,这有助于加快训练速度。

        此外,ReLU能够保留输入的正部分,而将负部分置为0。这种稀疏性有助于减少计算量,因为不需要处理所有的负值。这也是为什么ReLU在计算效率上优于其他激活函数。

        不过,ReLU也有一些缺点。比如,当输入全是负数的时候,神经元会死亡,即输出总是0,无法更新权重。为了克服这个问题,出现了修正线性单元的变种,比如Leaky ReLU和ELU。

        总的来说,ReLU在卷积神经网络中起到了引入非线性、加快训练速度、减少计算量的重要作用。它帮助神经网络更好地拟合复杂的函数,提升模型的准确性和效率。

sigmoid或tanh的梯度消失问题原因:

        由下图可知:他们在x大于某个值时,输出值y就变成了一个恒定值,因为求梯度时需要对函数求一阶偏导数,而不论是sigmoid,还是tanhx,他们的偏导都为0(看斜率),也就是存在所谓的梯度消失问题,最终也就会导致权重参数w , b 无法更新。相比之下,Relu就不存在这样的问题,另外在 x > 0 时,Relu求导 = 1,这对于反向传播计算dw,db,是能够大大的简化运算的。

        使用sigmoid还会存在梯度爆炸的问题,比如在进行前向传播和反向传播迭代次数非常多的情况下,sigmoid因为是指数函数,其结果中某些值会在迭代中累积,并成指数级增长,最终会出现NaN而导致溢出。

四、 Softmax激活函数

         Softmax函数是一种常见的激活函数,主要用于分类任务中将模型的输出转化为概率分布。它的图像展示了输入向量如何被转换为概率向量。

定义和公式: 

        Softmax函数将一个向量转换为概率分布,使得每个元素的值在0到1之间,并且所有元素的和为1。这在分类任务中非常有用,因为它可以将模型的输出转化为类别概率。

        首先,让我画一个简单的图例。假设我们有一个输入向量,比如 SVM 训练得到的两个得分分别为 2 和 5。应用Softmax函数,这两个得分会被转换为两个概率值,分别是 e²/(e² + e⁵) ≈ 0.065 和 e⁵/(e² + e⁵) ≈ 0.935。这两个值加起来正好是1,表示第二个类别(得分5)的概率远大于第一个类别。

        接下来,我想分析一下Softmax函数的性质。Softmax函数的一个重要特点是对输入的相对值感兴趣。即使输入的绝对值很大,只要相对比例不变,输出的概率分布也不变。例如,如果两个得分都是乘以一个相同的常数,比如2和10,Softmax的结果仍然保持相同的概率分布。这是因为在这个过程中,e²和e¹⁰的计算已经考虑了相对大小。

  1. 作用

    • 将输入的每个元素指数化,确保所有输出值为正数。
    • 对指数化后的值求和,使得所有输出值之和为1,符合概率分布的特性。
  2. 图像解释

    • 输入空间:假设输入是一个二维向量(z₁, z₂),在复平面上表现为二维空间。
    • 输出空间:Softmax函数将二维输入映射到二维概率输出(p₁, p₂),满足 𝑝1+𝑝2=1
    • 图像表现
      • 在输入空间中,随着z₁和z₂的变化,p₁和p₂的值也会变化,在图上形成一个曲面。
      • 当z₁远大于z₂时,p₁趋近于1,p₂趋近于0。
      • 当z₂远大于z₁时,p₂趋近于1,p₁趋近于0。
      • 当z₁等于z₂时,p₁ = p₂ = 0.5。
  3. 直观理解

    • 最大值凸显:Softmax函数会放大较大的输入值,压缩较小的输入值,使得最大的输入对应最高的概率。
    • 平滑过渡:即使输入之间差距不大,输出的概率也会有平滑的变化,避免结果过于剧烈改变。
  4. 实际应用

    • 分类问题:Softmax函数常用于神经网络的输出层,将模型对各类别的原始输出转化为概率分布,便于进行分类决策。
    • 多类别任务:适用于多于两个类别的分类问题,能够清晰地表示每个类别的概率。

        通过以上分析,Softmax函数的图像展示了它在转换输入到概率输出中的核心作用,特别是在分类任务中的灵活性和有效性。

五、损失函数(softmax_loss)

1、定义:

        在卷积神经网络(CNN)中,softmax 损失函数(也称为交叉熵损失函数)是用来衡量模型预测结果与真实标签之间的差异的损失函数。它在分类任务中被广泛使用,尤其是当输出需要解释为概率分布时。以下是其定义和作用的详细解释:

2. 作用(Function)

(1)衡量预测与真实标签之间的差异

        损失函数的作用是量化模型预测结果与真实标签之间的差距。通过最小化损失函数,模型能够调整参数(权重和偏置),从而更好地拟合数据。

(2)优化网络参数

        在训练过程中,优化器(如Adam、SGD等)通过计算损失函数对参数的梯度(导数),使用反向传播算法更新参数,以使损失最小化。

(3)适用于多分类任务

        Softmax损失函数常用于多分类任务(类别数 K>2)。它的输出是每个类别的概率,便于解释和比较。

(4)防止数值不稳定

        在计算过程中,使用log⁡(𝑎𝑖𝑗)log(aij​) 并结合交叉熵损失可以避免数值不稳定问题,例如当𝑎𝑖𝑗aij​趋近于0时,log⁡(𝑎𝑖𝑗)log(aij​) 的值不会变得过于极端。

(5)损失函数与Softmax的结合

        Softmax函数将输出值转换为概率分布,而损失函数则将这些概率与真实标签进行比较,计算损失。两者的结合使得模型能够在训练过程中逐步调整参数,以提高预测的准确性。


3. 示例说明


4. 总结

  • 定义:Softmax损失函数是结合了Softmax激活函数和交叉熵损失的函数,用于衡量模型预测结果与真实标签之间的差异。
  • 作用
    1. 作为优化目标,引导模型调整参数以最小化损失。
    2. 适用于多分类任务,输出概率分布便于解释和比较。

        通过理解Softmax损失函数的定义和作用,可以更好地理解卷积神经网络在分类任务中的工作原理及其优化过程。

详细可以看下面:

 Softmax函数详解与推导 - 理想几岁 - 博客园。

 常见损失函数解析-CSDN博客

 六、前向传播(forward propagation)

      前向传播是 Feedforward 的过程,即从输入层开始,经过一系列的卷积层、池化层、全连接层,最后到达输出层,得到预测结果。理解前向传播有助于理解整个网络的工作流程及其设计原理。

        首先,输入层接收原始图像数据。假设输入图像是一个 维的矩阵,通常表示为高度(height)、宽度(width)、通道数(channels)。对于灰度图像,通道数为1;对于彩色图像,通道数为3(对应RGB三通道)。

        随后,卷积层开始处理输入数据。每个卷积层包含多个滤镜(也称为卷积核)。滤镜的尺寸通常远小于输入图像的尺寸(例如3x3或5x5),且滤镜的数目可以是多个。滤镜在输入图像上滑动,计算每个位置的点积,生成特征图(feature map)。特征图表示输入在某个特定特征上的响应,例如边缘或纹理。

        卷积过程的一个关键点是权重共享,即每个滤镜在图像的每个位置上使用相同的权重,这减少了模型的参数数量,提高了计算效率。

        接下来是池化层,常用的有最大池化(max pooling)和平均池化(average pooling)。池化层通过下采样减少输入的数据量,降低计算复杂度,并提高模型的平移不变性(scale invariance)。例如,一个2x2的池化操作会将每个2x2的区域简化为一个值(最大值或平均值),从而将特征图的高度和宽度各减少一半。

        全连接层(Fully Connected Layer,FC)的作用是将前面所有层提取到的特征进行整合,最后输出一个类别概率分布。全连接层的神经元与前一层的所有神经元相连,因此需要将前一层的特征图展平(flattening)为一维向量。

        最后,输出层通过Softmax激活函数将输出转换为类别概率分布,以表示每个类别的预测概率。损失函数(Loss Function)计算模型预测结果与真实标签之间的差异,作为优化目标。

        通过前向传播,模型能够从输入数据中提取特征,逐步变换数据,最终得到预测结果。为了优化模型,需要通过反向传播(Backpropagation)计算损失函数对各个参数的梯度,进行参数更新,以最小化损失函数。

        在实际应用中,设计不同的卷积层、池化层数目和尺寸,调整激活函数的类型,选择合适的全连接层数目等,都是影响模型性能的重要因素。通过合理设计和调试,可以构建出高效、准确的卷积神经网络模型。

 下图为简单的卷积神经网络的前向传播:

cnn例子图解: 

1.输入层---->卷积层

   输入是一个4*4 的image,经过两个2*2的卷积核进行卷积运算后,变成两个3*3的feature_map

计算步骤:

        以卷积核filter1为例(stride = 1 ): 

2.卷积层---->池化层 

3.池化层---->全连接层

  池化层的输出到flatten层把所有元素“拍平”,然后到全连接层。

4.全连接层---->输出层

  全连接层到输出层就是正常的神经元与神经元之间的邻接相连,通过softmax函数计算后输出到output,得到不同类别的概率值,输出概率值最大的即为该图片的类别。

七、反向传播 

        卷积神经网络(Convolutional Neural Network,简称 CNN)中反向传播(Backpropagation)的作用主要是用于更新网络中的参数(权重和偏置),以最小化损失函数,从而使模型能够学习到数据中的特征和模式,具体如下:

        计算梯度:反向传播算法基于链式法则,从输出层开始,将误差逐层反向传播到输入层。在这个过程中,它会计算损失函数关于每个参数的梯度。通过计算梯度,反向传播可以确定每个参数对损失函数的影响程度,即参数的变化会如何影响模型的输出误差。

        更新参数:根据计算得到的梯度,反向传播算法会相应地更新网络中的参数。通常使用梯度下降(Gradient Descent)或其变体(如随机梯度下降 SGD、Adagrad、Adadelta 等)来根据梯度调整参数的值。具体来说,会沿着梯度的反方向更新参数,使得损失函数的值逐渐减小。这样,经过多次迭代后,模型的参数会逐渐调整到能够使损失函数最小化的状态,从而使模型能够更好地拟合训练数据,提高模型的准确性和泛化能力。

八、参考文献

【深度学习系列】卷积神经网络详解(二)——自己手写一个卷积神经网络 - Charlotte77 - 博客园

深度学习之卷积神经网络(CNN)详解与代码实现(一) - w_x_w1985 - 博客园

相关文章:

卷积神经网络(CNN)基础

目录 一、应用场景 二、卷积神经网络的结构 1. 输入层(Input Layer) 2. 卷积层(Convolutional Layer) 3. 池化层(Pooling Layer) 最大池化(max_pooling)或平均池化(…...

第 28 场 蓝桥入门赛 JAVA 完整题解

前言 本文总结了六个编程题目的解题思路与核心考点,涵盖基础语法、逻辑分析、贪心算法、数学推导等知识点。每个题目均从问题本质出发,通过巧妙的算法设计或数学优化降低复杂度,展现了不同场景下的编程思维与解题技巧。以下为各题的详细考点解…...

Python 网络请求利器:requests 包详解与实战

诸神缄默不语-个人技术博文与视频目录 文章目录 一、前言二、安装方式三、基本使用1. 发起 GET 请求2. 发起 POST 请求 四、requests请求调用常用参数1. URL2. 数据data3. 请求头 headers4. 参数 params5. 超时时间 timeout6. 文件上传 file:上传纯文本文件流7. jso…...

聊透多线程编程-线程基础-1.进程、线程基础概念

目录 一、进程 二、线程 三、进程与线程的关系 四、进程与线程的比较 注:本文多张图片来源于网络,如有侵权,请联系删除 一、进程 1. 进程的定义 进程是指在系统中正在运行的一个应用程序的实例,是操作系统进行资源分配和调…...

Android:Android Studio右侧Gradle没有assembleRelease等选项

旧版as是“Do not build Gradle task list during Gradle sync” 操作这个选项。 参考这篇文章:Android Studio Gradle中没有Task任务,没有Assemble任务,不能方便导出aar包_gradle 没有task-CSDN博客 在as2024版本中,打开Setting…...

LeetcodeBST2JAVA

235.二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大&…...

如何创建单独的城市活码?活码能永久使用吗?

如何创建单独的城市活码 创建单独的城市活码通常需要借助专业的第三方工具,以下是具体步骤: 1.选择合适的工具 推荐使用专业的活码生成工具。 2.注册并登录 访问官网,完成注册并登录。 3.创建活码 在首页点击“创建活码”按钮。输入活码…...

用户画像(https://github.com/memodb-io/memobase)应用

1.下载项目的源代码,我们要先启动后端,用docker启动 cd src/server cp .env.example .env cp ./api/config.yaml.example ./api/config.yaml 这里我的配置内容如下config.yaml(因为我是调用的符合openai格式的大模型,所以我没改,如果要是别的大模型的话,需要自己再做兼容…...

基于形状补全和形态测量描述符的腓骨游离皮瓣下颌骨重建自动规划|文献速递-深度学习医疗AI最新文献

Title 题目 Automated planning of mandible reconstruction with fibula free flap basedon shape completion and morphometric descriptors 基于形状补全和形态测量描述符的腓骨游离皮瓣下颌骨重建自动规划 01 文献速递介绍 因创伤、骨髓炎和肿瘤而接受下颌骨节段切除术…...

Python3笔记之号称替代pip的uv包管理器

uv是什么? uv,这是一个由 Astral 团队开发的极快速的Python包和项目管理工具,用Rust语言编写。它集成了多种功能,旨在替代pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv等多个工具,提供更高效、更全面的Py…...

面试如何应用大模型

在面试中,如果被问及如何应用大模型,尤其是面向政务、国有企业或大型传统企业的数字化转型场景,你可以从以下几个角度进行思考和回答: 1. 确定应用大模型的目标与痛点 首先,明确应用大模型的业务目标,并结合企业的实际需求分析可能面临的痛点。这些企业通常会关注如何提…...

贪心算法:部分背包问题深度解析

简介: 该Java代码基于贪心算法实现了分数背包问题的求解,核心通过单位价值降序排序和分阶段装入策略实现最优解。首先对Product数组执行双重循环冒泡排序,按wm(价值/重量比)从高到低重新排列物品;随后分两阶段装入:循环…...

Java程序的基本规则

java程序的基本规则 1.1 java程序的组成形式 Java程序是一种纯粹的面向对象的程序设计语言,因此Java程序 必须以类(class)的形式存在,类(class)是Java程序的最小程序 单位。Java程序不允许可执行性语句…...

机器学习-线性回归模型

机器学习-线性回归模型 线性模型笔记1、向量化2、线性回归模型公式3、损失函数(代价函数)4、梯度下降法5、Python 实现示例 6、使用 sklearn 实现线性回归模型✅ 基本步骤如下:📦 示例代码: 7、numpy中的切片X[n,:]是取…...

Linux 入门指令(1)

(1)ls指令 ls -l可以缩写成 ll 同时一个ls可以加多个后缀 比如 ll -at (2)pwd指令 (3)cd指令 cd .是当前目录 (4)touch指令 (5)mkdir指令 (6)rmdir和rm…...

密码学基础——AES算法

目录 一、算法背景 AES算法与Rijndael算法 二、算法特点 1.安全性高 2.效率高 3.灵活性好 三、算法说明 3.1状态、种子密钥和轮数的概念 (1)状态(State) 定义 结构:通常状态是一个 4N 字节的矩阵&#xff0…...

淘宝API与小程序深度联动:商品详情页“一键转卖”功能开发

要实现淘宝 API 与小程序深度联动,开发商品详情页 “一键转卖” 功能,可按以下步骤进行: 1. 前期准备 淘宝开放平台接入:在淘宝开放平台注册开发者账号,创建应用,获取 App Key 和 App Secret,…...

深入解析 C++ 设计模式:原理、实现与应用

一、引言 在 C 编程的广袤领域中,设计模式犹如闪耀的灯塔,为开发者指引着构建高效、可维护软件系统的方向。设计模式并非神秘莫测的代码魔法,实际上,我们在日常编程中或许早已与之打过交道。简单来说,设计模式常常借助…...

配置与管理代理服务器

安装squid Squid软件包在标准yum存储库中可用,因此,我们正在使用yum命令安装Squid代理。 [rootserver ~]# dnf install -y squid //安装 [rootserver ~]#systemctl enable --now squid.service [rootserver ~]#systemctl status squid.serv…...

RuntimeError: CUDA error: invalid device function

CUDA内核编译时的架构设置与当前GPU不兼容导致 -- The CUDA compiler identification is NVIDIA 11.5.119 (实际为 12.6) 解决方案: 1. 查看显卡计算能力 2. CMakeLists.txt 修改 set_target_properties(my_library PROPERTIESCUDA_AR…...

vulnhub:sunset decoy

靶机下载地址https://www.vulnhub.com/entry/sunset-decoy,505/ 渗透过程 简单信息收集 nmap 192.168.56.0/24 -Pn # 确定靶机ip:192.168.56.121 nmap 192.168.56.121 -A -T4 # 得到开放端口22,80 在80端口得到save.zip,需要密码解压。 john破解压缩…...

MySQL日期时间类型详解:DATE、TIME和DATETIME的用法与区别

在数据库设计中,正确处理日期和时间数据是至关重要的。MySQL提供了多种数据类型来存储时间信息,其中最常用的三种是DATE、TIME和DATETIME。本文将详细介绍这三种类型的特性、区别以及实际应用场景。 一、基本数据类型介绍 1. DATE类型 用途&#xff1…...

js异步机制

1、什么是异步机制?为什么js需要异步机制? 异步机制和同步机制是相对应的,异步是指:当代码按照顺序执行到一些比较耗时的操作,不会立刻执行,而是将这些操作推到一个队列中等待合适的时机从队列中取出任务执…...

Pycharm常用快捷键总结

主要是为了记录windows下的PyCharm的快捷键,里面的操作都试过了功能描述会增加备注。 文件操作 快捷键功能描述Ctrl N新建文件Ctrl Shift N根据名称查找文件Ctrl O打开文件Ctrl S保存当前文件Ctrl Shift S另存为Alt F12打开终端(Terminal&…...

巧记英语四级单词 Unit2-下【晓艳老师版】

mit传递(send 送)、 superiority n.优势,优越性 超越别人的东西就是自己的优势govern v.统治 government政府 统治的机构administer v.管理,治理 minister 大臣 部长,mini-小人,一再的做大臣 部长&#xf…...

走进底层 - JVM工作原理入门指南

走进底层 - JVM工作原理入门指南 Java 之所以能够实现“一次编写,到处运行”(Write Once, Run Anywhere, WORA),核心在于 Java 虚拟机(JVM, Java Virtual Machine)。JVM 是 Java 程序的运行环境&#xff0c…...

windows 10频繁通知A字“出现了问题,无法安装功能。”

一、故障突现 windows 10频繁通知A字“出现了问题,无法安装功能。” 编辑文档时发现黑体、楷体gb_2312等常用字体,在字体列表中失踪,原来设置好的字体也显示失效。 二、起因分析 回想了一下,是3月27日安装了 2025-适用于Windows…...

基础环境配置

1.GitGerritjenkins Linux 远程登录 | 菜鸟教程 https://zhuanlan.zhihu.com/p/22766058062 2.Samba 配置 3.软件安装 (1)MobaXterm (2)Vscode (3)Xmind (4) Audacity Aud…...

ROS2——foxy apt打包离线安装deb包

需要从A设备复制ROS2环境到B设备,且B设备有可能没网络,所以选择制作离线资源包 1. 本机安装指令 本机环境ubuntu20.04,安装ros2-foxy版本,直接输入以下指令,基本不会遇到问题 这里安装的是ros-base版本,不…...

大数据学习(104)-clickhouse与hdfs

🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...

大数据 - 1. 概述

早期的计算机(上世纪70年代前) 是相互独立的,各自处理各自的数据上世纪70年代后,出现了基于TCP/IP协议的小规模的计算机互联互通。上世纪90年代后,全球互联的互联网出现。当全球互联网逐步建成(2000年左右&…...

CD25.【C++ Dev】类和对象(16) static成员(上)

目录 1.static成员变量 问题:实现一个类,计算程序中创建出了多少个类对象 设计思路 代码示例 版本1 版本2 static成员 特点1.static成员为静态成员,为所有类对象所共享(在某种程度上可以理解为全局的,用类去封装"全局变量"),存放在静态区,则不属于某个具体的…...

C语言今天开始了学习

好多年没有弄了,还是捡起来弄下吧 用的vscode 建议大家参考这个配置 c语言vscode配置 c语言这个语言简单,但是今天听到了一个消息说python 不知道怎么debug。人才真多啊...

Mockito如何对静态方法进行测试

在 Mockito 中,直接对静态方法进行模拟是困难的,因为 Mockito 的设计理念是优先通过依赖注入(DI)管理对象,而静态方法破坏了这种设计(难以解耦)。不过,从 Mockito 3.4.0 版本开始,通过 mockStatic 方法支持了对静态方法的模拟(需配合 mockito-inline 依赖)。 从 Mo…...

Three.js 入门实战:安装、基础概念与第一个场景⭐

学习本章节你不必要追求细节,你只需要了解基本的3D场景需要哪些元素组成,如何通过组成3D场景的元素属性调整来控制3D物体或者场景即可。 在上一篇文章中我们初识了 Three.js,今天我们正式进入实战环节 🎯 前置准备: …...

【QT】QT的消息盒子和对话框(自定义对话框)

QT的消息盒子和对话框(自定义对话框) 一、消息盒子QMessageBox1、弹出警告盒子示例代码:现象: 2、致命错误盒子示例代码:现象: 3、帮助盒子示例代码:现象: 4、示例代码: …...

QT面试题:内存管理与对象生命周期

题目​: 在Qt中,当一个父对象被销毁时,其子对象是否会被自动释放?请结合Qt的内存管理机制说明原因,并解释在什么情况下可能导致内存泄漏。如何避免这类问题? ​参考答案​ ​父子对象的内存管理机制​ ​…...

linux查询inode使用率

在 Linux 中,inode 用于存储文件和目录的元数据(如权限、所有者、时间戳等)。当文件系统的 inode 被耗尽时,即使磁盘空间充足,系统也会提示 No space left on device。以下是查询 inode 使用率的详细方法: …...

算法基础—二分算法

目录 一、⼆分查找例题 1 牛可乐和魔法封印 2 A-B 数对 3 烦恼的高考志愿 二、 ⼆分答案 1 木材加⼯ 2 砍树 3 跳石头 ⼆分算法的原理以及模板其实是很简单的,主要的难点在于问题中的各种各样的细节问题。因此,⼤多数情况下,只是背会…...

2024年第十五届蓝桥杯CC++大学A组--成绩统计

2024年第十五届蓝桥杯C&C大学A组--成绩统计 题目: 动态规划, 对于该题,考虑动态规划解法,先取前k个人的成绩计算其方差,并将成绩记录在数组中,记录当前均值,设小蓝已检查前i-1个人的成绩&…...

家居实用品:生活中的艺术,家的温馨源泉‌

在快节奏的现代生活中,家居实用品不仅是日常所需的工具,更是营造温馨家居氛围、提升生活品质的关键元素。它们以其独特的魅力,默默地融入我们的日常生活,成为连接物质世界与精神世界的桥梁。 走进家门,首先映入眼帘的或…...

TCP重传率高与传输延迟问题

目录标题 排查步骤:TCP重传率高与传输延迟问题v1.0通过 rate(node_netstat_Tcp_RetransSegs[3m]) 排查 TCP 重传问题的步骤1. **指标含义与初步分析**2. **关联指标排查**3. **定位具体问题源**4. **解决方案**5. **验证与监控** v2.0一、基础检查二、网络层分析三、…...

超越简单检索:探索知识图谱与大型语言模型的协同进化之路

摘要: 大型语言模型(LLM)在自然语言处理领域取得了革命性进展,但其在事实准确性、复杂推理和可解释性方面仍面临挑战,“幻觉”现象是其固有局限性的体现。知识图谱(KG)作为结构化人类知识的载体&#xff0c…...

汽车的四大工艺

文章目录 冲压工艺核心流程关键技术 焊接工艺核心流程 涂装工艺核心流程 总装工艺核心流程终检与测试静态检查动态检查四轮定位制动转鼓测试淋雨测试总结 简单总结下汽车的四大工艺(从网上找了一张图,感觉挺全面的)。 冲压工艺 将金属板材通过…...

研发效能实践:技术评审会生存指南

文章目录 🚨‌开篇暴击:为什么你的评审会像「菜鸡互啄」?‌⚙️‌第一章:Google Design Sprint——5天把争议变成共识‌📅 ‌Day 1-5 实操手册‌‌Map the Problem(画地图)‌‌Sketch Solutions…...

js 拷贝

在 JavaScript 中,拷贝对象和数组时需要特别注意,因为对象和数组是引用类型,直接赋值只会复制引用,而不是实际的数据。以下是几种常见的拷贝方法及其应用场景: 1. 浅拷贝(Shallow Copy) 浅拷贝…...

AI比人脑更强,因为被植入思维模型【51】效率思维模型

giszz的理解:效率实际没有用,过分的追求效率,也是当下社会的弊病。但是效率思维,让我们能够用一个最简单的模型,去平衡投入和产出的最佳比例。过高的效率,会导致过大的压力,合适是最好的。 一、…...

Spark RDD相关概念

Spark运行架构与核心组件 1.Spark运行梁构 spark运行架构包括master和slave两个主要部分。master负责管理整个集群的作业任务调度,而slave则负责实际执行任务。 dirver是Spark驱动器节点,负责执行Spark任务中的main方法,将用户程序转换成作业…...

每日一题(小白)数组娱乐篇21

由于题意可知我们是要将对应的数字转换为英文,我们要考虑两点一个是进制的转换,也就是类似于我们的十进制一到9就多一位,这里的进制就是Z进制也就是27进制一旦到26下一位则进位;另一方面要考虑数字的转换也就是1~26对应A~Z。解决上…...

LLM 的model.generate() 参数说明

LLM 的model.generate() 参数说明 目录 LLM 的model.generate() 参数说明生成长度控制参数采样策略参数重复惩罚参数束搜索参数其他参数model.generate() 方法是 Hugging Face Transformers 库中用于文本生成的核心方法,它有众多参数可用于控制生成过程 生成长度控制参数 min…...