用于图像分类任务的经典神经网络综述

🎀个人主页: https://zhangxiaoshu.blog.csdn.net
📢欢迎大家:关注🔍+点赞👍+评论📝+收藏⭐️,如有错误敬请指正!
💕未来很长,值得我们全力奔赴更美好的生活!

前言

长期以来,计算机视觉一直是人工智能研究的关键领域之一。早期的图像处理方法通常基于手工设计的特征提取器,这在处理复杂任务时面临一些限制,随着深度学习的崛起,特别是深度神经网络的发展,计算机视觉领域发生了革命性的变化。深度学习的优势在于其能够学习从原始数据中提取有用特征的能力,而无需手动设计特征提取器,本文主要介绍在深度学习发展史中用于图像分类任务的经典神经网络。


文章目录

  • 前言
  • 一、图像分类任务介绍
  • 二、基于卷积的网络
    • 1. LeNet
    • 2. AlexNet
    • 3. VGG
    • 4. GoogLeNet
    • 5. ResNet
    • 6. DenseNet
    • 7. RepVGG
  • 三、基于Transformer的网络
    • 1. Vision Transformer
    • 2. Swin Transformer
  • 四、基于轻量化的网络
    • 1. MobileNet
    • 2. ShuffleNet
    • 3. EfficientNet
  • 五、PyTorch网络使用


一、图像分类任务介绍

图像分类任务指输入一张或多张图像。输出为将图像分配到一个或多个类别中。

一些关键概念:

类别: 预定义的目标类别,每个类别代表一种对象或场景。

训练集: 包含标注(类别信息)的图像集合,用于训练模型。

验证集和测试集: 用于评估模型性能的独立数据集。验证集用于调整模型超参数,测试集用于最终性能评估。

特征学习: 模型通过训练从数据中学习特征,这些特征有助于区分不同类别的图像。

模型评估指标: 通常包括准确率(正确分类的图像比例)、精确度(正类别中被正确分类的比例)、召回率(实际正类别中被正确分类的比例)等。

二、基于卷积的网络

1. LeNet

LeNet是由Yann LeCun等人于1998年提出的卷积神经网络(Convolutional Neural Network,CNN)架构,它是深度学习领域中最早成功应用于图像分类任务的模型之一。LeNet的设计旨在处理手写数字识别问题,特别是美国邮政服务的邮政编码识别项目。这个模型的提出对卷积神经网络的发展产生了深远的影响。
在这里插入图片描述

主要结构和组成部分:

  • 输入层(Input Layer): LeNet最初被设计用于处理手写数字图像,因此输入层表示图像的像素。

  • 第一层(第一个卷积层):卷积操作:提取输入图像的局部特征。Sigmoid激活函数:引入非线性。平均池化层:降低特征图的维度,减小计算量。

  • 第二层(第二个卷积层):类似于第一层,包含卷积、激活和平均池化。

  • 全连接层(Fully Connected Layers):将卷积层提取的特征映射到输出类别。采用Sigmoid激活函数。

  • 输出层:通常是一个全连接层。Softmax激活函数用于将输出转换为类别概率分布。

2. AlexNet

AlexNet是由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton等人于2012年设计的深度卷积神经网络,它在ImageNet大规模图像识别竞赛(ILSVRC)中取得了巨大的成功。这个模型标志着深度学习在计算机视觉领域的崛起,并成为后来深度卷积神经网络的开创者之一。
在这里插入图片描述

主要特点和结构:

  • 深度: AlexNet是一个相对较深的神经网络,包含5个卷积层和3个全连接层。

  • 卷积层和池化层:前两个卷积层后跟最大池化层,用于提取图像的特征。激活函数采用ReLU(Rectified Linear
    Unit),这一选择在当时并不常见,但后来成为了深度学习中的常用激活函数。

  • 局部响应归一化(Local Response Normalization):在激活层之后引入局部响应归一化层,这有助于抑制神经元的饱和度,增强模型的泛化性能。

  • Dropout:在全连接层中引入Dropout层,以减轻过拟合问题。Dropout通过在训练过程中随机关闭一些神经元来防止网络对特定数据过于依赖。

  • 大规模并行计算:AlexNet的设计考虑到了大规模并行计算,通过分布在多个GPU上进行训练,这在当时是一项创新。

3. VGG

VGG(Visual Geometry Group)是由牛津大学的Visual Geometry Group在2014年提出的深度卷积神经网络架构。VGG以其简洁而规整的网络结构而闻名,对卷积层和池化层的堆叠使用非常规则的结构,使得整个网络非常容易理解和调整。
在这里插入图片描述

主要特点和结构:

  • 深度和规整的结构:VGG网络非常深,有16或19个卷积层(根据不同的配置),并且所有的卷积层都是3x3的卷积核。这种深度和规整的结构有助于提取图像中的丰富特征。

  • 小卷积核:VGG采用多个3x3的卷积核来替代一个较大的卷积核(如5x5或7x7)。这样的设计有助于增加非线性,提高网络的表达能力,并减少参数数量。

  • 池化层:VGG网络中使用最大池化层,通过减小空间维度来降低计算复杂性。

  • 全连接层:VGG在卷积层之后使用全连接层,将卷积层提取的特征映射到最终的输出。

  • 激活函数:VGG使用ReLU(Rectified Linear Unit)作为激活函数,这对训练过程中的梯度流动和网络的收敛起到了积极的作用。

  • VGG16 和 VGG19:VGG16包含16个权重层,其中有13个卷积层和3个全连接层。VGG19是VGG的一个变种,包含19个权重层,其中有16个卷积层和3个全连接层。

4. GoogLeNet

GoogLeNet,也称为Inception v1,是由Google研究团队于2014年提出的深度卷积神经网络。它在ImageNet大规模图像识别竞赛(ILSVRC)中取得了显著的成功,并引入了"Inception"模块,该模块采用多尺度卷积核来提取不同层次的特征,使得网络更具表达能力。
在这里插入图片描述

主要特点和结构:

  • Inception 模块:Inception模块采用了不同大小的卷积核(1x1、3x3、5x5)和最大池化层,并将它们在同一层级进行堆叠。这有助于网络同时学习不同尺度的特征,提高了网络的表达能力。
    1x1卷积核用于降维,减少计算量。这也可以看作是一种瓶颈结构(Bottleneck Structure)。

  • 全局平均池化(Global Average Pooling):GoogLeNet采用全局平均池化层,取代了传统的全连接层。这有助于减少参数数量,降低过拟合风险,并使网络更具通用性。

  • 辅助分类器:GoogLeNet在中间层添加了辅助分类器,用于提供额外的梯度信号,有助于缓解梯度消失问题,加速训练过程。

  • Batch Normalization:GoogLeNet引入了批量归一化(Batch Normalization),有助于提高网络的训练速度,增加网络的稳定性。

Inception 模块的示意图如下:

Input -> 1x1 Conv -> \-> Concatenate
Input -> 3x3 Conv -> /
Input -> 5x5 Conv -> \-> Concatenate
Input -> Max Pool -> /
  • Inception v1 (GoogLeNet): 这是最早的"Inception"版本,由Christian Szegedy等人在2014年提出。它引入了"Inception"模块,该模块使用多个不同大小的卷积核并行处理输入数据,从而提高了网络的效果。

  • Inception v2 (BN-Inception or Inception-BN): 也称为Batch Normalization Inception,这个版本在Inception v1的基础上引入了批量归一化(Batch Normalization),从而加速训练过程。

  • Inception v3: 这是"Inception"系列的第三个版本,引入了一些新的设计原则,如分解卷积(Factorized Convolutions)和更深的网络结构。它在识别精度和计算效率方面都有所提高。

  • Inception v4: 这个版本在Inception v3的基础上进行了改进,引入了一些额外的技巧,如残差连接(Residual Connections)和更深层次的网络结构。

5. ResNet

ResNet(Residual Network)是由微软研究院的Kaiming He等人在2015年提出的深度卷积神经网络结构。ResNet的设计突破了传统的深度神经网络的训练难题,通过引入残差学习(residual learning)机制,成功训练了非常深的网络,达到了当时的领先水平。
在这里插入图片描述

主要特点和结构:

残差学习:ResNet的关键创新是引入了残差块(Residual Block)或残差学习。在传统的卷积神经网络中,随着网络层数的增加,梯度逐渐变小,导致梯度消失问题。而残差学习通过引入跳跃连接(shortcut connection),允许网络学习残差(residual)而不是直接学习映射,从而有效解决了梯度消失问题。

残差块结构:残差块通常包括两个卷积层,每个卷积层之间有一个跳跃连接。残差块的结构可以用数学公式表示为:

o u t p u t = i n p u t + F ( i n p u t ) output=input+F(input) output=input+F(input)

其中 F ( i n p u t ) F(input) F(input)是卷积层的输出。

  • 堆叠残差块:ResNet通过堆叠多个残差块来构建深度网络。深度网络的训练变得更加容易,因为残差学习机制减缓了梯度逐层传播的消失问题。

  • 全局平均池化:与GoogLeNet类似,ResNet使用全局平均池化层替代全连接层,以减少参数数量。

  • 批量归一化和ReLU激活:ResNet中广泛使用批量归一化(Batch Normalization)和ReLU激活函数,有助于提高网络的训练速度和稳定性。

6. DenseNet

DenseNet(Densely Connected Convolutional Networks)是由李飞飞等人于2017年提出的深度卷积神经网络架构。DenseNet的关键创新是在网络的设计中引入了密集连接(dense connectivity)的概念,即每一层都与前面所有层直接相连,使得网络具有更加紧密的信息流动,有效地缓解了梯度消失问题。
在这里插入图片描述

主要特点和结构:

  • 密集连接(Dense Connectivity):DenseNet中每一层都与前面所有层直接相连,每一层接收来自前面所有层的特征图作为输入。这种密集连接的结构有助于保持更多的特征信息,并促使梯度更容易传播。

  • 稠密块(Dense Block):DenseNet的主要构建单元是稠密块,每个稠密块包含多个密集连接的卷积层。在每个卷积层之后,都将其输出与前面层的输出连接起来,形成密集连接。

  • 过渡块(Transition Block):在稠密块之间引入过渡块,通过使用1x1卷积层和平均池化层来减小特征图的尺寸。这有助于控制网络的复杂度,减少计算量。

  • 全局平均池化:与其他一些先进的网络一样,DenseNet采用全局平均池化来替代全连接层,减少参数数量,提高网络的泛化能力。

  • 批量归一化和ReLU激活:DenseNet中广泛使用批量归一化和ReLU激活函数,有助于提高网络的训练速度和稳定性。

7. RepVGG

RepVGG(Reparameterized VGG)是由Microsoft Research提出的一种卷积神经网络架构,旨在结合VGG的简单结构和ResNet的强大性能。RepVGG通过重新参数化卷积层,使得网络具有VGG风格的简单性,同时保留了ResNet中的残差连接,提高了网络的性能。
在这里插入图片描述

RepVGG 主要特点和结构:

  • 重新参数化的卷积层:RepVGG使用了重新参数化的卷积层,将卷积核的权重分解成两个部分:一个是可学习的,一个是固定的。这种设计简化了卷积层的计算,同时保持了一定的灵活性。

  • ResNet 风格的残差连接:RepVGG引入了ResNet风格的残差连接,使得网络能够更有效地传递梯度、缓解梯度消失问题,并加速了训练过程。

  • 简单且有效的结构:RepVGG的整体结构类似于VGG,由多个卷积层和全连接层组成,具有简单、易理解的特点,同时在性能上具备了一定的深度学习模型的优势。

  • 端到端可训练:RepVGG 是一个端到端可训练的网络结构,可以通过梯度下降来学习网络中所有的参数。

三、基于Transformer的网络

1. Vision Transformer

Vision Transformer(ViT)是一种基于注意力机制的图像分类网络,由Alexey Dosovitskiy等人在2020年提出。相比于传统的卷积神经网络(CNNs),ViT采用了全注意力机制,将输入图像分割成一系列的图像块(patches),并通过自注意力机制捕捉图像全局信息。 ViT是一种在图像分类任务上取得显著成功的全新方法,它改变了传统卷积神经网络的范式,通过自注意力机制更灵活地捕捉图像中的关系。
Vision Transformer

主要特点和结构:

  • 图像块的表示:输入图像被分割成固定大小的图像块(patches)。每个图像块被视为一个向量,这样整个图像就被表示为一个序列。

  • 位置嵌入(Position Embeddings):为了捕捉序列中的位置信息,ViT引入了位置嵌入。这些位置嵌入向量被加到图像块的表示中,以便模型学习到图像中不同位置的关系。

  • 多头注意力机制:ViT使用了多头注意力机制,允许模型关注图像中不同区域的信息。每个注意力头都学习到了图像块之间的关系,有助于捕捉全局信息。

  • 全连接层(MLP):在多头注意力机制之后,ViT采用了全连接层(多层感知机,MLP)来进一步提取特征。这一部分被称为MLP处理块。

  • 层归一化和残差连接:每个MLP处理块后都进行了层归一化和残差连接,以提高模型的训练稳定性。

  • 全局池化:最终的序列表示经过全局平均池化,得到整个图像的表示。

2. Swin Transformer

Swin Transformer是一种用于图像分类任务的变种Transformer架构,由微软亚洲研究院在2021年提出。Swin Transformer采用了分层的局部注意力机制和窗口化的注意力机制,以处理大尺寸输入图像,并取得了在图像分类任务上的卓越性能。
在这里插入图片描述

主要特点和结构:

  • 分层的局部注意力机制:Swin Transformer引入了分层的局部注意力机制,将输入图像分割成非重叠的块,并在每个块内部执行局部注意力,以处理大尺寸输入。

  • 窗口化的注意力机制:Swin Transformer使用窗口化的注意力机制,即在每个块中只与相邻的块进行注意力交互,从而减少了计算复杂性。

  • 交换操作(Shift Operation):为了促进图像信息的交流,Swin Transformer引入了交换操作,即在不同块之间进行位置的平移,有助于捕捉图像中的全局信息。

  • 层次结构:Swin Transformer采用了层次结构,包含多个Swin Transformer块。每个Swin Transformer块中包含分层的局部注意力、窗口化的注意力、交换操作等模块。

  • 跨层连接:Swin Transformer中引入了跨层连接,允许低层特征直接连接到高层特征,促进特征的信息流动。

  • 多尺度特征:Swin Transformer通过采用多层次的注意力机制,能够处理多尺度的特征,使得模型对于不同尺度的物体具有更强的感知能力。

四、基于轻量化的网络

1. MobileNet

MobileNet是由Google在2017年提出的一系列轻量级神经网络架构,旨在在计算资源有限的移动设备上实现高效的图像分类和目标检测。MobileNet的设计目标是在保持较高的性能的同时,大幅减少参数数量和计算复杂度,使得它适用于嵌入式设备和移动端应用。

MobileNet的核心思想是采用深度可分离卷积(depthwise separable convolution)代替传统的标准卷积操作,以减少模型中的参数数量。深度可分离卷积将标准卷积分为两步:深度卷积(depthwise convolution)和逐点卷积(pointwise convolution)。
在这里插入图片描述

MobileNet 主要特点和结构:

  • 深度可分离卷积:深度可分离卷积分为两步:深度卷积对每个输入通道执行卷积,然后通过逐点卷积将其映射到输出通道。这一操作降低了计算复杂度,减少了参数数量。

  • 宽度乘数(Width Multiplier):MobileNet引入了宽度乘数,允许用户控制每一层网络的宽度。通过减少中间层的通道数,可以在不显著损失性能的情况下减小网络的大小。

  • 分辨率乘数(Resolution Multiplier):MobileNet还引入了分辨率乘数,允许用户缩小输入图像的分辨率。降低分辨率可以减少计算量,但可能损失一些图像细节。

  • 全局平均池化:MobileNet通常使用全局平均池化层替代全连接层,以减少参数数量。

  • 线性瓶颈:在每个深度可分离卷积的逐点卷积之前,MobileNet采用了线性激活函数(没有非线性变换),以提高模型的表达能力。

  • MobileNetV1(2017): 第一个MobileNet版本,采用了深度可分离卷积,成功地在移动设备上实现了高效的图像分类。

  • MobileNetV2(2018): 引入了倒残差结构(inverted residual structure),在V1的基础上进一步改进。此版本通过使用残差连接和线性瓶颈来提高性能。

  • MobileNetV3(2019): 进一步改进MobileNetV2,引入了更多的优化和设计改进,如可分离卷积的非线性激活、更大的网络输入尺寸、更精细的网络宽度调整等。

2. ShuffleNet

ShuffleNet是由微软亚洲研究院于2018年提出的一种轻量级神经网络结构,旨在在计算资源受限的移动设备上实现高效的图像分类和目标检测。ShuffleNet的设计注重在减小计算复杂度和参数数量的同时,保持较高的模型性能。

ShuffleNet的主要特点是通过引入分组卷积和通道重排操作来减少计算复杂度。分组卷积将输入通道分为若干组,每组进行独立的卷积计算,然后将结果拼接在一起。通道重排操作则用于对通道进行重新排列,从而增强信息的传递。
ShuffleNet 主要特点和结构:
在这里插入图片描述

  • 分组卷积:ShuffleNet引入了分组卷积,将输入通道分为多个组,每个组进行独立的卷积操作。这有助于降低计算复杂度和参数数量。

  • 通道重排(Channel Shuffle):通道重排操作将输入通道进行重新排列,以增强信息的传递。这一操作在分组卷积之后进行,有助于促进不同组之间的信息交流。

  • 逐点卷积(Pointwise Convolution):ShuffleNet使用逐点卷积(1x1卷积)来调整通道数量,使得网络更加灵活,同时减少参数数量。

  • 基础单元(ShuffleNet Unit):ShuffleNet的基础单元包括分组卷积、通道重排、逐点卷积和批量归一化等操作。多个基础单元的堆叠构成了整个网络。

  • 全局平均池化:与其他一些轻量级网络一样,ShuffleNet通常使用全局平均池化层替代全连接层,以减少参数数量。

  • ShuffleNetV1(2018): 第一个版本,引入了分组卷积和通道重排的概念,取得了较好的性能。

  • ShuffleNetV2(2018): 在ShuffleNetV1的基础上进行改进,引入了更多的特征通道重排和新的网络结构设计。ShuffleNetV2进一步减小了计算复杂度,提升了性能。

3. EfficientNet

EfficientNet是由谷歌研究团队在2019年提出的一种高效且性能优越的卷积神经网络架构。EfficientNet的设计目标是在给定计算资源的情况下,取得更好的性能,同时充分考虑了网络的深度、宽度和分辨率等因素。

EfficientNet的设计基于三个主要组件:宽度乘数(width multiplier)、深度乘数(depth multiplier)和分辨率乘数(resolution multiplier)。这些乘数允许用户在不同方向上对网络进行缩放,以满足不同的性能和计算资源需求。
在这里插入图片描述

EfficientNet 主要特点和结构:

  • 宽度乘数(Width Multiplier):宽度乘数控制每一层网络的通道数,即每个卷积层的宽度。通过调整宽度乘数,可以在不改变模型深度的情况下减小或增大模型的计算复杂度。

  • 深度乘数(Depth Multiplier):深度乘数控制网络的层数。通过调整深度乘数,可以在不改变模型宽度的情况下减小或增大模型的计算复杂度。

  • 分辨率乘数(Resolution Multiplier):分辨率乘数控制输入图像的分辨率。通过调整分辨率乘数,可以在不改变模型深度和宽度的情况下减小或增大模型的计算复杂度。

  • 复合缩放系数(Compound Scaling):EfficientNet采用复合缩放系数,同时调整宽度、深度和分辨率,以获得更好的性能。复合缩放系数的提出是为了综合考虑这三个方向上的缩放效果。

  • MBConv(MobileNetV2-like Bottleneck Block):EfficientNet中使用了一种称为MBConv(MobileNetV2-like Bottleneck Block)的块作为基础单元,该块结合了深度可分离卷积和残差连接。

五、PyTorch网络使用

torchvision.models 模块是 PyTorch 中用于定义和加载预训练模型的模块。它提供了许多经典的图像分类、目标检测、图像生成等深度学习模型的实现。这些模型已经在大规模图像数据集上进行了预训练,可以用于各种计算机视觉任务。

下面以ResNet为例简单说明 torchvision.models 模块中图像分类网络的使用示例:

import torch
import torchvision.transforms as transforms
from torchvision.models import resnet50# 示例输入图像(需要调整为你的图像路径)
image_path = 'path/to/your/image.jpg'# 预处理图像
transform = transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),
])image = transform(Image.open(image_path)).unsqueeze(0)# 创建 ResNet50 模型
model = resnet50(pretrained=True)# 将模型设置为评估模式
model.eval()# 进行预测
with torch.no_grad():output = model(image)# 打印预测结果
print(torch.argmax(output[0]).item())

文中图片大多来自论文和网络,如有侵权,联系删除,文中有不对的地方欢迎指正。

参考:
Rawat W, Wang Z. Deep convolutional neural networks for image classification: A comprehensive review[J]. Neural computation, 2017, 29(9): 2352-2449.
Chen L, Li S, Bai Q, et al. Review of image classification algorithms based on convolutional neural networks[J]. Remote Sensing, 2021, 13(22): 4712.

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

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

相关文章

探索性因子分析流程

探索性因子分析的步骤: 接下来,通过一个案例演示因子分析(探索性因子分析)的各个步骤应该如何进行。 案例:欲探究我国不同省份铁路运输能力情况,收集到部分相关数据如下: 上传数据至SPSSAU系统…

echarts 水波图

echarts 水波图 安装 npm install echarts --save npm install echarts-liquidfill --save引入 import * as echarts from echarts; import echarts-liquidfill;html <div id"chart1" ref"chart1" class"chart1"></div>css .cha…

常见面试题-Redis 切片集群以及主节点选举机制

Redis 切片集群了解吗&#xff1f; 答&#xff1a; Redis 切片集群是目前使用比较多的方案&#xff0c;Redis 切面集群支持多个主从集群进行横向扩容&#xff0c;架构如下&#xff1a; 使用切片集群有什么好处&#xff1f; 提升 Redis 读写性能&#xff0c;之前的主从模式中&…

使用C语言库函数qsort排序注意点

目录 题目背景错误C语言代码&#xff1a;正确C语言代码&#xff1a;注意点 题目背景 高校团委组织校园歌手比赛&#xff0c;进入决赛的校园歌手有10位,歌手编号从1到10进行编号。组委会随机抽取方式产生了决赛次序为&#xff1a;3,1,9,10,2,7,5,8,4,6。比赛现场有5个评委为参赛…

【Docker项目实战】使用Docker部署Plik临时文件上传系统

【Docker实战项目】使用Docker部署Plik 临时文件上传系统 一、Plik介绍1.1 Plik简介1.2 Plik特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Plik镜像五、部署Plik临时…

PLC:200smart

PLC&#xff1a;200smart 第十章、数据类型、数据存储1、数据类型1.1、有符号数1.2、有符号数 2、传送指令 第十一章、比较指令、整数、浮点数的运算1、比较指令1、运算指令1.1、浮点数运算1.2、整数运算 第十章、数据类型、数据存储 1、数据类型 数据类型分为两大类 无符号数…

【小布_ORACLE】Part11-1--RMAN Backups笔记

Oracle的数据备份于恢复RMAN Backups 学习第11章需要掌握&#xff1a; 一.RMAN的备份类型 二.使用backup命令创建备份集 三.创建备份文件 四.备份归档日志文件 五.使用RMAN的copy命令创建镜像拷贝 文章目录 Oracle的数据备份于恢复RMAN Backups1.RMAN Backup Concepts&#x…

用了这7款html网页制作软件,你会爱上编程!

制作网页是一个复杂的过程&#xff0c;需要注意到各种细节&#xff0c;只有依靠出色的技术能力和强大的工具&#xff0c;我们才能真正达到我们的目标。幸运的是&#xff0c;有很多优秀的HTML网页设计软件可以让整个流程变得更加轻松和高效。以下就是我们经过深思熟虑和严格筛选…

Redis 的过期策略都有哪些?

思考:假如redis的key过期之后&#xff0c;会立即删除吗&#xff1f; Redis对数据设置数据的有效时间&#xff0c;数据过期以后&#xff0c;就需要将数据从内存中删除掉。可以按照不同的规则进行删除&#xff0c;这种删除规则就被称之为数据的删除策略&#xff08;数据过期策略…

i已学赋能智慧教育时代的幼儿教育

伴随“教育数字化战略行动”的深入开展,智慧教育正式成为国家战略。智慧教育延伸至家校社教育的每个阶段。当前,为适应智慧教育发展趋势,我国制定了《中国教育现代化2035》《教育部关于加强“三个课堂”应用的指导意见》《教育信息化2.0行动计划》等文件。幼儿作为智慧教育、智…

什么是高级语言、机器语言、汇编语言?什么是编译和解释?

1、高级语言 计算机程序是一种让计算机执行特定任务的方法。程序是由程序员用一种称为编程语言的特殊语言编写的。编程语言有很多种&#xff0c;例如 C、C、Java、Python 等。这些语言被称为高级语言&#xff0c;因为它们更接近人类的自然语言&#xff0c;而不是计算机能够直接…

python基础练习题库实验5

文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6058fb4b66994aed838f920f7fe75706.png)题目4代码实验结果题目总结题目1 编写一个程序,使用while循环语句和字符串格式显示以下精确输出。 例如: …

Linux命令进阶——grep管道命令在查看日志的场景中的使用 具体案例

前言 本篇博客介绍在查看日志的场景中&#xff0c;grep管道命令的使用&#xff0c;并给出了具体的案例。 以下为Linux相关的博客文章列表&#xff1a; Linux——认识Linux的目录结构 & 常用命令 & vim命令 & 权限及其控制 & 防火墙命令 & 自定义命令 &a…

2023年【广东省安全员B证第四批(项目负责人)】证考试及广东省安全员B证第四批(项目负责人)复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年广东省安全员B证第四批&#xff08;项目负责人&#xff09;证考试为正在备考广东省安全员B证第四批&#xff08;项目负责人&#xff09;操作证的学员准备的理论考试专题&#xff0c;每个月更新的广东省安全员B证…

SpringBoot——模板引擎及原理

优质博文&#xff1a;IT-BLOG-CN 一、模板引擎的思想 模板是为了将显示与数据分离&#xff0c;模板技术多种多样&#xff0c;但其本质都是将模板文件和数据通过模板引擎生成最终的HTML代码。 二、SpringBoot模板引擎 SpringBoot推荐的模板引擎是Thymeleaf语法简单&#xff0…

如何进行无代码开发?有哪些无代码开发工具和无代码软件开发平台?

无代码开发是指不写代码&#xff0c;通过可视化工具进行应用程序开发。无代码开发让非技术用户通过拖拽和选择等简单操作&#xff0c;就能快速创建应用程序。 如何学习无代码开发 随着科技的不断发展&#xff0c;新的技术和工具不断涌现&#xff0c;无代码开发就是其中一种。掌…

YOLOv5算法进阶改进(5)— 主干网络中引入SCConv | 即插即用的空间和通道维度重构卷积

前言:Hello大家好,我是小哥谈。SCConv是一种用于减少特征冗余的卷积神经网络模块。相对于其他流行的SOTA方法,SCConv可以以更低的计算成本获得更高的准确率。它通过在空间和通道维度上进行重构,从而减少了特征图中的冗余信息。这种模块的设计可以提高卷积神经网络的性能。�…

Redis常用操作及应用(二)

一、Hash结构 1、常用操作 HSET key field value //存储一个哈希表key的键值 HSETNX key field value //存储一个不存在的哈希表key的键值 HMSET key field value [field value ...] //在一个哈希表key中存储多个键值对 HGET key fie…

Java代码的编译与执行过程

一、编译过程 1、javac 编译 Java源代码通过编译器&#xff08;javac&#xff09;编译为字节码文件(.class)。 idea中的 build 和 maven package等指令都可以编译为 .class 2、类加载器(Class Loader) 类加载器负责将类的字节码文件加载到内存中&#xff0c;以便在运行时创…

数据在内存中的存储练习题

数据在内存中的存储练习题 文章目录 数据在内存中的存储练习题1. 练习一2.练习二3. 练习三4. 练习四5. 练习五6. 练习六7. 总结 1. 练习一 #include <stdio.h>int main() {char a -1;signed b -1;unsigned char c -1;printf("a %d b %d c %d", a, b, c)…