SE-Net模型实现猴痘病识别

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。

《------往期经典推荐------》

项目名称
1.【DeepLabV3模型实现人体部位分割CIHP数据】
2.【卫星图像道路检测DeepLabV3Plus模型】
3.【GAN模型实现二次元头像生成】
4.【CNN模型实现mnist手写数字识别】
5.【fasterRCNN模型实现飞机类目标检测】
6.【CNN-LSTM住宅用电量预测】
7.【VGG16模型实现新冠肺炎图片多分类】
8.【AlexNet模型实现鸟类识别】
9.【DIN模型实现推荐算法】
10.【FiBiNET模型实现推荐算法】
11.【钢板表面缺陷检测基于HRNET模型】


1. 项目简介

该深度学习项目旨在利用卷积神经网络(CNN)对图像进行分类。项目中使用了经过优化的DenseNet模型,并结合了SE模块(Squeeze-and-Excitation)来增强模型的通道注意力机制,从而提升特征提取能力。整个项目采用了PyTorch作为主要框架,主要应用场景是图像分类任务,能够识别多种类别的图像,并且通过自定义数据增强策略、分层特征提取、模型压缩等手段提高模型的训练效率与准确性。训练数据来自本地的图像文件夹,通过数据增强处理(如调整尺寸、归一化、水平翻转等)后,送入模型进行训练和验证。模型经过Dense Block和Transition层的交替堆叠,最终使用全局自适应平均池化和线性层进行分类预测。项目目标是在不牺牲模型性能的情况下,提升计算效率,并且通过模块化设计,能够方便地扩展到其他场景,如图像分割、目标检测等。本项目适用于学术研究和工业应用场景,能够在小数据量的情况下有效地完成图像分类任务,并输出高质量的分类结果。

2.技术创新点摘要

  1. DenseNet与SE模块的结合:项目使用了DenseNet网络结构,并在每个Dense Layer中集成了SE模块(Squeeze-and-Excitation)。DenseNet通过稠密连接的方式,将前面层的所有特征映射传递给后续层,从而避免了梯度消失问题,并实现了高效的特征复用。而SE模块则通过全局自适应池化和通道权重的重新分配,增强了模型对重要特征的关注度。这种结合可以提升模型在处理复杂图像数据时的表征能力和分类效果。
  2. 使用自定义的层设计与Efficient Memory机制:项目通过自定义了Dense Layer和Transition模块的构建,并在关键层次中引入了内存效率优化机制(Efficient Memory)。这种设计允许模型在计算过程中动态分配内存资源,尤其在处理大规模数据集时,可以显著减少内存消耗,从而保证模型的稳定性与高效性。
  3. 自适应模块化设计:模型通过参数化的方式设置了多个Dense Block和Transition层的堆叠,能够根据不同数据集和任务需求进行自由组合与调整。同时,每个Dense Block的输入特征维度、增长率(Growth Rate)和压缩率(Compression Ratio)均可根据实际情况灵活配置,使得模型在保持较高精度的同时能够适配不同规模的计算资源。
  4. 数据增强策略与优化:项目采用了一套完整的数据预处理与增强策略,包括调整图像尺寸、归一化以及随机水平翻转等,使得模型在数据量较少的情况下仍能保持良好的泛化能力。此外,通过引入学习率调度器和交叉熵损失函数,并结合Adam优化器对模型进行训练,确保了模型的快速收敛和稳定的性能输出。
  5. 多层次的SE-Block应用与分类层设计:在模型的特征提取和分类阶段,项目在每个Dense Layer中引入了SE模块,用以强化局部特征的重要性,并最终通过全局自适应池化层和线性分类器进行输出。该设计能够在多个层次上优化特征权重分配,使得模型对不同类别的判别能力更为精细。

在这里插入图片描述

3. 数据集与预处理

本项目使用的图像数据集来源于本地文件夹,按类别进行组织和存储。每个类别的图像分别存储在不同的文件夹中,这种结构方便使用torchvision.datasets.ImageFolder进行数据加载与标签生成。数据集包含多个不同类别的图像,经过项目中的预处理策略后被划分为训练集和测试集。项目在数据加载时,将80%的数据用于训练,20%用于测试,以确保模型在训练阶段有足够的样本量,同时能够在测试集上评估模型的泛化能力。

数据预处理流程

  1. 图像归一化与尺寸调整:所有输入图像都被统一调整到224x224像素的尺寸,确保模型能够接受大小一致的输入。接着对图像进行归一化处理,使其像素值被标准化到[0,1]范围内。标准化过程中使用了预定义的mean([0.485, 0.456, 0.406])和std([0.229, 0.224, 0.225])参数,这些参数基于通用图像分类数据集(如ImageNet)计算得出,有助于模型更快地收敛。
  2. 数据增强策略:为了提升模型的泛化能力和应对小样本数据集的过拟合问题,项目在训练集中引入了数据增强策略。常用的数据增强方法包括随机水平翻转(提高模型对图像左右变化的鲁棒性)、随机裁剪(模拟不同视角下的场景)等。数据增强在仅使用基本图像数据的情况下,能够有效增加数据的多样性,使模型在训练过程中能够学习到更多潜在的特征。
  3. 特征工程:项目中并未使用显式的特征工程,而是依赖模型自身的深度学习网络结构(DenseNet与SE模块)进行自动特征提取和学习。通过引入通道注意力机制,模型可以动态分配不同通道特征的重要性,从而提升特征提取的有效性。

4. 模型架构

  1. 模型结构逻辑

本项目使用了改进版的DenseNet网络,并在Dense Layer中加入了SE模块。DenseNet模型由多个DenseBlockTransition层级联而成,通过稠密连接机制实现高效的特征传递与复用,从而提升模型的特征表示能力。以下是模型各层结构及其数学公式:

  1. 输入层

    1. 输入图像尺寸:(Batch_Size, 3, 224, 224)
    2. 输入通道数为3(RGB通道),经过卷积层(conv0)后转为num_init_features(初始通道数为64)的特征映射。
  2. Dense Block

    1. 每个DenseBlock由多个稠密层(Dense Layer)堆叠组成。
    2. 在每个稠密层中,输入特征 x_l 经过如下操作(公式):
    3. H l = W 2 ⋅ ReLU ( BN ( W 1 ⋅ ReLU ( BN ( x l ) ) ) ) H_l = W_2 \cdot \text{ReLU}(\text{BN}(W_1 \cdot \text{ReLU}(\text{BN}(x_l)))) Hl=W2ReLU(BN(W1ReLU(BN(xl))))
  • 其中,BN表示Batch Normalization,ReLU为激活函数,W_1为第一个1x1卷积核,W_2为3x3卷积核。H_l为该稠密层生成的新特征映射。

    • 所有前面层输出的特征映射被级联传递给当前层,使得当前层的输入为所有前层输出的级联(Concat(x_1, x_2, ..., x_(l-1)))。
  1. SE模块(Squeeze-and-Excitation Block)

    1. SE模块引入了通道注意力机制,通过全局池化和通道间自适应权重的分配来增强特征的表达能力。其公式如下:
    2. s = F s q ( x ) = 1 H × W ∑ i = 1 H ∑ j = 1 W x i , j s = F_{sq}(x) = \frac{1}{H \times W} \sum_{i=1}^{H} \sum_{j=1}^{W} x_{i,j} s=Fsq(x)=H×W1i=1Hj=1Wxi,j
  • 其中,F_{sq}为全局平均池化操作,将输入特征图 x 的通道维度进行全局压缩。之后通过全连接层(FC)、ReLU和Sigmoid函数得到通道权重,并通过以下公式重新分配特征权重:
  • x ^ = x ⋅ σ ( W 2 ⋅ ReLU ( W 1 ⋅ s ) ) \hat{x} = x \cdot \sigma(W_2 \cdot \text{ReLU}(W_1 \cdot s)) x^=xσ(W2ReLU(W1s))
  • 其中,W_1W_2为FC层的权重矩阵,σ为Sigmoid函数,s为全局特征权重。
  1. Transition Layer

    1. 每个Dense Block之间使用Transition Layer进行特征压缩,防止特征维度过高。其具体操作为:
    2. x o u t = AvgPool ( ReLU ( BN ( W t r a n s ⋅ x ) ) ) x_{out} = \text{AvgPool}(\text{ReLU}(\text{BN}(W_{trans} \cdot x))) xout=AvgPool(ReLU(BN(Wtransx)))
  • 其中,W_{trans}为1x1卷积层,AvgPool为2x2平均池化层。
  1. 分类层

    1. 最后通过全局自适应平均池化(Adaptive Average Pooling)将特征映射压缩为1x1大小,再通过一个全连接层(Linear Layer)完成分类:
    2. y = softmax ( W f c ⋅ x f l a t t e n ) y = \text{softmax}(W_{fc} \cdot x_{flatten}) y=softmax(Wfcxflatten)
  • 其中,W_{fc}为线性层的权重矩阵,x_{flatten}为展平后的输入特征。
  1. 模型的整体训练流程与评估指标

训练流程

  1. 数据加载与预处理:将输入数据按80%与20%比例划分为训练集和测试集。图像数据经过归一化和数据增强(包括图像缩放、随机水平翻转等)处理后,以批量形式输入模型。

  2. 模型初始化与参数设置:模型使用DenseNet结构,通过设定初始通道数、Dense Block层数、增长率(Growth Rate)等参数进行初始化。采用了Adam优化器,初始学习率设定为1e-4

  3. 训练与反向传播

    1. 在每个训练周期(Epoch)中,模型逐批读取数据,经过前向传播计算预测结果。
    2. 使用交叉熵损失(CrossEntropyLoss)函数计算预测值与真实标签之间的差距,并进行反向传播(Backpropagation)更新模型权重。
  4. 评估与模型保存

    1. 每个Epoch结束后,在测试集上进行验证,计算准确率(Accuracy)与损失(Loss)。
    2. 记录最佳模型(以测试集准确率为评判标准),并保存最佳模型参数。

评估指标

  1. 训练准确率与测试准确率(Training & Test Accuracy) :衡量模型在训练集和测试集上的分类能力。其公式为:

Accuracy = Number of Correct Predictions Total Number of Predictions \text{Accuracy} = \frac{\text{Number of Correct Predictions}}{\text{Total Number of Predictions}} Accuracy=Total Number of PredictionsNumber of Correct Predictions

  1. 训练损失与测试损失(Training & Test Loss) :衡量模型在训练集和测试集上的损失值,使用交叉熵损失(Cross Entropy Loss)计算:

CrossEntropyLoss = − ∑ i = 1 C y i log ⁡ ( y i ^ ) \text{CrossEntropyLoss} = -\sum_{i=1}^{C} y_i \log(\hat{y_i}) CrossEntropyLoss=i=1Cyilog(yi^)

其中,y_i为实际类别的one-hot编码,hat{y_i}为模型预测的概率分布。

  1. 学习率(Learning Rate) :每个Epoch结束时记录当前学习率,以确保学习率在优化过程中动态调整。

5. 核心代码详细讲解

1. 数据预处理与加载
train_transforms = transforms.Compose([
    transforms.Resize([224, 224]),  将输入图片resize成统一尺寸224x224像素
    transforms.ToTensor(),  将PIL Image或numpy.ndarray转换为tensor,并归一化到[0,1]之间
    transforms.Normalize(  对图片的每个通道进行标准化处理
        mean=[0.485, 0.456, 0.406],  每个通道的均值
        std=[0.229, 0.224, 0.225])  每个通道的标准差
])
  • transforms.Resize([224, 224]): 将所有输入的图片统一调整到224x224的分辨率,保证模型输入尺寸一致。
  • transforms.ToTensor(): 将图像数据从PIL格式转换为Tensor格式(即张量格式),并将像素值归一化到[0, 1]范围内,为模型训练做好数据格式转换。
  • transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]): 使用给定的均值和标准差对图像的每个通道(RGB三通道)进行标准化处理。这样做能够让数据服从标准正态分布,从而提高模型的收敛速度和稳定性。
2. 自定义DenseNet结构与SE模块集成
class SE_Block(nn.Module):def init(self, ch_in, reduction=16):super(SE_Block, self).
__init__
()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)  全局自适应池化,输出特征图尺寸为1x1
        self.fc = nn.Sequential(  两层全连接网络(用于通道注意力权重计算)
            nn.Linear(ch_in, ch_in // reduction, bias=False),  第一层降维
            nn.ReLU(inplace=True),  ReLU激活
            nn.Linear(ch_in // reduction, ch_in, bias=False),  第二层升维
            nn.Sigmoid()  Sigmoid激活函数,生成通道权重
        )
  • self.avg_pool = nn.AdaptiveAvgPool2d(1): 自适应全局平均池化,将输入的特征图压缩为 1x1 的大小,从而生成通道维度的全局统计量。
  • nn.Linear(ch_in, ch_in // reduction, bias=False): 使用线性变换将通道数由ch_in压缩到 ch_in / 16,降低计算量。
  • nn.ReLU(inplace=True): 使用ReLU激活函数进行非线性映射,保留重要的特征信息。
  • nn.Sigmoid(): 使用Sigmoid函数将输出映射到[0, 1]区间,用于表示每个通道的重要性权重。

通过SE模块,在卷积操作后对每个通道的重要性进行重新分配,从而提升模型的全局特征表示能力。

3. 自定义DenseNet网络结构
class DenseNet(nn.Module):def init(self, growth_rate, block_config, num_init_features=24, compression=0.5, bn_size=4, drop_rate=0,
                 num_classes=10, small_inputs=True, efficient=False):super(DenseNet, self).
__init__
()
第一层卷积层if small_inputs:
            self.features = nn.Sequential(OrderedDict([
                ('conv0', nn.Conv2d(3, num_init_features, kernel_size=3, stride=1, padding=1, bias=False)),
            ]))
  • nn.Conv2d(3, num_init_features, kernel_size=3, stride=1, padding=1, bias=False): 定义第一层卷积层,输入通道数为3(RGB三通道),输出特征通道数为 num_init_features,卷积核大小为 3x3,步长为 1,并且使用填充策略 padding=1 保持输出尺寸不变。

此处的设计考虑到输入图像可能较小,因此 small_inputs=True 时,第一层采用较小的卷积核和步长。

4. 自定义稠密层(Dense Layer)与通道注意力机制(SE Block)集成
class _DenseLayer(nn.Module):def init(self, num_input_features, growth_rate, bn_size, drop_rate, efficient=False):super(_DenseLayer, self).
__init__
()
        self.add_module('norm1', nn.BatchNorm2d(num_input_features)),
        self.add_module('relu1', nn.ReLU(inplace=True)),
        self.add_module('conv1', nn.Conv2d(num_input_features, bn_size * growth_rate,
                                           kernel_size=1, stride=1, bias=False)),
        self.add_module('norm2', nn.BatchNorm2d(bn_size * growth_rate)),
        self.add_module('relu2', nn.ReLU(inplace=True)),
        self.add_module('conv2', nn.Conv2d(bn_size * growth_rate, growth_rate,
                                           kernel_size=3, stride=1, padding=1, bias=False)),
引入SE模块增强通道注意力
        self.add_module('SE_Block', SE_Block(growth_rate, reduction=16))
        self.drop_rate = drop_rate
        self.efficient = efficient
  • self.add_module('norm1', nn.BatchNorm2d(num_input_features)): 添加第一个Batch Normalization层,用于稳定特征分布,防止梯度消失和爆炸。
  • self.add_module('conv1', nn.Conv2d(num_input_features, bn_size * growth_rate, kernel_size=1, stride=1, bias=False)): 1x1卷积层,减少计算量并进行通道变换。
  • self.add_module('conv2', nn.Conv2d(bn_size * growth_rate, growth_rate, kernel_size=3, stride=1, padding=1, bias=False)): 3x3卷积层,生成新的特征映射,并与SE模块结合,通过 SE_Block 增强通道注意力。

SE模块在DenseNet的每个稠密层中加入,使得每一层的输出特征能够被动态调整,提升对关键特征的关注度。

5. 训练与验证流程
for epoch in range(epochs):
    model.train()  设置模型为训练模式
    epoch_train_acc, epoch_train_loss = train(train_dl, model, loss_fn, optimizer)  训练一轮
    model.eval()  设置模型为评估模式
    epoch_test_acc, epoch_test_loss = test(test_dl, model, loss_fn)  在测试集上进行评估
  • model.train(): 将模型设置为训练模式,启用Dropout等正则化操作。
  • train(train_dl, model, loss_fn, optimizer): 调用自定义 train 函数,在训练集上进行一次完整的训练迭代,计算损失和准确率。
  • model.eval(): 设置模型为评估模式,关闭Dropout等操作,防止影响评估结果。
  • test(test_dl, model, loss_fn): 调用自定义 test 函数,在测试集上评估模型性能。

通过逐轮训练和评估,项目能够动态调整模型参数,并根据测试集上的表现保存最佳模型权重。

6. 模型优缺点评价

优点

  1. DenseNet与SE模块的结合:模型在DenseNet的基础上集成了SE(Squeeze-and-Excitation)模块,有效增强了模型的通道注意力机制,从而提升了特征表达能力。SE模块能够自适应地为每个通道分配权重,使模型在捕捉关键特征时表现更好。
  2. 高效的特征复用:DenseNet通过稠密连接的方式,将前一层的所有特征映射传递到后续层,减少了参数量,避免了信息丢失,同时提升了梯度传递的稳定性,减轻了梯度消失问题。
  3. 灵活的模块设计:DenseNet的各个层数、增长率、压缩率等参数可灵活配置,允许根据不同任务需求进行调整。项目中使用了自定义的Dense Layer、Transition层和SE Block,模型结构具备很强的可扩展性和自适应性。
  4. 高效内存管理:模型引入了内存优化机制(efficient memory),可以在处理大规模数据时降低内存消耗,使模型更适合在资源受限的环境中使用。

缺点

  1. 计算复杂度较高:由于DenseNet中的稠密连接会导致每层的输入特征图数量迅速增加,使得在较深网络中计算量和内存需求显著增加,不适合特别大型的数据集。
  2. SE模块可能导致延迟:虽然SE模块提高了模型性能,但在每个Dense Layer中加入SE模块会增加额外的计算开销,导致模型推理速度下降,特别是在实时应用场景中。
  3. 对数据依赖性强:模型性能依赖于输入数据的质量和多样性。在数据分布不均衡或数据量较少时,模型可能表现出过拟合问题。

改进方向

  1. 模型结构优化:可以尝试减少Dense Layer的数量或调整Dense Block与Transition Layer的排列方式,以降低模型的参数量和计算复杂度。
  2. 超参数调整:通过优化增长率(Growth Rate)、压缩率(Compression Rate)和Dropout比率来平衡模型的复杂度与性能。
  3. 数据增强策略的改进:引入更多的数据增强方法,如随机旋转、颜色扰动、CutMix等,提升模型的泛化能力,特别是在小样本数据集上的表现。

↓↓↓更多热门推荐:
基于深度学习的手势控制模型

全部项目数据集、代码、教程点击下方名片↓

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

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

相关文章

深度学习之权重、偏差

1 权重偏差初始化 1.1 全都初始化为 0 偏差初始化陷阱: 都初始化为 0。 产生陷阱原因:因为并不知道在训练神经网络中每一个权重最后的值,但是如果进行了恰当的数据归一化后,我们可以有理由认为有一半的权重是正的,另…

企业物流管理数据仓库建设的全面指南

文章目录 一、物流管理目标二、总体要求三、数据分层和数据构成(1)数据分层(2)数据构成 四、数据存储五、数据建模和数据模型(1)数据建模(2)数据模型 六、总结 在企业物流管理中&…

Spring Boot 与 EasyExcel 携手:复杂 Excel 表格高效导入导出实战

数据的并行导出与压缩下载:EasyExcel:实现大规模数据的并行导出与压缩下载 构建高效排队导出:解决多人同时导出Excel导致的服务器崩溃 SpringBoot集成EasyExcel 3.x: 前言 在企业级应用开发中,常常需要处理复杂的 …

【网络篇】计算机网络——链路层详述(笔记)

目录 一、链路层 1. 概述 2. 链路层提供的服务 (1)成帧(framing) (2)链路接入 (3)可靠交付 (4)差错检测和纠正 3. 链路层的实现 二、多路访问链路和…

Android——显式/隐式Intent

概述 在Android中,Intent是各个组件之间信息通信的桥梁,它用于Android各组件的通信。 Intent 的组成部分 一、显式 Intent 第一种方式 Intent intent new Intent(this, ActFinishActivity.class);startActivity(intent);第二种方式 Intent intent …

__init__.py __all__和 __name__的作用及其用法

__ init__.py 的作用及其用法: 包下的__init__.py 所在目录是一个模块包,本身也是一个模块,可用于定义模糊导入时要导入的内容。当我们导入一个包的时候,包下的__init__.py中的代码会自动执行,因此在某些大的项目被使用频率较高的模块&#x…

曹操出行借助 ApsaraMQ for Kafka Serverless 提升效率,成本节省超 20%

本文整理于 2024 年云栖大会主题演讲《云消息队列 ApsaraMQ Serverless 演进》,杭州优行科技有限公司消息中间件负责人王智洋分享 ApsaraMQ for Kafka Serverless 助力曹操出行实现成本优化和效率提升的实践经验。 曹操出行:科技驱动共享出行未来 曹操…

《探索 HarmonyOS NEXT(5.0):开启构建模块化项目架构奇幻之旅 —— Tabs底部导航栏》

简介 通过学习HarmonyOS Next,实战项目WanAndroid 鸿蒙版,API接口均来自WanAndroid 开源接口,我们一起来做个App吧。 玩Android 开放API:https://www.wanandroid.com/blog/show/2 效果图 创建每个模块下的各个目录 1、feature…

LinkedList 分析

LinkedList 简介 LinkedList 是一个基于双向链表实现的集合类,经常被拿来和 ArrayList 做比较。关于 LinkedList 和ArrayList的详细对比,我们 Java 集合常见面试题总结(上)有详细介绍到。 双向链表 不过,我们在项目中一般是不会使用到 Link…

MybatisPlus入门(六)MybatisPlus-null值处理

一、MybatisPlus-null值处理 1.1)问题引入: 在查询中遇到如下情况,有部分筛选条件没有值,如商品价格有最大值和最小值,商品价格部分时候没有值。 1.2)解决办法: 步骤一:新建查询实…

基于树莓派的安保巡逻机器人--(一、快速人脸录入与精准人脸识别)

目录 零、前言 一、人脸检测 二、人脸识别 1、采集人脸 2、训练人脸识别模型 3、人脸识别应用 零、前言 随着智能安防需求的增长,基于人工智能和物联网的安保系统逐渐成为趋势。树莓派因其低成本、高扩展性等特点,成为很多AI项目的理想平台。本文将为大…

网络编程项目之UDP聊天室

项目要求 利用UDP协议,实现一套聊天室软件。服务器端记录客户端的地址,客户端发送消息后,服务器群发给各个客户端软件。 问题思考 客户端会不会知道其它客户端地址? UDP客户端不会直接互连,所以不会获知其它客户端地址…

Java-String类

字符串这个词我想同学们并不陌生,但Java语言中的字符串和我们之前所学习的C语言字符串,差别可谓是非常之大,因为在C语言当中,想要表示一个字符串,就只能使用字符数组或字符指针,但是这种" 对数据进行细…

大学生网上面试注意事项,试试白瓜面试

在数字化时代,大学生网上面试已成为求职过程中的一个关键环节。为了在这个虚拟舞台上留下深刻印象,以下是一些针对大学生网上面试的注意事项,同时,我们将探讨如何利用“白瓜面试”这一AI面试助手来提升你的面试表现。 大学生网上…

SpringBoot【实用篇】- 热部署

文章目录 目标:1.手动启动热部署2.自动启动热部署4.禁用热部署 目标: 手动启动热部署自动启动热部署热部署范围配置关闭热部署 1.手动启动热部署 当我们没有热部署的时候,我们必须在代码修改完后再重启程序,程序才会同步你修改的信息。如果我们想快速查…

【源码+文档】基于SpringBoot+Vue旅游网站系统【提供源码+答辩PPT+参考文档+项目部署】

作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

ES(2)(仅供自己参考)

Java代码的索引库: package cn.itcast.hotel;import lombok.AccessLevel; import org.apache.http.HttpHost; import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; import org.elasticsearch.client.RequestOptions; import org.elasticsea…

《ToDesk云电脑vs青椒云性能测试,谁更能实现游戏自由?》

ToDesk云电脑vs青椒云性能测试 【前言】【使用云电脑的意义】【实测软件】【性能参数对比】1. 硬件配置2.游戏兼容性3. 延迟、流畅度与画面清晰度4. 用户体验5. 价格对比6. 附加功能 【游戏性能测试】《游戏一 黑悟空》《游戏二 赛博朋克 2077》《游戏三 CS反恐精英》 【本文小…

HarmonyOS开发5.0 net 启动界面设置

第一步、创建我们界面 第二步, 在EntryAbility中配置启动页面,在entry/src/main/ets/entryability/EntryAbility.ets中配置启动页面 配置如下 至此大功告成

python--函数详解二

一、作用域: 一个标识符的可见范围,这就是标识符的作用域,一般说的是变量的作用域 1.1、全局作用域 运行结果 在整个程序运行环境中可见。可以被多个函数重复多次使用 1.2、局部作用域 运行结果 这里调用a,显示未定义&#xff…