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

[训练和优化] 3. 模型优化

👋 你好!这里有实用干货与深度分享✨✨ 若有帮助,欢迎:​
👍 点赞 | ⭐ 收藏 | 💬 评论 | ➕ 关注 ,解锁更多精彩!​
📁 收藏专栏即可第一时间获取最新推送🔔。​
📖后续我将持续带来更多优质内容,期待与你一同探索知识,携手前行,共同进步🚀。​



人工智能

模型优化

本文详细介绍深度学习模型的优化技术,包括正则化、梯度裁剪、早停、模型集成等方法,帮助提升模型性能和泛化能力。


1. 正则化方法

1.1 权重正则化

通过L1/L2正则化抑制模型复杂度,防止过拟合。

import torchclass L1L2Regularizer:def __init__(self, l1_lambda=0.0, l2_lambda=0.0):self.l1_lambda = l1_lambdaself.l2_lambda = l2_lambdadef __call__(self, model):reg_loss = 0for param in model.parameters():if param.requires_grad:# L1正则化reg_loss += self.l1_lambda * torch.sum(torch.abs(param))# L2正则化reg_loss += self.l2_lambda * torch.sum(param ** 2)return reg_loss# 使用示例
regularizer = L1L2Regularizer(l1_lambda=1e-5, l2_lambda=1e-4)
reg_loss = regularizer(model)
total_loss = task_loss + reg_loss

1.2 Dropout实现

Dropout可有效缓解过拟合,提升模型泛化能力。

import torch
import torch.nn as nnclass CustomDropout(nn.Module):def __init__(self, p=0.5, training=True):super().__init__()self.p = pself.training = trainingdef forward(self, x):if not self.training or self.p == 0:return xmask = torch.bernoulli(torch.ones_like(x) * (1 - self.p))return x * mask / (1 - self.p)# 在模型中使用
self.dropout = CustomDropout(p=0.5)

2. 梯度处理

2.1 梯度裁剪

防止梯度爆炸,提升训练稳定性。

import torchdef clip_gradients(model, clip_value=1.0, clip_norm=None):if clip_norm is not None:torch.nn.utils.clip_grad_norm_(model.parameters(), clip_norm)else:torch.nn.utils.clip_grad_value_(model.parameters(), clip_value)def train_with_gradient_clipping(model, train_loader, criterion,optimizer, device, clip_value=1.0):model.train()for data, target in train_loader:data, target = data.to(device), target.to(device)optimizer.zero_grad()output = model(data)loss = criterion(output, target)loss.backward()# 应用梯度裁剪clip_gradients(model, clip_value)optimizer.step()

2.2 梯度累积

节省显存,模拟大批量训练。

class GradientAccumulator:def __init__(self, model, accumulation_steps):self.model = modelself.accumulation_steps = accumulation_stepsself.current_step = 0def step(self, loss):# 缩放损失loss = loss / self.accumulation_stepsloss.backward()self.current_step += 1return self.current_step % self.accumulation_steps == 0def reset(self):self.current_step = 0

3. 早停策略

3.1 验证集早停

防止过拟合,自动停止训练并保存最佳模型。

class EarlyStopping:def __init__(self, patience=7, min_delta=0):self.patience = patienceself.min_delta = min_deltaself.counter = 0self.best_loss = Noneself.early_stop = Falsedef __call__(self, val_loss):if self.best_loss is None:self.best_loss = val_losselif val_loss > self.best_loss - self.min_delta:self.counter += 1if self.counter >= self.patience:self.early_stop = Trueelse:self.best_loss = val_lossself.counter = 0return self.early_stop# 使用示例
early_stopping = EarlyStopping(patience=10)
for epoch in range(num_epochs):train_loss = train_epoch(model, train_loader, criterion, optimizer)val_loss = validate(model, val_loader, criterion)if early_stopping(val_loss):print('Early stopping triggered')break

4. 模型集成

4.1 模型平均

集成多个模型预测结果,提升鲁棒性和准确率。

import torchclass ModelEnsemble:def __init__(self, models):self.models = modelsdef predict(self, x):predictions = []for model in self.models:model.eval()with torch.no_grad():pred = model(x)predictions.append(pred)# 对预测结果取平均return torch.mean(torch.stack(predictions), dim=0)# 使用示例
models = [train_model() for _ in range(5)]  # 训练多个模型
ensemble = ModelEnsemble(models)
prediction = ensemble.predict(test_data)

4.2 权重平均

直接对模型参数加权平均,获得更稳健的模型。

import copydef average_model_weights(models):"""平均多个模型的权重"""avg_model = copy.deepcopy(models[0])avg_dict = avg_model.state_dict()for key in avg_dict.keys():# 初始化为第一个模型的权重avg_dict[key] = avg_dict[key].clone()# 累加其他模型的权重for model in models[1:]:avg_dict[key] += model.state_dict()[key]# 计算平均值avg_dict[key] = avg_dict[key] / len(models)avg_model.load_state_dict(avg_dict)return avg_model

5. 实践建议

  1. 正则化选择

    • 根据数据规模选择合适的正则化强度
    • 在不同层使用不同的Dropout比例
    • 可组合多种正则化方法
  2. 梯度处理

    • 设置合适的梯度裁剪阈值
    • 监控梯度范数变化
    • 使用梯度累积处理大模型
  3. 早停策略

    • 选择合适的耐心参数
    • 可同时监控多个指标
    • 保存最佳模型检查点
  4. 模型集成

    • 使用不同初始化训练多个模型
    • 考虑模型多样性
    • 权衡计算成本和性能提升




📌 感谢阅读!若文章对你有用,别吝啬互动~​
👍 点个赞 | ⭐ 收藏备用 | 💬 留下你的想法 ,关注我,更多干货持续更新!

相关文章:

[训练和优化] 3. 模型优化

👋 你好!这里有实用干货与深度分享✨✨ 若有帮助,欢迎:​ 👍 点赞 | ⭐ 收藏 | 💬 评论 | ➕ 关注 ,解锁更多精彩!​ 📁 收藏专栏即可第一时间获取最新推送🔔…...

基于FPGA的车速检测系统仿真设计与实现

标题:基于FPGA的车速检测系统仿真设计与实现 内容:1.摘要 本文旨在设计并实现基于FPGA的车速检测系统仿真。随着汽车行业的快速发展,精确的车速检测对于车辆的安全性和性能评估至关重要。本研究采用FPGA作为核心处理单元,结合传感器数据采集与处理技术进…...

无人设备遥控器之无线通讯技术篇

无人设备遥控器的无线通讯技术是确保遥控操作准确、稳定、高效进行的关键。以下是对无人设备遥控器无线通讯技术的详细解析: 一、主要无线通讯技术类型 Wi-Fi通讯技术 原理:基于IEEE 802.11标准,通过无线接入点(AP)…...

Redis(2):Redis + Lua为什么可以实现原子性

Redis 作为一款高性能的键值对存储数据库,与 Lua 脚本相结合,为实现原子性操作提供了强大的解决方案,本文将深入探讨 Redis Lua 实现原子性的相关知识 原子性概念的厘清 在探讨 Redis Lua 的原子性之前,我们需要明确原子性的概念…...

PyTorch LSTM练习案例:股票成交量趋势预测

文章目录 案例介绍源码地址代码实现导入相关库数据获取和处理搭建LSTM模型训练模型测试模型绘制折线图主函数 绘制结果 案例介绍 本例使用长短期记忆网络模型对上海证券交易所工商银行的股票成交量做一个趋势预测,这样可以更好地掌握股票买卖点,从而提高…...

CK3588下安装linuxdeployqt qt6 arm64

参考资料: Linux —— linuxdeployqt源码编译与打包(含出错解决) linux cp指令报错:cp: -r not specified; cp: omitting directory ‘xxx‘(需要加-r递归拷贝) CMake Error at /usr/lib/x86_64…...

木马查杀引擎—关键流程图

记录下近日研究的木马查杀引擎,将关键的实现流程图画下来 PHP AST通道实现 木马查杀调用逻辑 模型训练流程...

二程运输的干散货船路径优化

在二程运输中,干散货船需要将货物从一个港口运输到多个不同的目的地港口。路径优化的目标是在满足货物运输需求、船舶航行限制等条件下,确定船舶的最佳航行路线,以最小化运输成本、运输时间或其他相关的优化目标。 影响因素 港口布局与距离:各个港口之间的地理位置和距离…...

华为数字政府与数字城市售前高级专家认证介绍

华为数字政府与数字城市售前高级专家认证面向华为合作伙伴售前高级解决方案专家、华为数字政府与数字城市行业解决方案经理(VSE)。 通过认证验证的能力 您将了解数字政府、数字城市行业基础知识,了解该领域内的重点场景;将对华…...

在VSCode中接入DeepSeek的指南

本文将介绍三种主流接入方式,涵盖本地模型调用和云端API接入方案。 一、环境准备 1.1 基础要求 VSCode 1.80+Node.js 16.x+Python 3.8+(本地部署场景)已部署的DeepSeek服务(本地或云端)1.2 安装必备插件 # 打开VSCode插件面板(Ctrl+Shift+X) 搜索并安装: - DeepSeek Of…...

【docker】--容器管理

文章目录 容器重启--restart 参数选项及作用**对比 always 和 unless-stopped****如何查看容器的重启策略?** 容器重启 –restart 参数选项及作用 重启策略 no:不重启(默认)。on-failure:失败时重启(可限…...

基于OpenCV的人脸微笑检测实现

文章目录 引言一、技术原理二、代码实现2.1 关键代码解析2.1.1 模型加载2.1.2 图像翻转2.1.3 人脸检测 微笑检测 2.2 显示效果 三、参数调优建议四、总结 引言 在计算机视觉领域,人脸检测和表情识别一直是热门的研究方向。今天我将分享一个使用Python和OpenCV实现…...

使用PEFT库将原始模型与LoRA权重合并

使用PEFT库将原始模型与LoRA权重合并 步骤如下: 基础模型加载:需保持与LoRA训练时相同的模型配置merge_and_unload():该方法会执行权重合并并移除LoRA层保存格式:合并后的模型保存为标准HuggingFace格式,可直接用于推…...

2025-5-15Vue3快速上手

1、setup和选项式API之间的关系 (1)vue2中的data,methods可以与vue3的setup共存 (2)vue2中的data可以用this读取setup中的数据,但是反过来不行,因为setup中的this是undefined (3)不建议vue2和vue3的语法混用…...

【金仓数据库征文】从生产车间到数据中枢:金仓数据库助力MES系统国产化升级之路

目录 前言一、金仓数据库:国产数据库的中坚力量二、制造业MES系统:数据驱动的生产智能MES系统的核心价值MES系统关键模块与数据库的关系1. BOM管理2. 生产工单与订单管理3. 生产排产与资源调度4. 生产报工与实时数据采集 5. 采购与销售管理 三、从MySQL到…...

HTML17:表单初级验证

表单初级验证 常用方式 placeholder 提示信息 <p>名字:<input type"text" name"username" maxlength"8" size"30" placeholder"请输入用户名"></p>required 非空判断 <p>名字:<input type"…...

从卡顿到丝滑:JavaScript性能优化实战秘籍

引言 在当今的 Web 开发领域&#xff0c;JavaScript 作为前端开发的核心语言&#xff0c;其性能表现对网页的加载速度、交互响应以及用户体验有着举足轻重的影响。随着 Web 应用的复杂度不断攀升&#xff0c;功能日益丰富&#xff0c;用户对于网页性能的期望也越来越高。从电商…...

How Sam‘s Club nudge customers into buying more

Here’s how Sam’s Club (or similar warehouse memberships) nudge customers into buying more: It’s a classic psychological strategy rooted in sunk cost fallacy and loss aversion. 1. Prepaid Membership Creates a “Sunk Cost” Once you’ve paid the annual …...

ORB特征点检测算法

角点是图像中灰度变化在两个方向上都比较剧烈的点。与边缘&#xff08;只有一个方向变化剧烈&#xff09;或平坦区域&#xff08;灰度变化很小&#xff09;不同&#xff0c;角点具有方向性和稳定性。 tips:像素梯度计算 ORB算法流程简述 1.关键点检测&#xff08;使用FAST…...

快速通关单链表秘籍

1.单链表概念与结构 1.1 概念 链表是一种逻辑结构连续&#xff0c;物理结构不连续的存储结构&#xff0c;数据结构的逻辑顺序是通过链表中的指针链接次序实现。 光看定义有点不好理解&#xff0c;我们举个简单例子&#xff01; 我们都看过火车吧&#xff0c;我们看到的火车…...

springboot+vue实现在线书店(图书商城)系统

今天教大家如何设计一个图书商城 , 基于目前主流的技术&#xff1a;前端vue&#xff0c;后端springboot。 同时还带来的项目的部署教程。 视频演示 在线书城 图片演示 一. 系统概述 商城是一款比较庞大的系统&#xff0c;需要有商品中心&#xff0c;库存中心&#xff0c;订单…...

C++二项式定理:原理、实现与应用

背景 鉴于复习&#xff0c;问了问清言二项式定理的应用…只好多找些资源…肝要死了… 一、引言 二项式定理是数学中一个基本定理&#xff0c;主要用于展开二项式的幂次。在C编程中&#xff0c;理解并实现二项式定理及其拓展具有重要意义&#xff0c;可以解决组合数学、概率论…...

使用GmSSL v3.1.1实现SM2证书认证

1、首先使用gmssl命令生成根证书、客户端公私钥&#xff0c;然后使用根证书签发客户端证书&#xff1b; 2、然后编写代码完成认证功能&#xff0c;使用根证书验证客户端证书是否由自己签发&#xff0c;然后使用客户端证书验证客户端私钥对随机数的签名是否正确。 第一部分生成根…...

远程实时控制安卓模拟器技术scrcpy

先运行模拟器 ~/Library/Android/sdk/emulator/emulator -avd Medium_Phone_API_25 再检查adb device /Users/xmkjsoft/Downloads/scrcpy-macos-x86_64-v3.2/adb devices 再开始实时获取模拟器画面 /Users/xmkjsoft/Downloads/scrcpy-macos-x86_64-v3.2/scrcpy --video-cod…...

Spring AI(6)——向量存储

向量数据库是一种特殊类型的数据库&#xff0c;在 AI 应用中发挥着至关重要的作用。 在向量数据库中&#xff0c;查询与传统关系型数据库不同。它们执行的是相似性搜索&#xff0c;而非精确匹配。当给定一个向量作为查询时&#xff0c;向量数据库会返回与该查询向量“相似”的…...

Spring Data Elasticsearch 中 ElasticsearchOperations 构建查询条件的详解

Spring Data Elasticsearch 中 ElasticsearchOperations 构建查询条件的详解 前言一、引入依赖二、配置 Elasticsearch三、创建模型类&#xff08;Entity&#xff09;四、使用 ElasticsearchOperations 进行 CRUD 操作1. 保存数据&#xff08;Create&#xff09;2. 获取数据&am…...

react-router基本写法

1. 创建项目并安装所有依赖 npx create-react-app react-router-pro npm i 2. 安装所有的 react router 包 npm i react-router-dom 3. 启动项目 npm run start router/index.js // 创建路由实例 绑定path elementimport Layout from "/pages/Layout"; import…...

【Matlab】最新版2025a发布,深色模式、Copilot编程助手上线!

文章目录 一、软件安装1.1 系统配置要求1.2 安装 二、新版功能探索2.1 界面图标和深色主题2.2 MATLAB Copilot AI助手2.3 绘图区升级2.4 simulink2.5 更多 延迟一个月&#xff0c;终于发布了&#x1f92d;。 一、软件安装 1.1 系统配置要求 现在的电脑都没问题&#xff0c;老…...

智能语音助手的未来:从交互到融合

摘要 随着人工智能技术的不断进步&#xff0c;智能语音助手已经成为我们生活中不可或缺的一部分。从简单的语音指令到复杂的多模态交互&#xff0c;语音助手正在经历一场深刻的变革。本文将探讨智能语音助手的发展历程、当前的技术瓶颈以及未来的发展方向&#xff0c;特别是其在…...

uniapp,小程序中实现文本“展开/收起“功能的最佳实践

文章目录 示例需求分析实现思路代码实现1. HTML结构2. 数据管理3. 展开/收起逻辑4. CSS样式 优化技巧1. 性能优化2. 防止事件冒泡3. 列表更新处理 实际效果总结 在移动端应用开发中&#xff0c;文本内容的"展开/收起"功能是提升用户体验的常见设计。当列表项中包含大…...