【PyTorch][chapter 29][李宏毅深度学习]Fine-tuning LLM
参考:
https://www.youtube.com/watch?v=eC6Hd1hFvos
目录:
- 什么是 Fine-tune
- 为什么需要Fine-tuning
- 如何进行Fine-tune
- Fine-tuning- Supervised Fine-tuning 流程
- Fine-tuning参数训练的常用方案
- LORA 简介
- 示例代码
一 什么是 Fine-tune
Fine-tune 常用于小样本学习,适用于特定的任务,比如原始的GPT-3跟矿石一样,通过
Fine-tuning 技术可以加工成钻石。
1.1 Fine-tuning的概念
Fine-tuning,或称微调,是现代机器学习,尤其是深度学习领域中的一个重要且有用的技术方法。它涉及在一个已经预训练的模型基础上进行进一步的训练,使得这个模型更好地适应特定的任务需求。预训练模型通常是在大规模数据集上经过长时间训练的,这使得它学会了丰富的特征表示。通过Fine-tuning,研究者可以在预训练模型的基础上使用一个较小的数据集进行短时间训练,从而适应特定任务。这样做的主要好处是,可以利用预训练模型已经学到的知识,加快新任务的训练速度并提高模型的性能。
1.2 、Fine-tuning的核心思想
Fine-tuning的基本思想是分阶段训练神经网络。第一阶段,模型在一个大型通用数据集上进行训练,比如图像识别模型可以在ImageNet数据集上训练,而自然语言处理模型(如GPT)可以在海量文本上进行训练。在第二阶段,该模型被重新利用,并在更小的特定数据集上继续训练。通常来说,这样的特定数据集与目标任务更为相关,因此模型需要对其进行微调,以在特定任务上实现最佳性能。
具体来说,对于深度学习中的大多数任务,Fine-tuning通常会冻结某些早期层的权重,以保持它们学到的底层特征表示,然后只对后续几层进行更新,以让模型对特定任务更为适应。这种方法不仅减少了需要训练的参数数量,也降低了训练的计算资源需求。
1.3、Fine-tuning的应用
Fine-tuning之所以有效,是因为现代深度学习模型,尤其是卷积神经网络(CNN)和变换器(Transformer)等结构,通常在底层层次上学习到的特征具有很高的通用性。在NLP任务中,比如GPT模型,底层层次学到的词汇表示和基本语法往往可以广泛应用于各种下游任务。因此,通过Fine-tuning,可以将这些知识快速适应于如情感分析、机器翻译等具体任务。
Fine-tuning技术广泛应用于自然语言处理、计算机视觉等领域。以自然语言处理为例,预训练的语言模型(如BERT、GPT等)可以通过微调适应不同的下游任务,如文本分类、命名实体识别、情感分析等。通过微调,这些模型可以学习到特定任务的语言模式和特征,从而提升在任务上的性能。
二 为什么需要Fine-tuning
需要Fine-tuning的原因主要基于以下几个方面
2.1 提高模型性能:
Fine-tuning允许模型在特定任务或数据集上进行进一步训练,从而优化其性能。通过微调,模型可以更好地适应目标任务的特性,提高准确性、泛化能力等关键指标
2.2 利用预训练模型的知识:
预训练模型通常在大规模数据集上进行了长时间的训练,积累了丰富的知识和特征表示。Fine-tuning使得我们可以在这些预训练模型的基础上进行进一步的训练,从而充分利用这些已经学到的知识,避免从头开始训练模型所需的大量时间和计算资源。
2.3 适应特定任务:
不同的任务可能需要模型具备不同的特征提取和决策能力。Fine-tuning允许我们根据特定任务的需求对模型进行调整,使其更加专注于与任务相关的特征和信息,从而提高在特定任务上的表现。
2.4 减少训练数据需求:
对于某些任务,可能没有足够的标记数据来从头开始训练一个深度学习模型。然而,通过Fine-tuning,我们可以利用预训练模型的知识,在较小的数据集上实现较好的性能,从而降低了对大量标记数据的依赖。
2.5 加速模型开发:
Fine-tuning可以显著缩短模型开发的时间。由于预训练模型已经具备了一定的知识和特征表示能力,因此我们可以直接在预训练模型的基础上进行微调,而无需从头开始设计和训练模型。
2.6 提高模型的泛化能力:
虽然预训练模型已经在大规模数据集上进行了训练,但它们可能仍然需要针对特定任务进行微调以提高泛化能力。通过Fine-tuning,我们可以使模型更好地适应目标任务的特性,从而提高其在未见过的数据上的表现。
综上所述,Fine-tuning是一种有效的深度学习技术,它允许我们利用预训练模型的知识,在特定任务或数据集上进行进一步的训练和优化,从而提高模型的性能、适应性和泛化能力。
三 Fine-tune 常用的三种方案
Fine-tuning(微调)是深度学习中提升模型性能的关键技术,它允许模型在预训练的基础上针对特定任务进行进一步优化。以下是三种主要的Fine-tuning方案:
self-supervised(自监督)
supervised(监督)
Reinforcement-tuning(强化学习微调)
3.1、Self-Supervised Fine-Tuning(自监督微调)
概述:
自监督微调是一种利用未标注数据进行模型训练的方法。它通过设计一些预训练任务,使模型在不需要人工标注的情况下学习数据的内在结构和特征。这些预训练任务通常与下游任务相关,从而帮助模型在下游任务上取得更好的性能。
特点:
- 利用未标注数据进行训练,降低了对标注数据的依赖。
- 通过设计预训练任务来挖掘数据的内在特征,提高模型的泛化能力。
- 适用于各种下游任务,如图像分类、语音识别等。
应用实例:
- 在语言识别任务中,可以使用自监督微调对预训练的XLS-R模型进行进一步优化。通过添加后端分类器和统计池化层,并使用较小的参数后端(如factorized Time Delay Neural Network,TDNN-F),可以在保持模型性能的同时减少参数数量。
3.2、Supervised Fine-Tuning(监督微调)
概述:
监督微调是在有标注数据的指导下对模型进行训练的方法。它使用标注过的数据集对预训练模型进行进一步的调整和优化,使模型能够更好地适应特定任务的需求。
特点:
- 需要标注数据进行训练,但标注数据的质量对模型性能有显著影响。
- 适用于各种有监督学习任务,如情感分析、机器翻译等。
- 通过微调,模型可以在少量标注数据上达到较高的性能。
应用实例:
- 在情感分析任务中,可以使用监督微调将预训练的语言模型(如GPT)调整为情感分类模型。通过提供标注好的情感数据集,模型可以学习到情感相关的特征,并在情感分类任务上取得更好的性能。
3.3、Reinforcement-Tuning(强化学习微调)
概述:
强化学习微调是一种基于强化学习框架对模型进行训练的方法。它通过设计奖励函数来引导模型的行为,使其在特定任务上取得更好的性能。强化学习微调通常与预训练模型相结合,以利用预训练模型的知识和特征表示。
训练了一个奖赏模型,通过强化学习来进行Fine-tuning
特点:
- 需要设计奖励函数来评估模型的行为。
- 适用于需要序列决策的任务,如机器人控制、游戏AI等。
- 通过强化学习微调,模型可以学习到更加复杂和灵活的行为策略。
应用实例:
- 在机器人控制任务中,可以使用强化学习微调对预训练的策略进行进一步优化。通过设计合适的奖励函数和仿真环境,模型可以学习到更加高效和稳定的控制策略。例如,FLaRe方法通过大规模仿真和强化学习微调,实现了对机器人策略的显著优化。
综上所述,self-supervised、supervised和Reinforcement-tuning是三种主要的Fine-tuning方案。它们各有特点,适用于不同的任务和场景。在实际应用中,可以根据具体需求和数据情况选择合适的微调方案来提升模型的性能。
四 Supervised Fine-tuning
如下分为五步
五 Fine-tuning 参数训练的常用方案
5.1、Retrain all parameters(重新训练所有参数)
概述:
重新训练所有参数的方法是指在微调过程中,对预训练模型的所有参数都进行更新。这种方法通常适用于目标任务与预训练任务差异较大,或者预训练模型的泛化能力不足以满足目标任务需求的情况。
特点:
- 能够最大程度地利用目标任务的数据进行模型训练。
- 可能需要更多的计算资源和时间,因为所有参数都需要进行更新。
- 如果目标任务与预训练任务差异过大,可能导致模型过拟合或泛化能力下降。
应用场景:
- 当预训练模型与目标任务的领域或任务类型差异较大时。
- 当目标任务的数据量足够大,足以支持对所有参数进行重新训练时。
5.2、Transfer Learning(迁移学习)
概述:
迁移学习是一种将预训练模型的知识迁移到目标任务上的方法。在微调过程中,可以冻结预训练模型的部分或全部参数,仅对部分层或新添加的层进行训练。这种方法能够充分利用预训练模型学到的知识和特征表示,同时减少对新任务数据的依赖。
特点:
- 能够有效地利用预训练模型的知识,提高模型在目标任务上的性能。
- 通过冻结部分参数,可以减少对新任务数据的依赖,降低过拟合的风险。
- 需要仔细选择冻结和训练的参数层,以达到最佳的性能提升效果。
应用场景:
- 当预训练模型与目标任务的领域或任务类型相似时。
- 当目标任务的数据量较少,不足以支持对所有参数进行重新训练时。
5.3、Parameter Efficient Fine-tuning(高效参数微调)
概述:
高效参数微调是一种在保持预训练模型大部分参数不变的情况下,仅对少量参数进行调整的方法。这种方法通过添加新的参数或模块(如adapter、prompt、prefix等),并在这些新添加的参数或模块上进行训练,以实现目标任务的性能提升。
特点:
- 能够显著减少需要训练的参数数量,降低计算资源和时间的消耗。
- 通过添加新的参数或模块,可以灵活地适应不同的目标任务。
- 需要仔细设计新添加的参数或模块,以确保它们能够有效地提升模型性能。
常用方法:
- Adapter Tuning:在预训练模型的每一层或特定层之间添加小的神经网络(称为adapter),并仅对这些adapter进行训练。
- Prompt Tuning:通过修改输入文本的提示(prompt)来引导模型生成符合特定任务或情境的输出,而无需对模型的全量参数进行微调。
- Prefix Tuning:在输入文本前添加一段可学习的“前缀”,这个前缀与输入序列一起作为注意力机制的输入,从而影响模型对输入序列的理解和表示。
- LoRA Tuning:通过分解预训练模型中的部分权重矩阵为低秩矩阵,并仅微调这些低秩矩阵的少量参数来适应新任务。
应用场景:
- 当需要在多个任务之间共享预训练模型时。
- 当计算资源有限,无法支持对所有参数进行重新训练时。
- 当需要快速适应新的任务或领域时。
综上所述,Retrain all parameters、Transfer Learning和Parameter Efficient Fine-tuning是Fine-tune过程中常用的三种参数训练方案。它们各有特点,适用于不同的场景和任务需求。在实际应用中,可以根据具体任务和数据情况选择合适的方案进行微调。
六 LORA 简介
LORA 是LLM 里面Fine-tuning 里面一种非常流行的方案
我们假设有个Base模型,参数量为d*k = 100W个
LORA 通过增加一些参数,其由两个低秩向量组成
假设秩为2 , 其参数量只增加了4000.
LORA(Low-Rank Adaptation)是一种在大语言模型(LLMs)微调中使用的技术,旨在通过仅调整模型的一小部分参数来提高模型在特定任务上的性能,同时保持计算效率和存储需求相对较低。以下是对LORA技术的详细介绍:
一、LORA技术的背景
随着大语言模型的规模不断扩大,训练这些模型所需的计算资源和时间也在不断增加。因此,如何在保持模型性能的同时,降低微调的计算成本和存储需求成为了一个重要的研究方向。LORA技术正是在这个背景下应运而生的。
二、LORA技术的核心原理
LORA技术的核心原理是通过对权重矩阵进行低秩分解,仅调整少量的参数来实现模型的微调。具体来说,LORA在模型的某些特定层中添加了两个低秩矩阵A和B,这些低秩矩阵包含了可训练的参数。在微调过程中,只更新这两个低秩矩阵的参数,而保持原始模型的大部分参数冻结不变。
数学上,LORA通过修改线性层中的权重矩阵ΔW来实现微调,其中ΔW被分解为两个低秩矩阵A和B的乘积。由于矩阵A和B的维度远小于ΔW,因此显著减少了可训练参数的数量。
三、LORA技术的优势
- 高效性:由于LORA只调整模型中的一小部分参数,因此训练过程更加高效,大大缩短了训练时间和计算资源的需求。
- 抗过拟合:由于调整的参数量较少,LORA可以降低过拟合的风险,特别是在小型数据集上训练大型模型时。
- 灵活性:LORA可以在模型的特定层或部分中进行微调,使得它能够在保持模型大部分结构的同时,对模型进行有效的优化。
- 无推理延迟:LORA微调后的模型不会引入推理延迟,因为其简单的线性设计使得部署时可以将新添加的矩阵(A和B)与冻结权重(W)合并。
四、LORA技术的应用
LORA技术特别适用于大型语言模型的微调,如GPT-3、BERT等。这些模型可能有上亿甚至数百亿的参数,使用传统的微调方法需要巨大的计算资源和时间。而LORA技术则可以在保持模型性能的同时,显著降低微调的计算成本和存储需求。
此外,LORA技术还可以与其他微调技术相结合,如适配器(Adapters)、软提示(Soft Prompts)等,以进一步提高微调的效果和效率。
五、LORA技术的变体
随着LORA技术的不断发展,出现了许多LORA的变体,每种变体都针对特定的挑战进行了改进与优化。例如:
- LoRA-FA:通过优化内存使用来解决LORA在微调时的内存开销问题,同时不牺牲微调性能。
- VeRA:进一步减少LORA中可训练参数的数量,同时能够匹配或接近LORA的精度。
综上所述,LORA技术是一种高效、灵活且适用于大型语言模型微调的技术。它通过仅调整模型的一小部分参数来提高模型在特定任务上的性能,同时保持了计算效率和存储需求的相对较低。随着技术的不断发展,LORA及其变体将在人工智能领域发挥越来越重要的作用。
七 LORA 代码
相关文章:
【PyTorch][chapter 29][李宏毅深度学习]Fine-tuning LLM
参考: https://www.youtube.com/watch?veC6Hd1hFvos 目录: 什么是 Fine-tune 为什么需要Fine-tuning 如何进行Fine-tune Fine-tuning- Supervised Fine-tuning 流程 Fine-tuning参数训练的常用方案 LORA 简介 示例代码 一 什么是 Fine-tune …...
Spring无法解决的循环依赖
在Spring框架中,循环依赖是指两个或多个Bean相互依赖,形成一个闭环。例如,Bean A依赖于Bean B,而Bean B又依赖于Bean A。虽然Spring通过三级缓存(一级缓存、二级缓存、三级缓存)机制解决了大多数情况下的循…...
C++的类Class
文章目录 一、C的struct和C的类的区别二、关于OOP三、举例:一个商品类CGoods四、构造函数和析构函数1、定义一个顺序栈2、用构造和析构代替s.init(5);和s.release();3、在不同内存区域构造对象4、深拷贝和浅拷贝5、构造函数和深拷贝的简单应用6、构造函数的初始化列…...
如何应对离别之:短暂离别
《若道离别》(一):如何应对离别之短暂离别 大多数人还是不能很全心愉快地面对离别,哪怕只是短暂,还是从有到无的失落感,有人一天就适应,有人需要很久 不求离别无动于衷,但求使用部分…...
Harmony Next 跨平台开发入门
ArkUI-X 官方介绍 官方文档:https://gitee.com/arkui-x/docs/tree/master/zh-cn ArkUI跨平台框架(ArkUI-X)进一步将ArkUI开发框架扩展到了多个OS平台:目前支持OpenHarmony、Android、 iOS,后续会逐步增加更多平台支持。开发者基于一套主代码…...
笔试-二维数组2
应用 现有M(1<M<10)个端口组,每个端口组是长度为N(1<N<100),元素均为整数。如果这些端口组间存在2个及以上的元素相同,则认为端口组可以关联合并;若可以关联合并,请用二位数组表示输出结果。其中…...
/opt安装软件,就可以使用man xx命令是为什么
引言 以neovim的安装过程为例 下载 curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz sudo rm -rf /opt/nvim sudo tar -C /opt -xzf nvim-linux64.tar.gz添加环境变量前,是无法使用man nvim的 Then add this to your sh…...
vue3和vue2的区别有哪些差异点
Vue3 vs Vue2 主要差异对比指南 官网 1. 核心架构差异 1.1 响应式系统 Vue2:使用 Object.defineProperty 实现响应式 // Vue2 响应式实现 Object.defineProperty(obj, key, {get() {// 依赖收集return value},set(newValue) {// 触发更新value newValue} })Vue3…...
记录备战第十六届蓝桥杯的过程
1.学会了原来字符串也有比较方法,也就是字符串987 > 98 等等,可以解决拼最大数问题 题目链接:5.拼数 - 蓝桥云课 (lanqiao.cn) 2.今天又复习了一下bfs,感觉还是很不熟练,可能是那个过程我些许有点不熟悉ÿ…...
【PVE】Proxmox VE8.0+创建LXC容器安装docker
为了不影响PVE宿主机,通常使用套娃的形式安装Docker容器,再安装相关docker应用。首先在CT模板中创建 Linux 容器,推荐使用Debian。开启ssh登录,修改debian配置,安装docker 一、创建 LXC 容器 1、CT模板下载 点击“模…...
Semantic Kernel - Kernel理解
目录 一、关于Kernel 二、案例实战 三、运行截图 一、关于Kernel 微软的 Semantic Kernel 项目中,Semantic Kernel 是一个工具框架,旨在使得开发人员能够更容易地将大语言模型(如GPT)集成到不同的应用中。它通过提供一组接口、任务模板和集成模块,使开发者能够轻松地设计…...
【JavaWeb06】Tomcat基础入门:架构理解与基本配置指南
文章目录 🌍一. WEB 开发❄️1. 介绍 ❄️2. BS 与 CS 开发介绍 ❄️3. JavaWeb 服务软件 🌍二. Tomcat❄️1. Tomcat 下载和安装 ❄️2. Tomcat 启动 ❄️3. Tomcat 启动故障排除 ❄️4. Tomcat 服务中部署 WEB 应用 ❄️5. 浏览器访问 Web 服务过程详…...
「 机器人 」利用冲程对称性调节实现仿生飞行器姿态与方向控制
前言 在仿生扑翼飞行器中,通过改变冲程对称性这一技术手段,可以在上冲与下冲两个阶段引入不对称性,进而产生额外的力或力矩,用于实现俯仰或其他姿态方向的控制。以下从原理、在仿生飞行器中的应用和典型实验示例等方面进行梳理与阐述。 1. 冲程对称性原理 1.1 概念:上冲与…...
力扣算法题——11.盛最多水的容器
目录 💕1.题目 💕2.解析思路 本题思路总览 借助双指针探索规律 从规律到代码实现的转化 双指针的具体实现 代码整体流程 💕3.代码实现 💕4.完结 二十七步也能走完逆流河吗 💕1.题目 💕2.解析思路…...
企业微信SCRM开创客户管理新纪元推动私域流量高效转化
内容概要 在当今瞬息万变的数字化时代,企业面临着前所未有的客户管理挑战。消费者的需求日益多样化,他们希望能够随时随地与品牌沟通。因此,越来越多的企业意识到,传统的客户管理方式已无法满足市场的需求。在这样的背景下&#…...
C++和Python实现SQL Server数据库导出数据到S3并导入Redshift数据仓库
用C实现高性能数据处理,Python实现操作Redshift导入数据文件。 在Visual Studio 2022中用C和ODBC API导出SQL Server数据库中张表中的所有表的数据为CSV文件格式的数据流,用逗号作为分隔符,用双引号包裹每个数据,字符串类型的数据…...
ESP8266 NodeMCU与WS2812灯带:实现多种花样变换
在现代电子创意项目中,LED灯带的应用已经变得极为广泛。通过结合ESP8266 NodeMCU的强大处理能力和FastLED库的高效功能,我们可以轻松实现多达100种灯带变换效果。本文将详细介绍如何使用Arduino IDE编程,实现从基础到高级的灯光效果ÿ…...
OpenAI 发布首个 AI 智能体
OpenAI 发布首个 AI 智能体 当地时间 1 月 23 日,OpenAI 发布了首个 AI 智能体 Operator124。以下是关于它的详细介绍2: 功能用途 操作网页:可模拟人类操作网页浏览器,能进行点击、滚动、输入等操作,例如在 OpenTable…...
【Linux】gcc/g++的使用
目录 一、gcc/g简介 二、编译和链接 预处理 编译 汇编 连接(生成可执行文件或库文件) 三、动态链接和静态链接 静态库和动态库 gcc其他常用选项 合集传送门:Linux_uyeonashi的博客-CSDN博客 一、gcc/g简介 GCC(GNU Com…...
Kmesh v1.0 正式发布!7 大特性提升网络流量管理效率和安全性
Kmesh v1.0 正式发布!7 大特性提升网络流量管理效率和安全性 2025 年新年伊始,Kmesh 团队正式发布了 Kmesh v1.0234。以下是 Kmesh v1.0 提升网络流量管理效率和安全性的 7 大特性35: 加密通信:引入 IPsec 协议对节点间流量加密&a…...
Day45:元组的创建
在 Python 中,元组(tuple)是一种不可变的序列类型。与列表(list)不同,元组一旦创建就无法修改它们的内容。元组是有序的,可以包含不同类型的元素,支持索引和切片操作,但不…...
Rust:如何动态调用字符串定义的 Rhai 函数?
在 Rust 中使用 Rhai 脚本引擎时,你可以动态地调用传入的字符串表示的 Rhai 函数。Rhai 是一个嵌入式脚本语言,专为嵌入到 Rust 应用中而设计。以下是一个基本示例,展示了如何在 Rust 中调用用字符串传入的 Rhai 函数。 首先,确保…...
在 Ubuntu22.04 上安装 Splunk
ELK感觉太麻烦了,换个日志收集工具 Splunk 是一种 IT 工具,可帮助在任何设备上收集日志、分析、可视化、审计和创建报告。简单来说,它将“机器生成的数据转换为人类可读的数据”。它支持从虚拟机、网络设备、防火墙、基于 Unix 和基于 Windo…...
单片机基础模块学习——数码管(二)
一、数码管模块代码 这部分包括将数码管想要显示的字符转换成对应段码的函数,另外还包括数码管显示函数 值得注意的是对于小数点和不显示部分的处理方式 由于小数点没有单独占一位,所以这里用到了两个变量i,j用于跳过小数点导致的占据其他字符显示在数…...
DAY01 面向对象回顾、继承、抽象类
学习目标 能够写出类的继承格式public class 子类 extends 父类{}public class Cat extends Animal{} 能够说出继承的特点子类继承父类,就会自动拥有父类非私有的成员 能够说出子类调用父类的成员特点1.子类有使用子类自己的2.子类没有使用,继承自父类的3.子类父类都没有编译报…...
LeetCode:40. 组合总和 II(回溯 + 剪枝 Java)
目录 40. 组合总和 II 题目描述: 实现代码与解析: 回溯 剪枝 原理思路: 40. 组合总和 II 题目描述: 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target …...
周末总结(2024/01/25)
工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…...
解决日志中 `NOT NULL constraint failed` 异常的完整指南
在开发和运维过程中,日志是我们排查问题的重要工具。然而,当日志中出现类似 NOT NULL constraint failed 的异常时,往往意味着数据库约束与代码逻辑不匹配。本文将详细分析此类问题的原因,并提供完整的解决方案。 © ivwdcwso (ID: u012172506) 问题描述 在同步 AWS …...
线性规划:机器学习中的优化利器
一、线性规划的基本概念 线性规划(Linear Programming, LP)是运筹学中数学规划的一个重要分支,用于在一组线性不等式的约束条件下,找到线性目标函数的最大值或最小值。其问题可以表述为: 在一组线性约束条件 s.t.&am…...
Flutter子页面向父组件传递数据方法
在 Flutter 中,如果父组件需要调用子组件的方法,可以通过以下几种方式实现。以下是常见的几种方法: 方法 1:使用 GlobalKey 和 State 调用子组件方法 这是最直接的方式,通过 GlobalKey 获取子组件的 State,…...
乐鑫 ESP32-C6 通过 Thread 1.4 互操作性认证
乐鑫信息科技 (688018.SH) 很高兴地宣布,ESP32-C6 已经成功通过 Thread 1.4 互操作性认证。这一成就标志着乐鑫在提供先进物联网解决方案之路上又迈进了重要一步。ESP32-C6 在 Thread Group 授权实验室的严格测试中,展现了与最新 Thread 1.4 协议的无缝兼…...
机器学习2 (笔记)(朴素贝叶斯,集成学习,KNN和matlab运用)
朴素贝叶斯模型 贝叶斯定理: 常见类型 算法流程 优缺点 集成学习算法 基本原理 常见方法 KNN(聚类模型) 算法性质: 核心原理: 算法流程 优缺点 matlab中的运用 朴素贝叶斯模型 朴素贝叶斯模型是基于贝叶斯…...
docker安装elk6.7.1-搜集java日志
docker安装elk6.7.1-搜集java日志 如果对运维课程感兴趣,可以在b站上、A站或csdn上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频 0.规划 192.168.171.130 tomcat日志filebeat 192.168.171.131 …...
苍穹外卖-day06
[!IMPORTANT] HttpClient 是什么?它的作用是什么?在微信登录流程中,code 是什么?它的作用是什么?微信登录的具体步骤有哪些?在微信登录流程中,token 的作用是什么?在微信登录中&…...
iic、spi以及uart
何为总线? 连接多个部件的信息传输线,是部件共享的传输介质 总线的作用? 实现数据传输,即模块之间的通信 总线如何分类? 根据总线连接的外设属于内部外设还是外部外设将总线可以分为片内总线和片外总线 可分为数…...
如何高效启动并优化你的Google广告?
在现代数字营销中,Google广告(Google Ads)已经成为提升品牌曝光、吸引潜在客户和推动销售增长的重要工具。无论你是刚接触广告投放的新手,还是希望优化广告效果的资深营销人员,理解如何有效启动并管理Google广告至关重…...
【Android】布局文件layout.xml文件使用控件属性android:layout_weight使布局较为美观,以RadioButton为例
目录 说明举例 说明 简单来说,android:layout_weight为当前控件按比例分配剩余空间。且单个控件该属性的具体数值不重要,而是多个控件的属性值之比发挥作用,例如有2个控件,各自的android:layout_weight的值设为0.5和0.5࿰…...
低代码系统-产品架构案例介绍、简道云(七)
今天分析另外一个零代码、低代码产品-简道云,跟所有低代码产品的架构图一样,高、大、炫、美。 依然是从下至上,从左到右的顺序。 开发层 搭建中心 表单、流程、报表、用户中心,还是这些内容,自定义打印很多平台都有&am…...
RabbitMQ 分布式高可用
文章目录 前言一、持久化与内存管理1、持久化机制2、内存控制1、命令行2、配置文件 3、内存换页4、磁盘控制 二、集群1、Erlang的分布式特性2、RabbitMQ的节点类型2.1、磁盘节点 (Disk Node)2.2、内存节点 (RAM Node) 3、构建集群3.1 普通集群3.2 镜像队列3.3、高可用实现方案3…...
使用Pytest Fixtures来提升TestCase的可读性、高效性
关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 在编写单元测试时,你是否发现自己有很多重复代码? 数据库设…...
qt QUrl详解
1、概述 QUrl是Qt框架中用于处理URL(统一资源定位符)的类,它提供了构建、解析、编码、解码和处理URL的功能。QUrl支持多种协议,如HTTP、HTTPS、FTP以及文件URL等,并能处理URL的各个组成部分,如协议、主机、…...
从0到1:C++ 开启游戏开发奇幻之旅(一)
目录 为什么选择 C 进行游戏开发 性能卓越 内存管理精细 跨平台兼容性强 搭建 C 游戏开发环境 集成开发环境(IDE) Visual Studio CLion 图形库 SDL(Simple DirectMedia Layer) SFML(Simple and Fast Multim…...
IGBT的损耗计算的学习【2025/1/24】
可以通过示波器实测IGBT电压电流波形,然后通过示波器的math功能将电压电流波形乘积后积分求损耗。 软开管:给了导通信号,但是电流并没有从此IGBT流过 IGBT(绝缘栅双极晶体管)的损耗主要分为 导通损耗 和 开关损耗 两部…...
Python从0到100(八十五):神经网络-使用迁移学习完成猫狗分类
前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能…...
Oracle迁移DM数据库
Oracle迁移DM数据库 本文记录使用达梦官方数据迁移工具DTS,将Oracle数据库的数据迁移至达梦数据库。 1 数据准备 2 DTS工具操作步骤 2.1 创建工程 打开DTS迁移工具,点击新建工程,填写好工程信息,如图: 2.2 新建迁…...
通过 NAudio 控制电脑操作系统音量
根据您的需求,以下是通过 NAudio 获取和控制电脑操作系统音量的方法: 一、获取和控制系统音量 (一)获取系统音量和静音状态 您可以使用 NAudio.CoreAudioApi.MMDeviceEnumerator 来获取系统默认音频设备的音量和静音状态&#…...
AI刷题-最小化团建熟悉程度和
目录 问题描述 输入格式 输出格式 解题思路: 状态表示 状态转移 动态规划数组 预处理 实现: 1.初始化: 2.动态规划部分: (1)对于已分组状态的,跳过: (2&…...
Day36:统计字符串个数
在 Python 中,字符串的统计功能是处理文本数据时非常重要的一部分。我们可以使用多种方法来统计字符串中的字符、子字符串、单词以及出现次数等。Python 提供了内建的方法和函数,如 count()、len() 和正则表达式,可以帮助我们高效地进行这些统…...
数字图像处理:实验六
uu们!大家好,2025年的新年就要到来,咸鱼哥在这里祝大家在2025年每天开心快乐,天天挣大钱,自由自在,健健康康,万事如意!(要是咸鱼哥嘴笨的话,还望大家多多包涵…...
【2025年数学建模美赛C题】第1-5问F奖解题思路+高级绘图+可运行代码
基于多模型分析的奥运会奖牌预测与影响因素研究 解题思路一、问题重述二、问题分析三、模型假设与符号说明四、数据预处理五、奖牌榜预测5.1 基于LSTM长短期记忆循环神经网络的预测模型的建立5.2 模型预测结果 六、首枚奖牌预测6.1 BP神经网络的建立6.2 模型预测结果 七、各国奖…...