大语言模型常用微调与基于SFT微调DeepSeek R1指南
概述
大型语言模型(LLM,Large Language Model)的微调(Fine-tuning)是指在一个预训练模型的基础上,使用特定领域或任务的数据对模型进行进一步训练,以使其在该领域或任务上表现更好。微调是迁移学习的一种常见方法,能够显著提升模型在特定任务上的性能。在大型语言模型(LLM)的微调中,有几种常见的方法,包括 SFT(监督微调)、LoRA(低秩适应)、P-tuning v2 和 **Freeze
1.大语言模型微调
1.1 微调的工作原理
微调(Fine-tuning)是指在预训练模型的基础上,使用特定任务的标注数据对模型进行进一步训练,使其在该任务上表现更好。微调的核心思想是利用预训练模型已经学习到的通用语言表示,通过少量任务数据调整模型参数,使其适应特定任务。
微调的关键组件
-
输入 (X):
- 提供给模型的文本数据(例如,电影评论、问题、对话等)。
- 对于文本生成任务,输入可能是一个问题或提示。
-
目标 (Y):
- 基于标注数据的预期输出(例如,情绪标签、聊天机器人响应、摘要文本等)。
- 对于分类任务,目标可能是类别标签(如“积极”或“消极”)。
- 对于生成任务,目标可能是完整的文本响应。
-
损失函数:
- 衡量模型的预测与目标之间的差异。
- 通过优化损失函数,模型逐渐调整参数以更好地拟合任务数据。
示例:IMDB 情绪分类
- 输入 (X):电影评论,例如“这部电影的视觉效果很棒,但情节很弱。”
- 目标 (Y):情绪标签,例如“积极”或“消极”。
- 模型任务:根据输入文本预测正确的情绪标签。
示例:文本生成
- 输入 (X):问题,例如“什么是人工智能?”
- 目标 (Y):生成的响应,例如“人工智能是模拟人类智能的技术。”
- 模型任务:根据输入问题生成正确的文本响应。
1.2 使用的损失函数:交叉熵损失
在语言模型的微调中,交叉熵损失(Cross-Entropy Loss) 是最常用的损失函数。它用于衡量模型预测的概率分布与真实目标分布之间的差异。
交叉熵损失的公式
对于语言模型,交叉熵损失的公式为:
Cross-Entropy Loss = − ∑ i = 1 N y i log ( p i ) \text{Cross-Entropy Loss} = -\sum_{i=1}^{N} y_i \log(p_i) Cross-Entropy Loss=−i=1∑Nyilog(pi)
其中:
- y i y_i yi:目标分布(真实标签的 one-hot 编码)。
- p i p_i pi:模型预测的概率分布。
- N N N:词汇表的大小(对于分类任务,( N ) 是类别数)。
交叉熵损失的作用
- 衡量预测与目标的差异:
- 当模型预测的概率分布与目标分布越接近时,交叉熵损失越小。
- 当模型预测的概率分布与目标分布差异较大时,交叉熵损失越大。
- 优化目标:
- 在训练过程中,通过反向传播和梯度下降,模型不断调整参数以最小化交叉熵损失。
示例:文本生成中的交叉熵损失
假设模型生成一个句子,每个词的概率分布如下:
- 目标词:
["I", "love", "AI"]
- 模型预测的概率分布:
I
: 0.9love
: 0.8AI
: 0.7
交叉熵损失计算如下:
t e x t L o s s = − ( log ( 0.9 ) + log ( 0.8 ) + log ( 0.7 ) ) text{Loss} = -(\log(0.9) + \log(0.8) + \log(0.7)) textLoss=−(log(0.9)+log(0.8)+log(0.7))
通过最小化损失,模型逐渐学会生成更准确的文本。
1.3 SFT(监督微调,Supervised Fine-Tuning)
SFT 是最常见的微调方法,通过在特定任务的标注数据上对预训练模型进行全参数微调。
特点
- 全参数微调:更新模型的所有参数。
- 适合场景:任务数据量较大,计算资源充足。
- 优点:模型可以完全适应任务。
- 缺点:计算成本高,显存占用大。
实现代码
from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments
from datasets import load_dataset# 加载预训练模型和分词器
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)# 加载数据集
dataset = load_dataset("imdb")# 数据预处理
def preprocess_function(examples):return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=512)tokenized_datasets = dataset.map(preprocess_function, batched=True)# 设置训练参数
training_args = TrainingArguments(output_dir="./sft_results",evaluation_strategy="epoch",learning_rate=2e-5,per_device_train_batch_size=8,per_device_eval_batch_size=8,num_train_epochs=3,weight_decay=0.01,save_strategy="epoch",logging_dir="./logs",
)# 定义 Trainer
trainer = Trainer(model=model,args=training_args,train_dataset=tokenized_datasets["train"],eval_dataset=tokenized_datasets["test"],tokenizer=tokenizer,
)# 开始微调
trainer.train()# 保存模型
model.save_pretrained("./sft-fine-tuned-model")
tokenizer.save_pretrained("./sft-fine-tuned-model")
1.4 LoRA(低秩适应,Low-Rank Adaptation)
LoRA 是一种高效的微调方法,通过低秩分解的方式微调模型参数,减少计算量和显存占用。
特点
- 低秩分解:只微调模型的一部分参数(低秩矩阵)。
- 适合场景:资源有限,但仍需高效微调。
- 优点:参数效率高,显存占用低。
- 缺点:需要额外的实现支持。
实现代码
使用 peft
库实现 LoRA:
pip install peft
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from peft import get_peft_model, LoraConfig, TaskType
from datasets import load_dataset# 加载预训练模型和分词器
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)# 配置 LoRA
lora_config = LoraConfig(task_type=TaskType.SEQ_CLS, # 任务类型r=8, # 低秩矩阵的秩lora_alpha=32, # 缩放因子lora_dropout=0.1, # Dropout 概率
)# 应用 LoRA
model = get_peft_model(model, lora_config)# 加载数据集
dataset = load_dataset("imdb")# 数据预处理
def preprocess_function(examples):return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=512)tokenized_datasets = dataset.map(preprocess_function, batched=True)# 设置训练参数
training_args = TrainingArguments(output_dir="./lora_results",evaluation_strategy="epoch",learning_rate=2e-5,per_device_train_batch_size=8,per_device_eval_batch_size=8,num_train_epochs=3,weight_decay=0.01,save_strategy="epoch",logging_dir="./logs",
)# 定义 Trainer
trainer = Trainer(model=model,args=training_args,train_dataset=tokenized_datasets["train"],eval_dataset=tokenized_datasets["test"],tokenizer=tokenizer,
)# 开始微调
trainer.train()# 保存模型
model.save_pretrained("./lora-fine-tuned-model")
1.5 P-tuning v2
P-tuning v2 是一种提示微调方法,通过优化提示(Prompt)来引导模型完成任务,而不改变模型参数。
特点
- 提示优化:通过可学习的提示向量引导模型。
- 适合场景:少样本学习,资源有限。
- 优点:无需修改模型参数,显存占用低。
- 缺点:需要设计提示模板。
实现代码
使用 openprompt
库实现 P-tuning v2:
pip install openprompt
from openprompt import PromptDataLoader, PromptForClassification
from openprompt.plms import load_plm
from openprompt.prompts import ManualTemplate
from openprompt.prompts import ManualVerbalizer
from datasets import load_dataset# 加载预训练模型
plm, tokenizer, model_config, WrapperClass = load_plm("bert", "bert-base-uncased")# 加载数据集
dataset = load_dataset("imdb")# 定义提示模板
template = ManualTemplate(text='{"placeholder":"text_a"} It was {"mask"}',tokenizer=tokenizer,
)# 定义标签词映射
verbalizer = ManualVerbalizer(classes=["negative", "positive"],label_words={"negative": ["bad"],"positive": ["good"],},tokenizer=tokenizer,
)# 定义 Prompt 模型
prompt_model = PromptForClassification(plm=plm,template=template,verbalizer=verbalizer,
)# 数据加载器
dataloader = PromptDataLoader(dataset=dataset["train"],tokenizer=tokenizer,template=template,max_seq_length=512,
)# 训练(伪代码,需补充优化器和训练循环)
for batch in dataloader:logits = prompt_model(batch)# 计算损失并更新模型
1.6 Freeze 微调
Freeze 微调是指冻结模型的大部分参数,只微调部分层(如分类头)。
特点
- 参数冻结:只微调模型的最后几层。
- 适合场景:资源有限,任务数据量较小。
- 优点:计算成本低,显存占用少。
- 缺点:模型适应能力有限。
实现代码
from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments
from datasets import load_dataset# 加载预训练模型和分词器
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)# 冻结模型的大部分参数
for param in model.bert.parameters():param.requires_grad = False# 加载数据集
dataset = load_dataset("imdb")# 数据预处理
def preprocess_function(examples):return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=512)tokenized_datasets = dataset.map(preprocess_function, batched=True)# 设置训练参数
training_args = TrainingArguments(output_dir="./freeze_results",evaluation_strategy="epoch",learning_rate=2e-5,per_device_train_batch_size=8,per_device_eval_batch_size=8,num_train_epochs=3,weight_decay=0.01,save_strategy="epoch",logging_dir="./logs",
)# 定义 Trainer
trainer = Trainer(model=model,args=training_args,train_dataset=tokenized_datasets["train"],eval_dataset=tokenized_datasets["test"],tokenizer=tokenizer,
)# 开始微调
trainer.train()# 保存模型
model.save_pretrained("./freeze-fine-tuned-model")
tokenizer.save_pretrained("./freeze-fine-tuned-model")
1.7 总结
方法 | 特点 | 适用场景 | 优点 | 缺点 |
---|---|---|---|---|
SFT | 全参数微调 | 数据量大,资源充足 | 完全适应任务 | 计算成本高 |
LoRA | 低秩分解,部分参数微调 | 资源有限 | 参数效率高,显存占用低 | 需要额外实现 |
P-tuning | 提示优化,不修改模型参数 | 少样本学习 | 显存占用低 | 需要设计提示模板 |
Freeze | 冻结大部分参数,微调部分层 | 资源有限,数据量小 | 计算成本低 | 模型适应能力有限 |
2.DeepSeek微调
DeepSeek LLM 是一个强大的开源语言模型,但为了最大限度地发挥其在特定应用中的潜力,微调是必不可少的。
2.1 使用数据子集
在资源有限的硬件上微调像 DeepSeek LLM 这样的大型语言模型时,在完整数据集(例如,具有 25,000 个样本的 IMDB)上进行训练可能会导致过多的训练时间和 GPU 内存问题。
- 选择一个子集:500 个样本用于训练,100 个样本用于评估。
- 保持代表性:该子集保留了足够的多样性以实现合理的性能。
使用较小的数据集可以加快实验速度,同时有效地展示微调概念。对于生产级微调,应在更强大的基础设施上使用更大的数据集。
2.2 安装所需的库
首先,安装必要的依赖项:
pip install -U torch transformers datasets accelerate peft bitsandbytes
2.3 使用 4 位量化加载模型
使用 4 位量化使大型模型与有限的 GPU 内存兼容:
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import LoraConfig, get_peft_modelmodel_name = "deepseek-ai/deepseek-llm-7b-base"
# Configure 4-bit quantization
bnb_config = BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_compute_dtype=torch.float16 # Use float16 for faster computation
)
# Load tokenizer and model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, quantization_config=bnb_config, device_map="auto"
)
# Apply LoRA for memory-efficient fine-tuning
lora_config = LoraConfig(r=8, # Low-rank adaptation sizelora_alpha=32,target_modules=["q_proj", "v_proj"], # Apply LoRA to attention layerslora_dropout=0.05,bias="none"
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
print(" DeepSeek LLM Loaded with LoRA and 4-bit Precision!")
2.4 使用 Hugging Face 数据集进行训练
为了进行微调,需要一个高质量的数据集。 Hugging Face 提供对各种数据集的访问:
选择数据集
对于此示例,让我们使用 IMDB 数据集对 DeepSeek LLM 进行情绪分类微调:
from datasets import load_dataset# Load dataset
dataset = load_dataset("imdb")
预处理数据集
将文本转换为模型的标记化输入:
def tokenize_function(examples):inputs = tokenizer(examples["text"], truncation=True, padding="max_length", max_length=512)inputs["labels"] = inputs["input_ids"].copy()return inputstokenized_datasets = dataset.map(tokenize_function, batched=True)
# Subset the dataset for faster experimentation
small_train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(500))
small_test_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(100))
# Print a sample tokenized entry
print("Tokenized Sample:")
print(small_train_dataset[0])
3.LoRA(低秩自适应)
LoRA(低秩自适应)是一种旨在通过以下方式使 DeepSeek LLM 等大型模型的微调更加节省内存的技术:
- 冻结模型的大部分权重。
- 在关键层(例如注意层)中引入低秩可训练矩阵。
这大大减少了可训练参数的数量,同时保持了模型的性能。LoRA 可以在资源受限的硬件(例如 Colab GPU)上微调大型语言模型。
#4.代码演练:微调 DeepSeek LLM
首先设置训练参数:
from transformers import TrainingArguments, Trainertraining_args = TrainingArguments(output_dir="./results",evaluation_strategy="epoch",learning_rate=3e-4, # Lower learning rate for LoRA fine-tuningper_device_train_batch_size=1, # Reduce batch size for memory efficiencygradient_accumulation_steps=8, # Simulate larger batch sizenum_train_epochs=0.5,weight_decay=0.01,save_strategy="epoch",logging_dir="./logs",logging_steps=50,fp16=True, # Mixed precision training
)
初始化训练器:
trainer = Trainer(model=model,args=training_args,train_dataset=small_train_dataset,eval_dataset=small_test_dataset,
)
print("🚀 Trainer Initialized!")
开始微调:
print("🚀 Starting Fine-Tuning...")
trainer.train()
保存微调模型:
trainer.save_model("./fine_tuned_deepseek")
tokenizer.save_pretrained("./fine_tuned_deepseek")
print("Fine-Tuned Model Saved Successfully!")
相关文章:

大语言模型常用微调与基于SFT微调DeepSeek R1指南
概述 大型语言模型(LLM,Large Language Model)的微调(Fine-tuning)是指在一个预训练模型的基础上,使用特定领域或任务的数据对模型进行进一步训练,以使其在该领域或任务上表现更好。微调是迁移…...

LabVIEW的吞雨测控系统
本案例介绍了一种基于LabVIEW开发的吞雨测控系统,该系统通过建模仿真分析不同控制器模式下的阶跃信号响应,从而选择了最适合的控制器。为了有效解决在控制流量过程中出现的振荡收敛和流量信号大扰动问题,系统采用了改进的积分分离PID算法&…...
redis基础命令
基于内存的数据存储系统 redis中数据以键值对存储的 键区分大小写 redis默认都是使用字符串存储数据 //启动服务 redis-server //连接客户端 redis-cli //连接客户端,--raw表示以原始的形式显示内容 redis-cli --rawset keyname valueget keynamedel keyname //…...

基于Java+SpringBoot+Vue的前后端分离的校园闲置物品交易网站
基于JavaSpringBootVue的前后端分离的校园闲置物品交易网站 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接…...
K8s 证书认知(K8s Certificate Awareness)
K8s 证书认知 在谈起 Kubernetes 证书时,总感觉其涵盖的内容繁多,仿佛千头万绪,让人不知该从何处着手阐述。为了更好地理清思路,本文将对相关内容进行系统的梳理和记录。 1、证书及链路关系 Kubeadm部署的集群,K8s …...

前x-ai首席科学家karpathy的从零构建ChatGPT视频学习笔记--8000字长图文笔记预警(手打纯干货,通俗易懂)
2025.2.17晚上21:57看完了整个视频,作为一个ai专业的学生虽然每天都在用ai,但是对于其背后的原理却不是那么清楚,而卡帕西的这支视频却让我醍醐灌顶,而且全程听起来很舒服,没有知识强行进入脑子的痛感,在他…...

【智慧校园】分体空调节能监管:打造高效节能的学习环境
随着科技的飞速发展和生活品质的不断提升,人们对于家居和办公环境的舒适度与智能化要求也越来越高。分体空调集中控制系统作为一种先进的空调管理方式,正逐渐成为现代家庭和办公场所的标配,为用户带来更加便捷、高效和节能的空调使用体验。随…...

深度学习-1.简介
Deep Learning - Lecture 1 Introduction to Deep Learning 学习深度学习的动机什么是深度学习什么导致了深度学习的出现模型与理论的发展(软件部分)通用图形处理单元GPU的发展(硬件部分)CPU与GPU计算对比 GPU与CPU的理论FLOPS对…...

【Rust中级教程】1.10. 引用及内部可变性(简单回顾):引用、内部可变性、`Cell`类型及相关操作
喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 这篇文章只对所有权进行简单回顾,想要看完整的所有权系统阐述见【Rust自学】专栏…...

Docker 安装和配置 Nginx 详细图文教程
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …...

基于Java+Swing+Mysql实现旅游管理信息系统
基于JavaSwingMysql实现旅游管理信息系统 一、系统介绍二、功能展示1.登陆2.注册3.旅游信息查询4.查看游行团信息5.报名6、报名信息管理 三、数据库四、其它1.其他系统实现五.获取源码 一、系统介绍 用户:登陆、注册、旅游信息查询、查看游行团信息、报名 管理员&a…...
使用 Openpyxl 操作 Excel 文件详解
文章目录 安装安装Python3安装 openpyxl 基础操作1. 引入2. 创建工作簿和工作表3. 写入数据4. 保存工作簿5. 加载已存在的Excel6. 读取单元格的值7. 选择工作表 样式和格式化1. 引入2. 设置字体3. 设置边框4. 填充5. 设置数字格式6. 数据验证7. 公式操作 性能优化1. read_only/…...
统信服务器操作系统V20 1070A 安装docker新版本26.1.4
应用场景: 硬件/整机信息:x86平台、深信服超融合平台 OS版本信息:统信V20 1070a 1.获取docker二进制包 链接: https://pan.baidu.com/s/1SukBlra0mQxvslTfFakzGw?pwd5s5y 提取码: 5s5y tar xvf docker-26.1.4.tgz groupadd docker ch…...

【数据分享】1929-2024年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)
气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2024年全球气象站…...
python爬虫系列课程1:初识爬虫
python爬虫系列课程1:初识爬虫 一、爬虫的概念二、通用爬虫和自定义爬虫的区别三、开发语言四、爬虫流程一、爬虫的概念 网络爬虫(又被称为网页蜘蛛、网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动抓取互联网信息的程序。原则上,只要是…...

大模型工具大比拼:SGLang、Ollama、VLLM、LLaMA.cpp 如何选择?
简介:在人工智能飞速发展的今天,大模型已经成为推动技术革新的核心力量。无论是智能客服、内容创作,还是科研辅助、代码生成,大模型的身影无处不在。然而,面对市场上琳琅满目的工具,如何挑选最适合自己的那…...
什么是语料清洗、预训练、指令微调、强化学习、内容安全; 什么是megatron,deepspeed,vllm推理加速框架
什么是语料清洗、预训练、指令微调、强化学习、内容安全 目录 什么是语料清洗、预训练、指令微调、强化学习、内容安全语料清洗预训练指令微调强化学习内容安全什么是megatron,deepspeed,vllm推理加速框架语料清洗 语料清洗是对原始文本数据进行处理的过程,旨在去除数据中的…...

HTTP的“对话”逻辑:请求与响应如何构建数据桥梁?
一、前言 作为现代互联网通信的基石,HTTP协议定义了客户端与服务器之间的“对话规则”。每一次网页加载、API调用或文件传输的背后,都离不开精心构造的HTTP请求与响应。请求中封装了用户的意图——从请求方法、资源路径到提交的数据;响应则承…...
【深度学习】预训练和微调概述
预训练和微调概述 1. 预训练和微调的介绍1.1 预训练(Pretraining)1.2 微调(Fine-Tuning) 2. 预训练和微调的区别 预训练和微调是现代深度学习模型训练中的两个关键步骤,它们通常是一个 预训练-微调 (Pretrain-Finetune…...

自动化测试框架搭建-单次接口执行-三部曲
目的 判断接口返回值和提前设置的预期是否一致,从而判断本次测试是否通过 代码步骤设计 第一步:前端调用后端已经写好的POST接口,并传递参数 第二步:后端接收到参数,组装并请求指定接口,保存返回 第三…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...