LoRA、QLoRA与DoRA实战指南:消费级显卡也能高效微调大模型
我第一次带新人做微调时A同学兴奋地写了个全量微调脚本然后盯着屏幕上CUDA Out of Memory的红色报错沉默了很久。这个场景太常见了很多小白程序员第一步就想把整个模型权重重新训练一遍结果卡在显存这道坎上。其实LoRA、QLoRA和DoRA这类高效微调技术就是专门来解决这个问题的——它们让普通开发者在消费级显卡上也能把7B甚至13B的大模型调成自己需要的样子。这篇文章我会把LoRA、QLoRA和DoRA的原理、适用场景、实战配置和踩坑经验一次性讲透。内容偏向实操如果你刚接触大模型微调照着跑通一个最小的训练流程不存在太大障碍如果你已经跑过微调但效果不理想后面关于参数调优和常见问题的部分也能帮你省不少时间。1. 微调这件事为什么不能“大力出奇迹”1.1 全量微调的显存账算清楚你就清醒了先说基础概念。所谓全量微调就是把预训练模型的所有参数都参与训练更新每一层的权重。听起来没问题但你把账算清楚就明白了。拿一个7B参数量的模型举例如果用FP16精度加载光权重文件就要占14GB显存。训练过程中还需要额外记录梯度、优化器状态和中间激活值。Adam优化器本身就要为每个参数保存两份状态也就是要再占28GB梯度再占14GB中间激活值根据序列长度和batch size还会暴涨。加总起来训练一个7B模型轻轻松松需要40GB以上显存这是在没有任何优化技巧的前提下。一个很直观的类比全量微调就像你想在一本已经印刷装订好的书里改内容必须把整本书拆开重排每一页再装回去。工程量大、成本高、还容易弄坏原书。大多数小白手里的单卡根本连拆书的机器都没有。1.2 LoRA的聪明之处不动原书加页注释LoRALow-Rank Adaptation的思路完全不同。它把预训练模型的所有原始权重全部冻结只额外训练一组很小的参数量来“补救”。这组参数怎么设计神经网络里的权重矩阵W通常是一个高维矩阵。LoRA假设微调带来的权重变化ΔW是“低秩”的也就是说不需要一个完整的大矩阵来表达这个变化而可以用两个小矩阵的乘积来近似ΔW B × A。其中B和A的维度远小于W把两者叠起来可训练参数量直接缩小了几个数量级。用生活化的话讲LoRA不把原模型改掉而是像在书页边缘加注释、贴便签。你只需要训练那些“便签”上的内容而“便签”的稀疏程度由秩r控制。实际训练中一个7B模型用r8做LoRA可训练参数量往往只有十几MB到几十MB是原模型的0.1%甚至更低。为什么这样可以研究表明大模型在微调时真正需要改变的方向其实集中在极低维的子空间里不需要把所有维度都大改一遍。这就是LoRA能保持效果又大幅省显存的理论根基。PEFT库对这块做了很成熟的封装你不需要手动拆矩阵配置几个参数就能跑起来。1.3 QLoRA和DoRA分别是LoRA的“减负版”和“升级版”QLoRA的全称是Quantized LoRA核心思想是在LoRA的基础上把冻结的原始权重再量化到4bit来存储。权重占用从FP16的2字节直接压缩到大约0.5字节显存瞬间省掉四分之三。配合双重量化、分页优化器等trick一张24GB显存的显卡跑13B模型的微调成为可能。DoRA则是另一种演进方向。它把预训练权重拆成了“幅度”和“方向”两个维度方向分量用LoRA去更新幅度分量单独学习。研究发现全量微调和LoRA更新权重的模式各有侧重点全量微调会同时改变方向和幅度而普通LoRA主要改变方向两者幅度变化的比例有差异。DoRA就是想在这之间取得一个平衡让低参数量下也能更接近全量微调的效果。用一个表格快速区分三者后面实战部分会逐个展开方法原始权重处理可训练参数主要优势主要成本LoRA全精度冻结极少量增量矩阵显存占用低、效果好相比全量微调极限精度略有损失QLoRA4bit量化冻结极少量增量矩阵显存占用极低、可在消费级显卡跑大模型需要对量化配置有一定理解DoRA全精度冻结权重分解极少量增量矩阵幅度参数低秩情况下更容易逼近全量微调效果某些训练框架里速度略慢2. 动手前先选好工具和配置2.1 硬件配置要多少我先说个底线经常有人问“我这张显卡能不能跑”我的经验是如果你只是想跑通流程一张16GB显存的显卡用QLoRA微调7B模型完全够用如果用LoRA全精度微调7B建议至少24GB想跑13BQLoRA是更现实的选择。以我实际跑过的配置为参考一台消费级工作站配24GB显存用QLoRA微调7B模型训练序列长度1024batch size设为1加梯度累积显存占用大概能控制在12GB到16GB之间。这个数字对小白来说很关键意味着你不需要租昂贵的多卡服务器在自己机器上就能完成整个实验闭环。注意这里说的是微调训练不是推理。推理阶段显存需求小很多7B量化后8GB甚至6GB都能跑但训练时因为有反向传播和优化器状态显存占用会明显上升。2.2 必要的库和版本别在这一步卡住微调生态现在非常成熟最常用的组合是transformers加PEFT加bitsandbytes再加上datasets和accelerate。PEFT负责LoRA/QLoRA/DoRA的配置和注入bitsandbytes负责量化accelerate负责分布式和混合精度训练。有几个版本层面的坑要提前说bitsandbytes在Windows上的支持历史上有过一段颠簸期如果你用Windows最好确认装的是支持当前CUDA版本的wheeltransformers和PEFT的版本要匹配老版本PEFT可能不支持DoRA建议PEFT升级到较新版本。另外如果你的显卡不支持bfloat16就在配置里统一用float16否则会出现精度不一致导致loss不下降的问题。一个值得养成的习惯是把环境依赖写进requirements.txt固定版本号。我在不同机器上复现项目时绝大多数问题都出在版本漂移上。LoRA本身对版本不是特别挑剔但QLoRA依赖bitsandbytes的量化选项DoRA依赖PEFT版本与其临时踩坑不如一步锁定。2.3 模型与数据集选择怎么区分“能跑”和“能学好”对小白来说选模型这事很容易走极端。要么选个上百B的大模型要么选一个太冷门的模型遇到问题都搜不到答案。我的建议是先从成熟的7B模型开始社区生态完善、资料丰富遇到问题容易排查显存压力也可控。数据集这边我强烈建议第一次跑通流程用“小而规整”的数据。不需要一上来就上几万条数据。几百到一两千条、格式统一、质量干净的中文指令数据足够验证整个微调链路。字段可以是instruction、input、output三段的经典结构或者直接是单轮对话的列表。很多小白一上来就追求大而全的数据集结果训练时间拉长、问题难以定位反而不利于理解LoRA的效果。你可以用一个非常小的演示数据集先确认Loss能掉下来、模型能学会固定格式再换真实业务数据。这一步能帮你把“模型问题”和“代码问题”彻底分开。3. LoRA实战手把手跑通第一个微调流程3.1 加载模型并注入LoRA配置我以对话模型为例完整代码大致是下面这个结构。这段代码是实际可跑的模板细节处我加了中文注释方便你对照自己环境修改。首先加载tokenizer和模型。这里要注意模型加载时就把torch_dtype指定为bfloat16或float16而不是加载后再转换否则会白白多占一次显存。import torch from transformers import AutoTokenizer, AutoModelForCausalLM model_path 你的模型路径 tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) if tokenizer.pad_token is None: tokenizer.pad_token tokenizer.eos_token model AutoModelForCausalLM.from_pretrained( model_path, torch_dtypetorch.bfloat16, device_mapauto, trust_remote_codeTrue, )然后设置LoRA配置并注入模型。注意target_modules要根据模型的架构来定常见的有q_proj、v_proj、k_proj、o_proj等你可以打印模型结构确认实际名称。from peft import LoraConfig, get_peft_model lora_config LoraConfig( r8, lora_alpha16, target_modules[q_proj, v_proj], lora_dropout0.05, biasnone, task_typeCAUSAL_LM, ) model get_peft_model(model, model.print_trainable_parameters())print_trainable_parameters()会输出可训练参数量。如果看到类似“trainable params: 8M”而总参数是7B这样悬殊的比例说明配置生效了。这一步跑通LoRA的核心就已经掌握了一半。3.2 训练参数的关键决策点训练环节经常被忽略的是TrainingArguments。很多小白直接照搬默认值结果Loss不降或者显存爆掉都不知道原因。其实核心参数就那几个per_device_train_batch_size在单卡上先设1不要贪大。显存不够时优先用梯度累积。gradient_accumulation_steps通过多个小batch累积来模拟大batch避免显存压力。例如batch_size1加accumulation_steps8效果相当于batch_size8。learning_rateLoRA常用1e-4到2e-4。低于1e-5训练过慢高于5e-4则容易发散。num_train_epochs小数据集通常3到5个epoch就够多了容易过拟合。logging_steps和save_steps设得小一点方便观察loss曲线。我的经验是第一次跑的时候把save_total_limit设成2避免磁盘被checkpoint塞爆。另外fp16True或bf16True必须开一个全精度训练既慢又费显存容易无端报错。from transformers import TrainingArguments, Trainer training_args TrainingArguments( output_dir./lora_output, per_device_train_batch_size1, gradient_accumulation_steps8, learning_rate2e-4, num_train_epochs3, logging_steps10, save_steps200, save_total_limit2, bf16True, remove_unused_columnsFalse, )3.3 数据预处理和训练LoRA训练前要把原始文本转成模型能读的格式。最简单的方式是将instruction和output拼成一段对话文本然后用tokenizer批量截断和padding。要特别注意max_length不要设太长否则输入侧显存会快速上涨。以7B模型为例max_length1024是性价比比较高的起点。from datasets import Dataset def format_func(example): text f指令{example[instruction]}\n回答{example[output]} return text dataset Dataset.from_list(your_data_list) dataset dataset.map(lambda x: tokenizer(format_func(x), truncationTrue, max_length1024), remove_columnsdataset.column_names) trainer Trainer( modelmodel, argstraining_args, train_datasetdataset, ) trainer.train()流程跑通之后你会看到loss在几个step内明显下降。一个常见误区是觉得loss必须降到0才好其实在指令微调中loss降到1附近就已经有可用的效果了关键是看实际生成的回复是否符合格式要求。4. QLoRA实战把7B甚至13B塞进小显存4.1 4bit量化配置到底做了什么QLoRA和普通LoRA的最大区别就是加载模型时多了一步量化。通过BitsAndBytesConfig把模型权重从16bit降到4bit存储但训练时计算的精度仍然可以保持较高精度。这个“低精度存储、高精度计算”的思路让显存占用大幅下降同时不会牺牲太多效果。具体来说QLoRA用了NF4NormalFloat4这种专门为权重分布设计的4bit数据类型配合双重量化把量化常数再做一次量化进一步省显存。训练中还支持分页优化器当显存不够时会自动把优化器状态临时放到CPU内存防止直接Out of Memory。一个常见的认知误区是“4bit训练效果一定差很多”。实际上因为训练时通过反量化把权重临时还原到计算精度模型效果通常和8bit甚至全精度微调非常接近。这也是QLoRA能被广泛使用的原因。from transformers import BitsAndBytesConfig bnb_config BitsAndBytesConfig( load_in_4bitTrue, bnb_4bit_quant_typenf4, bnb_4bit_compute_dtypetorch.bfloat16, bnb_4bit_use_double_quantTrue, ) model AutoModelForCausalLM.from_pretrained( model_path, quantization_configbnb_config, device_mapauto, trust_remote_codeTrue, )4.2 量化模型与LoRA的配合要点加载完量化模型后不能直接训练得先做两步准备调用prepare_model_for_kbit_training对模型进行适配同时开启gradient checkpointing用计算换显存。from peft import prepare_model_for_kbit_training model prepare_model_for_kbit_training(model) model.gradient_checkpointing_enable()这里有一个细节prepare_model_for_kbit_training会冻结模型参数并启用梯度检查点所以要在注入LoRA之前调用。先prepare再get_peft_model顺序不能反。之后的配置和普通LoRA大同小异。如果你想对比QLoRA和普通LoRA的效果可以保持r8、alpha16这些参数不变只改变模型加载方式。我实测下来同样数据下QLoRA的生成质量与LoRA肉眼几乎无法分辨但显存占用能降低50%以上这对卡在24GB显存边界上的用户来说就是“能跑”和“不能跑”的区别。如果你用的是较新版本的PEFTtarget_modules也可以配置更多模块但记住一个原则并不是目标模块越多越好。模块太多会让可训练参数量变大反而失去LoRA省资源的初衷也可能导致过拟合。先用q_proj和v_proj跑通再逐步扩充。4.3 训练中特有的显存优化技巧QLoRA虽然省显存但并不是无脑上就行。我总结几个实操中比较有用的技巧设置gradient_checkpointing之后per_device_train_batch_size可以适当调大但需要和gradient_accumulation_steps配合不要一上来就追求大batch。如果出现CUDA内存碎片问题可以在训练开始前执行torch.cuda.empty_cache()。优化器建议用paged_adamw_8bit它是bitsandbytes提供的8bit优化器能进一步压内存。不过我提醒一句优化器内存的节省主要体现在CPU内存而不是显存别指望它解决显存爆掉的问题。序列长度是隐形的显存杀手。同样的batch下max_length从1024加到2048显存可能直接翻倍。如果数据里没有特别长的样本就果断设短一点。from transformers import TrainingArguments training_args TrainingArguments( output_dir./qlora_output, per_device_train_batch_size1, gradient_accumulation_steps4, learning_rate2e-4, num_train_epochs3, optimpaged_adamw_8bit, bf16True, )5. DoRA实战想更接近全量微调精度可以试试它5.1 DoRA的权重分解逻辑DoRA这个名字是Weight-Decomposed LoRA的缩写。它比LoRA多了一步把模型权重W分解成幅度向量m和方向矩阵V。微调过程中方向部分用类似LoRA的方式做低秩更新而幅度向量则单独作为一个可学习参数参与训练。为什么这个分解有效全量微调时权重矩阵的变化同时体现在幅度和方向上而普通LoRA倾向于只改动方向。DoRA通过显式保留幅度学习让模型在低参数量下也能更灵活地调整权重的整体尺度从而更接近全量微调的表达能力。它在数学形式上并不复杂但实际效果确实在不少任务上比LoRA更稳。代价是训练速度有一定下降反传时需要多做一步权重分解和重组。对小白来说DoRA可以作为LoRA跑通之后的进阶实验来尝试不需要一上来就用。5.2 PEFT中的DoRA配置在PEFT中启用DoRA非常简单关键在于LoraConfig里设use_doraTrue。from peft import LoraConfig, get_peft_model dora_config LoraConfig( r8, lora_alpha16, target_modules[q_proj, v_proj], lora_dropout0.05, biasnone, task_typeCAUSAL_LM, use_doraTrue, )其他训练代码几乎不用改。需要注意的是当前版本的DoRA适配范围有差异有些较老的模型结构或自定义层可能不支持。如果报错提示某个模块不兼容优先检查是不是在target_modules里包含了不支持的模块名。我在实际对比中有一个直观感受使用DoRA时训练曲线的loss下降通常更平稳最终生成的文本风格一致性更好。但也有一个明显的代价就是单次训练速度大概慢10%到20%。如果你的数据量很大且追求吞吐量普通LoRA可能更合适如果数据量小、更在意质量DoRA是个不错的选择。5.3 如何科学对比LoRA、QLoRA、DoRA的效果很多人换方法时只看最终生成的几个例子其实这是很片面的。要科学对比最好固定同一数据集、同一训练轮数、同一学习率只改变方法然后分别记录三样东西显存峰值、训练总耗时、验证集Loss或评测指标。我常用的做法是把训练脚本写成可配置模式方法名作为参数传入这样三种方法可以在同一套代码上无缝切换。评测时准备一组固定输入分别生成回复再按业务规则打分。如果能跑通自动评测指标就尽量用自动指标别靠肉眼。从我的经验看三者之间的关系大致是QLoRA最省显存LoRA速度最快DoRA在低秩条件下精度上限更高。把三个方法都留在一个项目里按需调用才是实操中最舒服的状态。6. 参数调优、避坑指南与常见问题速查6.1 参数调整的顺序别一上来就乱调很多小白拿到LoRA配置后第一件事是疯狂调r和alpha。其实正确的调整顺序应该是先固定模型和数据把learning_rate调到Loss能稳定下降再调整num_train_epochs防止欠拟合或过拟合最后才动r、alpha这些结构参数。r和alpha的关系我多说一句。alpha不是学习率它控制的是LoRA增量矩阵的缩放比例。通常alpha可以设为r的2倍或者直接等于r例如r8, alpha16是很多项目的默认组合。如果你发现模型学不动可以尝试把alpha调大如果发现过拟合则优先减小r。数据质量对微调的影响权重远大于参数微调。我见过很多小白花大量时间调参却忽略了数据里有大量重复、错误或格式不统一的样本结果Loss降到一定程度就卡住。先清洗数据再谈调参这是铁律。6.2 显存、Loss和效果三大类问题的排查思路显存类问题出现频率最高解决优先级也最高。如果直接OOM优先把batch_size设为1、开启gradient_checkpointing、缩短max_length三者可以叠加使用。如果显存没有OOM但速度极慢可能是在用CPU计算检查device_map是否正确以及模型是否真的放到了GPU上。Loss类问题最常见的场景是Loss一直不降。此时先看学习率是否太小或太大再看数据格式是否统一。如果数据本身没问题就检查是否忘了设置bf16或fp16。我遇到过一次很隐蔽的bug是tokenizer的padding token没有设置导致部分样本padding到eos token模型学到了大量无意义的结束符输出。效果类问题则要分情况。如果训练loss低但生成效果差基本可以断定过拟合了此时减小r、增大数据量、增加lora_dropout都会有效。如果模型生成的内容和微调前没区别多半是数据量不够或者学习率太低可以先加大学习率试几个step观察loss变化。6.3 一套可以直接抄作业的常用参数速查表参数推荐起点调优方向说明r8过拟合调小欠拟合调大控制低秩矩阵的维度越大可学习能力越强lora_alpha16常与r按2倍关系调整影响LoRA更新的缩放力度lora_dropout0.05过拟合可调至0.1防止增量矩阵过拟合learning_rate2e-4下降慢调大发散调小对LoRA类训练最敏感的单一参数num_train_epochs3小数据可加到5注意监控验证集Lossmax_length1024按业务数据长度调整显存占用随长度线性增长gradient_accumulation_steps4或8调整等效batch size不影响显存峰值但影响训练稳定性说句实在话没有一组参数能通吃所有任务。LoRA相关方法的好处就是参数少、可解释性强每一次调整的影响相对可控特别适合通过实验积累经验。把上面这些参数作为起点每个参数只动一个记录下效果变化慢慢你就能建立自己的一套调参手感。最后再分享一个小技巧每次训练完不要只保存模型权重建议把当时的LoraConfig和TrainingArguments一并保存在同一个目录下。PEFT的adapter保存本身就带配置但训练超参不会自动存。我吃过一次亏隔了两周回来看旧实验完全想不起来当时的参数组合只能重新跑。把配置和结果记录在一个简单的训练日志表格里你会感谢当时的自己。

相关新闻

冒泡排序优化全解析:从朴素实现到双向扫描与边界记录

冒泡排序优化全解析:从朴素实现到双向扫描与边界记录

1. 为什么冒泡排序还值得聊优化冒泡排序大概是每个学编程的人最早接触的排序算法,没有之一。我见过太多人工作三五年之后,提起冒泡排序一脸不屑——“O(n) 的玩意儿,实际项目里谁用啊?”这话对,也不对。对的地方在于&a…

2026/10/20 10:52:54 阅读更多 →
diagram-design图表设计规范:让架构图、流程图清晰又易维护

diagram-design图表设计规范:让架构图、流程图清晰又易维护

1. 为什么做 diagram-design:从一张丑图说起1.1 一张混乱的图,毁掉一次评审我最早被 diagram-design 这个概念击中,是在一次方案评审会上。当时某位同学花了一周时间画架构图,投影一打开,所有人都沉默了:线…

2026/10/20 10:53:18 阅读更多 →
CAS+Shiro深度集成:解决单点登录态不一致与权限绕过

CAS+Shiro深度集成:解决单点登录态不一致与权限绕过

简介:本资源是一套基于CAS、SpringMVC与Shiro三者深度集成的单点登录(SSO)完整实践项目,面向Java Web开发中高级工程师及企业级权限系统设计人员,解决多应用系统间统一身份认证与细粒度权限管控难题。项目涵盖CAS服务端…

2026/10/20 10:59:19 阅读更多 →

最新新闻

2026年教育培训SaaS系统怎么选?从评价维度到避坑指南全解析

2026年教育培训SaaS系统怎么选?从评价维度到避坑指南全解析

第一次被培训机构老板问“哪家SaaS系统排名高”的时候,我记得很清楚,那是2018年,一个做少儿艺术培训的朋友拿着三份报价单来找我对比。那时候大家比的还是谁家的功能模块多、谁家的App长得好看。到了2026年,这个问题不但没变简单&…

2026/10/20 12:06:01 阅读更多 →
KECA核熵成分分析:训练测试集分离与数据泄漏避坑实践

KECA核熵成分分析:训练测试集分离与数据泄漏避坑实践

简介:这是一份面向非线性高维数据降维的KECA(核熵成分分析)MATLAB程序,适用于机器学习、模式识别及特征提取场景,尤其针对Q9A等需要核熵分析的实验问题。KECA结合核方法与熵理论,将数据映射到高维特征空间后…

2026/10/20 12:06:01 阅读更多 →
Kafka 2.8.0生产者消费者原生实现与高可用配置详解

Kafka 2.8.0生产者消费者原生实现与高可用配置详解

1. 项目概述:为什么一个“简单实现”值得花时间深挖?Kafka集群(2.8.0版本)之四:Java简单实现生产者和消费者——这个标题看起来平平无奇,甚至有点“教科书感”。但在我过去十年带团队落地消息中间件的实战中…

2026/10/20 12:06:01 阅读更多 →
MATLAB数据分析与挖掘实战:数据预处理、特征工程与建模避坑指南

MATLAB数据分析与挖掘实战:数据预处理、特征工程与建模避坑指南

简介:MATLAB数据分析与挖掘实战完整教程整合了配套源码、说明文档与真实数据集,面向工科生、数学专业及算法方向学习者,可系统演练数据导入、清洗、建模、评估与结果分析的完整链路,帮助理解数据挖掘中常用的预处理思路和建模方法…

2026/10/20 12:06:01 阅读更多 →
无GPU也能跑大模型:银河麒麟V10离线部署DeepSeek-R1全流程

无GPU也能跑大模型:银河麒麟V10离线部署DeepSeek-R1全流程

简介:面向银河麒麟V10操作系统技术人员的一份DeepSeek离线部署操作指南,重点解决在内网或无互联网环境下安装ollama大语言模型服务及chatbox客户端的问题。资源为单个docx文档,约2.69MB,内容涵盖系统环境与硬件检查、ollama解压安…

2026/10/20 12:06:01 阅读更多 →
KSyntaxHighlighting编译指南:解决KF6依赖与CMake构建链问题

KSyntaxHighlighting编译指南:解决KF6依赖与CMake构建链问题

1. 项目概述:为什么一个语法高亮库的编译会卡住你一整天?“编译 KSyntaxHighlighting 的过程中遇到的一些问题”——这个标题看起来平平无奇,甚至有点枯燥,但它背后藏着的是无数 C 跨平台开发者的共同记忆:一个看似轻量…

2026/10/20 12:05:01 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →