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

深度学习预训练和微调

目录

1. 预训练(Pre-training)是什么?

2. 微调(Fine-tuning)是什么?

3. 预训练和微调的对象

4. 特征提取如何实现?

预训练阶段:

微调阶段:

5. 这样做的作用和意义

6. 简单代码示例(PyTorch风格)

预训练用于特征提取

微调用于特征提取优化

具体操作步骤

7.总结


1. 预训练(Pre-training)是什么?

  • 定义:在大型通用数据集(如MS-Celeb-1M)上训练一个模型,使其学习通用的特征表示(例如人脸的特征向量)。

  • 例子

    • 数据集:MS-Celeb-1M(包含100万名人脸图像,用于人脸识别任务)。

    • 目标:训练一个模型(如ResNet、ArcFace)学习如何提取人脸的通用特征(例如五官结构、光照不变性等)。

    • 预训练的输出:得到一个初步的神经网络模型,它的权重已经能较好地表征人脸特征。

  • 为什么预训练?

    • 大数据的预训练能让模型学到更鲁棒的特征,避免从小数据(如VoxCeleb1)从头训练导致的过拟合。

    • 例如,就像先让一个人阅读大量的不同类型的书籍(相当于用大规模数据预训练),目的是让这个人(模型)先掌握一些通用的知识(面部特征的通用表示),比如面部的轮廓、五官的基本形状特征等知识。


2. 微调(Fine-tuning)是什么?

  • 定义:在预训练模型的基础上,用特定任务的小数据集(如VoxCeleb1)进一步调整模型参数,使其适应新任务。

  • 你的例子

    • 数据集:VoxCeleb1(包含说话人视频,用于声纹识别或人脸+语音的多模态任务)。

    • 操作

      1. 保留预训练模型的底层结构(如卷积层,因底层通常提取通用特征如边缘、纹理)。

      2. 修改顶层(如全连接层),适应新任务的类别数(例如VoxCeleb1的说话人ID)。

      3. 用VoxCeleb1的数据微调模型,调整权重以适应新数据分布。

  • 为什么微调?

    • 直接训练小数据效果差,而预训练模型提供了更好的初始化,微调只需少量数据即可达到高性能。

    • 就好像那个已经读过很多书的人(预训练过的模型),现在需要针对某个特定领域的知识(VoxCeleb1数据集所代表的特定任务,如可能的声纹 - 面部关联等任务)进行重点学习和复习(微调),以便更好地完成这个特定任务。


3. 预训练和微调的对象

  • 预训练的内容

    • 模型结构:通常是CNN(如ResNet)或Transformer(如ViT)。

    • 学习到的参数:卷积核权重、全连接层参数等。

    • 目标函数:人脸识别常用ArcFace LossSoftmax Loss

  • 微调的内容

    • 分类头重置:替换最后的全连接层(输出维度改为VoxCeleb的说话人数量)。

    • 参数调整

      • 方案1:全部层微调(数据充足时)。

      • 方案2:冻结浅层(仅调深层,防止小数据过拟合)。

4. 特征提取如何实现?

预训练阶段
  1. 模型选择:选一个特征提取网络(如ResNet50、FaceNet)。

  2. 损失函数:用人脸识别常用的损失(如ArcFace、Triplet Loss),迫使模型学习区分不同人脸的特征。

  3. 输出:模型最后一层前的特征(如512维向量)即为提取的人脸特征。

微调阶段
  1. 迁移特征提取器:将预训练模型的卷积部分(特征提取器)直接迁移到新任务。

  2. 调整分类层:替换顶层分类器,匹配VoxCeleb1的类别数(如1251个说话人)。

  3. 选择性训练

    • 方案1:仅训练顶层(特征提取器固定,适用于数据极少的情况)。

    • 方案2:全部层微调(数据较多时效果更好)。


5. 这样做的作用和意义

  • 作用

    • 提升小数据任务的性能(VoxCeleb1的数据量远小于MS-Celeb-1M)。

    • 节省计算资源(无需从头训练)。

  • 意义

    • 特征可迁移性:预训练模型学到的底层特征(如边缘、纹理)对多数视觉任务通用。

    • 避免过拟合:小数据直接训练易记住噪声,预训练模型提供了正则化效果。


6. 简单代码示例(PyTorch风格)

# 预训练模型加载(以人脸识别为例)
pretrained_model = torchvision.models.resnet50(pretrained=False)
pretrained_model.load_state_dict(torch.load('msceleb_pretrained.pth'))
​
# 微调:替换顶层并训练
num_classes = 1251  # VoxCeleb1的说话人数
pretrained_model.fc = nn.Linear(pretrained_model.fc.in_features, num_classes)
​
# 只微调顶层(可选)
for param in pretrained_model.parameters():param.requires_grad = False
pretrained_model.fc.requires_grad = True
​
# 特征提取(不训练时)
features = pretrained_model.conv_layers(input_image)

预训练用于特征提取

  • 过程 :在大规模数据集(如 MS - Celeb - 1M)上预训练模型,让模型学习到通用的面部特征表示。在这个阶段,模型会自动提取出图像中诸如边缘、纹理、轮廓等基础特征,以及更高层次的语义特征,比如面部的各个组成部分(眼睛、鼻子、嘴巴等)的位置和形状特征,这些特征在人脸识别相关的任务中具有通用性。

  • 作用 :得到一个具有较强特征提取能力的模型,它能够将输入的面部图像转换为具有一定语义意义的特征向量。这些特征向量可以作为后续任务(如在 VoxCeleb1 数据集上的声纹 - 面部关联任务等)的输入,为后续任务提供丰富的特征表示,减少了在新任务上从头开始训练模型提取特征的时间和资源消耗。

微调用于特征提取优化

  • 过程 :当在 VoxCeleb1 数据集上进行微调时,会基于预训练模型提取的特征,进一步调整模型的参数,使其更好地适应 VoxCeleb1 数据集的特点和任务需求。例如,在声纹 - 面部关联任务中,微调可以使模型更关注那些对于关联判断重要的面部特征,如面部的动态表情变化特征(如果视频中有面部表情变化)或者与声纹特征相关联的面部肌肉运动特征等。

  • 作用 :优化后的特征提取模型能够更精准地提取出与 VoxCeleb1 任务相关的特征,提高任务的性能。这是因为微调过程让模型在预训练的基础上,结合新数据集的特定信息,对特征提取的重点和细节进行了调整,使特征更能反映新任务中的关键信息。

具体操作步骤

  1. 预训练阶段(以面部特征提取为例在 MS - Celeb - 1M 数据集上)

    • 数据准备 :收集、清洗和预处理 MS - Celeb - 1M 数据集中的面部图像,包括图像的标准化(调整大小、像素值归一化等)、数据增强(旋转、翻转、裁剪等)操作,以增加数据的多样性和模型的泛化能力。

    • 模型构建 :选择合适的深度学习架构,如卷积神经网络(CNN)。可以使用常见的网络结构如 ResNet、VGG 等,确定网络的层数、每层的神经元数量、卷积核大小、激活函数等超参数。

    • 训练模型 :将预处理后的 MS - Celeb - 1M 数据输入到构建的模型中,设置合适的训练参数,如学习率、批次大小、训练的迭代次数等。通过优化算法(如随机梯度下降 SGD 或 Adam)来更新模型的权重参数,使模型在 MS - Celeb - 1M 数据集上学习到良好的面部特征表示。在训练过程中,可以使用损失函数(如交叉熵损失等)来衡量模型输出与真实标签之间的差异,并通过反向传播来调整模型参数。

    • 保存预训练模型 :在预训练完成后,保存模型的结构和权重参数,以便后续在 VoxCeleb1 数据集上进行微调。

  2. 微调阶段(在 VoxCeleb1 数据集上用于特定特征提取任务)

    • 数据准备 :收集和预处理 VoxCeleb1 数据集。对于视频数据,可以提取视频中的关键帧作为面部图像输入,同时对音频进行特征提取(如梅尔频谱特征等),并整理好相应的标签(如声纹 - 面部是否关联等)。

    • 加载预训练模型 :将之前保存的在 MS - Celeb - 1M 数据集上预训练得到的模型加载到训练环境中。

    • 修改模型(如果需要) :根据 VoxCeleb1 数据集的任务需求,对模型的输出层或者部分中间层进行修改。例如,如果任务是声纹 - 面部关联的二分类任务,可以将预训练模型的输出层修改为两个神经元的全连接层;如果需要融合音频和视频特征,可以添加融合模块来整合预训练模型提取的面部特征和音频特征。

    • 微调训练 :使用 VoxCeleb1 数据集对修改后的模型进行训练。此时,学习率通常会比预训练时小,因为模型已经在预训练阶段学习到了很多通用的特征,微调阶段主要是对模型进行小幅度的调整。通过优化算法对模型的权重进行更新,使模型能够适应 VoxCeleb1 数据集的特定特征和任务。在训练过程中,可以使用验证集来评估模型的性能,防止过拟合,并在适当的时机停止训练(如使用早停策略)。

    • 特征提取与应用 :在微调完成后,可以使用该模型对 VoxCeleb1 数据集中的面部图像进行特征提取,得到优化后的特征向量。这些特征向量可以用于后续的任务,如声纹 - 面部关联判断,通过计算提取的面部特征与声纹特征之间的相似度等方法来完成任务。

7.总结

  • 预训练:在大数据集上学通用特征。

  • 微调:在小数据集上调整模型以适应新任务。

  • 意义:提升小数据性能、节省资源、避免过拟合。

相关文章:

深度学习预训练和微调

目录 1. 预训练(Pre-training)是什么? 2. 微调(Fine-tuning)是什么? 3. 预训练和微调的对象 4. 特征提取如何实现? 预训练阶段: 微调阶段: 5. 这样做的作用和意义 …...

面经-浏览器/网络/HTML/CSS

目录 1. http缓存机制 缓存机制 流程概述 2. 常见的http状态码 1xx(信息性状态码) 3xx(重定向状态码) 4xx(客户端错误状态码) 5xx(服务器错误状态码) 3. http和https的区别…...

轻松实现文件批量命名的实用工具

软件介绍 今天要给大家介绍一款超实用的批量文件重命名小工具,它完全可以称得上是同类产品的绝佳替代品。 软件特性 这小工具叫 MiniRenamer,身材十分苗条,大小还不到 300KB 呢。解压完后,不用任何复杂操作,直接就能…...

基于Redis实现高并发抢券系统的数据同步方案详解

在高并发抢券系统中,我们通常会将用户的抢券结果优先写入 Redis,以保证系统响应速度和并发处理能力。但数据的最终一致性要求我们必须将这些结果最终同步到 MySQL 的持久化库中。本文将详细介绍一种基于线程池 Redis Hash 扫描的异步数据同步方案&#…...

【Pandas】pandas DataFrame sub

Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象(如 DataFrame、Series 或标量)的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...

4.21总结

正式开始设计和实现前端页面 1.目标效果 2.今日实现内容 在前端编写了相应的store,api,utils文件,以便后续的组件复用 2.编写了相应的css文件...

VLA论文精读(十四)PointVLA: Injecting the 3D World into Vision-Language-Action Models

这篇论文瞄准的是2025年在arxiv上发布的一篇VLA领域论文。这篇文章最大的创新点在于将3D点云信息作为补充条件送入模型,而不是DP3一样只用纯3D数据从头训练模型,按照作者的说法这样可以在保留模型原有2D解释能力的同时添加了其3D能力,并且可以…...

BEVDet4D: Exploit Temporal Cues in Multi-camera 3D Object Detection

背景 对于现有的BEVDet方法,它对于速度的预测误差要高于基于点云的方法,对于像速度这种与时间有关的属性,仅靠单帧数据很难预测好。因此本文提出了BEVDet4D,旨在获取时间维度上的丰富信息。它是在BEVDet的基础上进行拓展,保留了之前帧的BEV特征,并将其进行空间对齐后与当…...

Java学习路线--自用--带链接

1.Java基础 黑马:黑马程序员Java零基础视频教程_下部 2.MySQL 尚硅谷:MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板 3.Redis 黑马:黑马程序员Redis入门到实战教程,深度透…...

【锂电池容量特征提取】NASA数据集锂电池容量特征提取(Matlab完整源码)

目录 效果一览程序获取程序内容代码分享研究内容基于NASA数据集的锂电池容量特征提取方法研究摘要关键词 1. 引言1.1 研究背景1.2 研究意义1.3 研究目的 2. 文献综述2.1 锂电池容量特征提取相关理论基础2.2 国内外研究现状 3. NASA数据集介绍3.1 数据集来源与构成3.2 数据采集方…...

vue2使用markdown-it解析markdown文本

1.安装markdown-it npm instal markdown-it 2. 页面中引用 import MarkdownIt from markdown-it ...const mdRender MarkdownIt(); ...data {return {md: new MarkdownIt(),} } 3. html <p v-html"md.render(conetnt)" ></p>...

云服务器怎么选择防御最合适

用户问的是怎么选择云服务器的防御最合适。这个问题看起来是关于云安全方面的&#xff0c;尤其是如何配置防御措施来保护云服务器免受攻击。首先&#xff0c;我需要理解用户的需求可能是什么。他们可能是一个企业或者个人用户&#xff0c;正在考虑上云&#xff0c;但担心安全问…...

ubuntu20.04安装安装x11vnc服务基于gdm3或lightdm这两种主流的显示管理器。

前言&#xff1a;在服务端安装vnc服务&#xff0c;可以方便的远程操作服务器&#xff0c;而不用非要插上显示器才行。所以在服务器上安装vnc是很重要的。在ubuntu20中&#xff0c;默认的显示管理器已经变为gdm3&#xff0c;它可以带来与 GNOME 无缝衔接的体验&#xff0c;强调功…...

汽车动力转向器落锤冲击试验台

汽车动力转向器落锤冲击试验台依据标准&#xff1a;QC/T29096-1992《汽车转向器总成台架试验方法》&#xff1b;以工控机为控制核心&#xff0c;采用步进电机举升机构&#xff0c;高精度的光电编码器为位置反馈元件。能够自动完成落锤的起吊、精确的定位、释放、冲击过程的测量…...

Mybatis延迟加载、懒加载、二级缓存

DAY22.2 Java核心基础 Mybatis 延迟加载、懒加载 提高程序运行效率的技术 延迟加载&#xff0c;也叫惰性加载或者懒加载 延迟加载如何提升程序的运行效率&#xff1f; 持久层操作有一个原则&#xff1a;Java 程序和数据库交互频率越低越好 Java 程序每次和数据库进行交互…...

Linux网络编程 多进程UDP聊天室:共享内存与多进程间通信实战解析

知识点1【项目功能介绍】 今天我们写一个 UDP &#xff0c;多进程与不同进程间通信的综合练习 我这里说一下 这个项目的功能&#xff1a; 1、群发&#xff08;有设备个数的限制&#xff09;&#xff1a;发送数据&#xff0c;其他所有客户端都要受到数据 2、其他客户端 都 可…...

网络结构及安全科普

文章目录 终端联网网络硬件基础网络协议示例&#xff1a;用户访问网页 OSI七层模型网络攻击&#xff08;Hack&#xff09;网络攻击的主要类别&#xff08;一&#xff09;按攻击目标分类&#xff08;二&#xff09;按攻击技术分类 网络安全防御 典型攻击案例相关名词介绍网络连接…...

CAD文件如何导入BigemapPro

问题描述 在使用 BigemapPro 加载 CAD 文件的过程中&#xff0c;会出现两种不同的情况&#xff1a;部分文件能够被软件自动识别投影并顺利加载&#xff1b;而另一部分文件则无法自动识别投影&#xff0c;需要手动干预才能准确加载到影像上。下面为您详细介绍这两种情况的具体操…...

Spring-AOP分析

Spring分析-AOP 1.案例引入 在上一篇文章中&#xff0c;【Spring–IOC】【https://www.cnblogs.com/jackjavacpp/p/18829545】&#xff0c;我们了解到了IOC容器的创建过程&#xff0c;在文末也提到了AOP相关&#xff0c;但是没有作细致分析&#xff0c;这篇文章就结合示例&am…...

opencv 对图片的操作

对图片的操作 1.图片镜像旋转&#xff08;cv2.flip()&#xff09;2 图像的矫正 1.图片镜像旋转&#xff08;cv2.flip()&#xff09; 图像的旋转是围绕一个特定点进行的&#xff0c;而图像的镜像旋转则是围绕坐标轴进行的。图像的镜像旋转分为水平翻转、垂直翻转、水平垂直翻转…...

Python第一周作业

Python第一周作业 文章目录 Python第一周作业 如何在命令行中创建一个名为venv的虚拟环境&#xff1f;请写出具体命令编写一段代码&#xff0c;判断变量x是否为偶数&#xff0c;如果是则返回"Even"&#xff0c;否则返回"Odd"编写代码&#xff0c;使用分支结…...

jinjia2将后端传至前端的字典变量转换为JS变量

后端 country_dict {AE: .amazon.ae, AU: .amazon.com.au} 前端 const country_list JSON.parse({{ country_list | tojson | safe }});...

[渗透测试]渗透测试靶场docker搭建 — —全集

[渗透测试]渗透测试靶场docker搭建 — —全集 对于初学者来说&#xff0c;仅仅了解漏洞原理是不够的&#xff0c;还需要进行实操。对于公网上的服务我们肯定不能轻易验证某些漏洞&#xff0c;否则可能触犯法律。这是就需要用到靶场。 本文主要给大家介绍几种常见漏洞对应的靶场…...

二分查找、分块查找、冒泡排序、选择排序、插入排序、快速排序

二分查找/折半查找 前提条件&#xff1a;数组中的数据必须是有序的 核心逻辑&#xff1a;每次排除一半的查找范围 优点&#xff1a;提高查找效率 代码 public static int binarySearch(int[] arr, int num) {int start 0;int end arr.length - 1;while (start < end) {…...

【AI】SpringAI 第三弹:接入通用大模型平台

1.添加依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId> </dependency> 2.设置 yml 配置文件 在 application.yml 中添加 DeepSeek 的配置信息&#xff1a; spr…...

C++常用函数合集

万能头文件&#xff1a;#include<bits/stdc.h> 1. 输入输出流&#xff08;I/O&#xff09;函数 1.1cin 用于从标准输入流读取数据。 1.2cout 用于向标准输出流写入数据。 // 输入输出流&#xff08;I/O&#xff09;函数 #include <iostream> using namespace…...

22. git show

基本概述 git show 的作用是&#xff1a;显示各种 Git 对象&#xff08;如提交、标签、树对象、文件对象等&#xff09;的详细信息 基本用法 1.基本语法 git show [选项] [对象]2.查看提交的详细信息 git show <commit-hash> # 示例 git show a1b2c3d # 显示某…...

使用blob文件流

1.后端 GetMapping(value "/static/**")public void view(HttpServletRequest request, HttpServletResponse response) {// ISO-8859-1 > UTF-8 进行编码转换String imgPath extractPathFromPattern(request);if(oConvertUtils.isEmpty(imgPath) || imgPath&q…...

操作指南:在vue-fastapi-admin上增加新的功能模块

近期在github上看到一个很不错的web框架&#xff0c;https://github.com/mizhexiaoxiao/vue-fastapi-admin。该项目基于 FastAPI Vue3 Naive UI 的现代化前后端分离开发平台&#xff0c;融合了 RBAC 权限管理、动态路由和 JWT 鉴权&#xff0c;可以助力中小型应用快速搭建&am…...

文字、语音、图片、视频四个模态两两之间(共16种转换方向)的生成技术及理论基础的详细说明及表格总结

以下是文字、语音、图片、视频四个模态两两之间&#xff08;共16种转换方向&#xff09;的生成技术及理论基础的详细说明及表格总结&#xff1a; 1. 技术与理论基础详解 (1) 文字与其他模态的转换 文字→文字 技术&#xff1a;GPT、BERT、LLaMA等语言模型。理论&#xff1a;T…...

FramePack:让视频生成更高效、更实用

想要掌握如何将大模型的力量发挥到极致吗&#xff1f;叶梓老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具&#xff08;限时免费&#xff09;。 1小时实战课程&#xff0c;您将学习到如何轻松上手并有效利用 Llama Factory 来微调您的模型&#xff0c;以发挥其…...

【大语言模型DeepSeek+ChatGPT+python】最新AI-Python机器学习与深度学习技术在植被参数反演中的核心技术应用

在全球气候变化与生态环境监测的重要需求下&#xff0c;植被参数遥感反演作为定量评估植被生理状态、结构特征及生态功能的核心技术&#xff0c;正面临数据复杂度提升、模型精度要求高、多源异构数据融合等挑战。人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;…...

RSS 2025|苏黎世提出「LLM-MPC混合架构」增强自动驾驶,推理速度提升10.5倍!

论文题目&#xff1a;Enhancing Autonomous Driving Systems with On-Board Deployed Large Language Models 论文作者&#xff1a;Nicolas Baumann&#xff0c;Cheng Hu&#xff0c;Paviththiren Sivasothilingam&#xff0c;Haotong Qin&#xff0c;Lei Xie&#xff0c;Miche…...

Oracle expdp的 EXCLUDE 参数详解

Oracle expdp的 EXCLUDE 参数详解 EXCLUDE 是 Oracle Data Pump Export (expdp) 工具中的一个关键参数&#xff0c;用于指定在导出过程中要排除的对象或对象类型。 一、基本语法 expdp username/password DUMPFILEexport.dmp DIRECTORYdpump_dir EXCLUDEobject_type[:name_c…...

Git创建空分支并推送到远程仓库

new-empty-branch是新分支的名称 完全空提交&#xff08;Git 2.23&#xff09;【推荐】 git switch --orphan new-empty-branch git config user.email "youexample.com" git config user.name "Your Name" git commit --allow-empty -m "初始空提交…...

TDS电导率传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 三、程序设计 main文件 tds.h文件 tds.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 TDS电导率传感器介绍 &#xff1a; TDS&#xff08;Total Dissolved Solid&#xff09;&#xff0c;中文名总溶解固…...

初识Redis · C++客户端list和hash

目录 前言&#xff1a; list lpush lrange rpush rpush llen rpop lpop blpop hash hset hget hmget hkeys hvals hexists hdel 前言&#xff1a; 在上一篇文章我们介绍了string的基本使用&#xff0c;并且发现几乎唯一的难点就是使用迭代器方面&#xff0c;并且我们…...

SpringBoot和微服务学习记录Day3

Hystrix 熔断器 在分布式架构中&#xff0c;很多服务因为网络或自身原因不可避免发生故障&#xff0c;如果某个服务出现问题往往会导致一系列的服务都发生故障&#xff0c;导致整个微服务架构瘫痪&#xff0c;称为服务雪崩&#xff0c;Hystrix就是为了解决这个问题的 服务熔…...

12个领域近120个典型案例:2024年“数据要素X”大赛典型案例集(附下载)

2024年10月25日&#xff0c;2024年“数据要素”大赛全国总决赛颁奖仪式在北京举行。这次大赛是首届“数据要素x”大赛&#xff0c;全国共有近2万支队伍踊跃参赛&#xff0c;10万参赛者用数据编织梦想&#xff0c;最终角逐出12个赛道120个典型案例。 根据国家数据局等相关公开资…...

如何在腾讯云Ubuntu服务器上部署Node.js项目

最近弄了一个Node.js项目&#xff0c;包含前端用户前台&#xff0c;管理后台和服务端API服务三个项目&#xff0c;本地搭建好了&#xff0c;于是在腾讯云上新建了个Ubuntu 24.04服务器&#xff0c;想要将本地的Node.js项目部署上去&#xff0c;包括环境配置和数据库搭建。 本文…...

【NLP 67、知识图谱】

你像即将到来的夏季一样鲜明&#xff0c; 以至于我这样寡淡的生命&#xff0c; 竟山崩般为你着迷 —— 25.4.18 一、信息 VS 知识 二、知识图谱 1.起源 于2012年5月17日被Google正式提出&#xff0c;初衷是为了提高搜索引擎的能力&#xff0c;增强用户的搜索质量以及搜索体验 …...

Java写数据结构:栈

1.概念&#xff1a; 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&#xff1a;栈的插…...

跨境电商行业新周期下的渠道突围策略

2024年初&#xff0c;跨境电商圈动荡不断&#xff0c;多家卖家平台股价大跌&#xff0c;引发行业舆论热议。而作为东南亚主战场的Shopee&#xff0c;仅仅几个月时间跌幅已达23%。在这一波冲击中&#xff0c;大多数卖家都在"止血"&#xff0c;但有棵树却逆势而上&…...

Docker如何更换镜像源提高拉取速度

在国内&#xff0c;由于网络政策和限制&#xff0c;直接访问DockerHub速度很慢&#xff0c;尤其是在拉取大型镜像时。为了解决这个问题&#xff0c;常用的方法就是更换镜像源。本文将详细介绍如何更换Docker镜像源&#xff0c;并提供当前可用的镜像源。 换源方法 方法1&#x…...

平方根倒数快速算法

一、平方根倒数算法的由来 在制作3D游戏的时候&#xff0c;曲面是由许多平面构成的&#xff0c;要求出光线在物体表面反射后的效果&#xff0c;就需要知道平面的单位法向量&#xff0c;法向量的长度的平方R很容易求出&#xff0c;单位法向量 坐标值 / R的平方根。电脑每次都要…...

详解.vscode 下的json .vscode文件夹下各个文件的作用

1.背景 看一些开源项目的时候,总是看到vscode先有不同的json文件,再次做一下总结方便之后查看 settings.json肯定不用多说了 vscode 编辑器分为 全局用户配置 和 当前工作区配置 那么.vscode文件夹下的settings.json文件夹肯定就是当前工作区配置了 在此文件对单个的项目进行配…...

【消息队列RocketMQ】二、RocketMQ 消息发送与消费:原理与实践

一、RocketMQ 消息发送原理与模式​ 1.1 消息发送原理​ RocketMQ 消息发送的核心流程围绕 Producer、NameServer 和 Broker 展开。Producer 启动时&#xff0c;会向 NameServer 请求获取 Topic 的路由信息&#xff0c;这些信息包括 Topic 对应的 Broker 列表以及 Broker 上的…...

WPF的发展历程

文章目录 WPF的发展历程引言起源与背景&#xff08;2001-2006&#xff09;从Avalon到WPF设计目标与创新理念 WPF核心技术特点与架构基础架构与渲染模型关键技术特点MVVM架构模式 WPF在现代Windows开发中的地位与前景当前市场定位与其他微软UI技术的关系未来发展前景 社区贡献与…...

新书速览|OpenCV计算机视觉开发实践:基于Qt C++

《OpenCV计算机视觉开发实践:基于Qt C》 本书内容 OpenCV是计算机视觉领域的开发者必须掌握的技术。《OpenCV计算机视觉开发实践:基于Qt C》基于 OpenCV 4.10与Qt C进行编写&#xff0c;全面系统地介绍OpenCV的使用及实战案例&#xff0c;并配套提供全书示例源码、PPT课件与作…...

本地搭建一个简易版本的 Web3 服务

一、环境搭建与工具准备 &#xff08;一&#xff09;安装 Node.js 和 npm Node.js 是一个基于 JavaScript 的运行时环境&#xff0c;npm 是其默认的包管理器。在 Web3 开发中&#xff0c;Node.js 和 npm 是必不可少的工具。 访问 Node.js 官网 并下载最新的 LTS 版本。 安装…...