目录标题一、概念二、对应拟合图片三、过拟合解决方法L1和L2正则四、(可以暂时不看涉及后面知识)如何防止过拟合训练那么判断五、(可以暂时不看涉及后面知识)除了上面正则过拟合预解决方法(预防并处理,用后面会学的知识 交叉验证和网格搜索)一、概念二、对应拟合图片三、过拟合解决方法L1和L2正则Lasso 回归回归模型带 L1 正则的线性回归岭回归回归模型带 L2 正则的线性回归四、(可以暂时不看涉及后面知识)如何防止过拟合训练那么判断既然不能用测试集来决定什么时候停止训练那我们怎么知道模型什么时候开始“过拟合”了怎么找到这个停止训练点呢? 引入验证集Validation Set正确的做法是把训练集切分成两份——训练集Train Set和验证集Validation Set。训练集 Loss用来更新模型参数(w, b)。验证集 Loss用来观测模型泛化能力指导早停和调参。测试集 Loss只在所有训练和调参结束后最后评估一次。patience耐心值是深度学习中实现早停Early Stopping最核心的机制简单来说:如果验证集 Loss 连续 patience 次训练都没有创下新低我们就认为模型已经越过“红线”开始过拟合了此时直接 break 结束训练。代码实现:importtorchimportcopyimportmatplotlib.pyplotasplt# 假设 model, train_loader, val_loader, criterion, optimizer 已定义train_losses[]val_losses[]# # 早停机制相关的变量初始化# best_val_lossfloat(inf)# 记录历史最低的验证集 Loss初始为正无穷best_model_stateNone# 记录历史最好状态下的模型权重patience5# 容忍度允许验证集 Loss 连续 5 个 epoch 不下降trigger_times0# 计数器记录当前连续不下降的次数forepochinrange(100):# ------------------------------------------# 1. 训练阶段# ------------------------------------------model.train()train_loss0.0forX_batch,y_batchintrain_loader:optimizer.zero_grad()outputsmodel(X_batch)losscriterion(outputs,y_batch)loss.backward()optimizer.step()train_lossloss.item()*X_batch.size(0)train_loss/len(train_loader.dataset)train_losses.append(train_loss)# ------------------------------------------# 2. 验证阶段# ------------------------------------------model.eval()val_loss0.0withtorch.no_grad():forX_val,y_valinval_loader:val_outputsmodel(X_val)losscriterion(val_outputs,y_val)val_lossloss.item()*X_val.size(0)val_loss/len(val_loader.dataset)val_losses.append(val_loss)print(fEpoch [{epoch1}/100], Train Loss:{train_loss:.4f}, Val Loss:{val_loss:.4f})# # 3. 早停机制核心逻辑 (Early Stopping)# # 情况 A验证集 Loss 创了新低说明模型还在进步# 注意这里加一个极小值 1e-4 是防止浮点数精度问题导致误判ifval_lossbest_val_loss-1e-4:best_val_lossval_loss# 更新历史最低 Lossbest_model_statecopy.deepcopy(model.state_dict())# 把当前表现最好的模型“存档”下来trigger_times0# 因为有了新突破把连续没进步的计数器清零print(f -- 验证集 Loss 创新低模型已保存(Best:{best_val_loss:.4f}))# 情况 B验证集 Loss 没有创新低说明模型可能在死记硬背开始过拟合了else:trigger_times1# 没进步计数器 1print(f -- 警告验证集 Loss 连续{trigger_times}轮未下降。)# 如果连续不下降的次数达到了我们的耐心极限 (patience)iftrigger_timespatience:print(f\n触发早停验证集 Loss 已经连续{patience}轮没有下降停止训练防止过拟合。)break# 直接跳出训练循环训练结束# # 4. 恢复最佳模型# # 训练中途 break 或者跑完了我们把之前存下的“最巅峰状态”的模型恢复回来ifbest_model_stateisnotNone:model.load_state_dict(best_model_state)print(已恢复到验证集表现最好的模型状态。)重点注释解析best_val_loss float(inf)一开始没有对比对象所以设定为无限大。第一轮算出来的val_loss肯定比它小因此第一轮一定会保存模型。trigger_times的累加与清零这是早停的灵魂。只要val_loss下降trigger_times就被打回0给你重新计算的机会。一旦val_loss没下降trigger_times就1。为什么选择在break之后恢复模型当你连续 5 轮patience发现 Loss 没下降并决定break时当前的模型其实已经是“过拟合”的烂模型了。真正的“红线”是在这 5 轮之前那个创下best_val_loss的瞬间。所以我们需要用best_model_state把它救回来。补充一点工业界的进阶常识除了监控 Loss有时候我们也会监控准确率Accuracy。因为有时候 Loss 在下降但准确率可能停滞或者 Loss 震荡但准确率在突破。逻辑是一模一样的把判断条件从val_loss best_val_loss改成val_acc best_val_acc即可。五、(可以暂时不看涉及后面知识)除了上面正则过拟合预解决方法(预防并处理,用后面会学的知识 交叉验证和网格搜索)交叉验证Cross-Validation本身不能直接防止过拟合它是用来“评估”模型是否过拟合以及“帮你挑选”最不容易过拟合的超参数的工具(这个交叉验证只负责检查具体修改超参的是网格搜索)交叉验证法是划分数据集的一种方法目的就是为了得到更加准确可信的模型评分举个列子看看交叉验证是干啥怎么找到过拟合的交叉验证是干什么的它是体检仪如果你只用一次简单的“训练集/测试集”切分万一运气不好切出来的测试集特别简单模型考了 95或者测试集特别难模型考了 50 分。这都不能真实反映模型的泛化能力。交叉验证最常用的是 K 折交叉验证的做法是把数据分成 K 份轮流拿其中 1 份当测试集剩下 K-1 份当训练集训练 K 次最后把 K 次的评估结果取平均值。它的核心作用提供更稳定、更客观的泛化误差评估。它告诉你“这个模型在多次模拟考中的平均成绩是多少”。如果你发现训练集得分极高但交叉验证的平均得分很低这就暴露了过拟合。找到过拟合就要调参那是网格搜索的事它只负责检测一句话总结交叉验证 体检。它告诉你“你是不是过拟合了”并通过筛选最优超参数帮你规避过拟合的模型。正则化/增加数据 吃药锻炼。它才是直接防止你过拟合的手段。
企业数字化 ERP 产品动态
相关推荐
JAX-Fluids 神经网络耦合实战:jaxfluids_nn 训练流场代理模型全流程 【免费下载链接】JAXFLUIDS Differentiable Fluid Dynamics Package 项目地址: https://gitcode.com/gh_mirrors/ja/JAXFLUIDS 点击查看 免费下载 JAX-Fluids 是一款完全可微分的计算流体力学(CFD)求解器,基于 JAX 编写ÿ… · 2026/11/5 5:19:03
Linux驱动初始化 一、嵌入式设备启动流程1.ROM Boot(第一阶段,芯片内置ROM,出厂固化,运行厂家固化在IROM里的代码)初始化基础硬件(需要的时钟和设备):PLL、最小RAM判断启动方式:emmc&… · 2026/11/5 5:18:02
如何看懂 Tessera 的 OTA 更新机制:ESP32 触摸屏夜间 Wi-Fi 自动更新固件完整指南 【免费下载链接】homeassistant_espscreen Tessera: beautiful, easy touch screens for Home Assistant on affordable ESP32 panels, 2.8 to 10.1 inch (CYD, Guition, Waveshare). Drag-and-drop editor, no YAML, no MQTT. 项目地址: https://gitcode.com/gh_mi… · 2026/11/5 5:18:02
Partial Channel Network:优化信道选择的网络架构实践 1. 项目概述"Partial Channel Network"这个概念在通信工程和网络架构领域已经存在多年,但直到最近几年才因为边缘计算和分布式系统的兴起而获得广泛关注。简单来说,这是一种只利用部分可用信道进行数据传输的网络架构,与传统的全信… · 2026/11/5 6:06:16
自适应动态滑模控制在多智能体协同系统中的应用 1. 项目背景与核心挑战多智能体系统协同控制是当前自动化领域的前沿研究方向,其核心在于解决分布式环境下多个智能体之间的协同作业问题。这个领域融合了控制理论、计算机科学和人工智能三大技术体系,而神经网络与滑模控制的结合正是为了解决传统控制方法… · 2026/11/5 6:06:16
基于m序列的FPGA全数字时钟数据恢复与上板实践 简介:这份压缩包围绕M序列在FPGA中的同步时钟提取展开,面向已具备数字逻辑与VHDL基础、希望理解位同步电路和全数字锁相环实现的学习者与工程人员,可用于课程设计、通信系统实验及自同步方案参考。包内共68个文件,约2.66MB&#x… · 2026/11/5 6:06:16
Red Hat系安装Node.js与生产环境配置避坑指南 Red Hat 系发行版上装 Node.js,乍看就是三条命令的事,真到了生产机上,版本流、模块流、SELinux、systemd、npm 全局权限,随便哪一项都能把人卡上半小时。我经手过几台 RHEL 8 和 RHEL 9 的机器,也帮人收拾过“装完 nod… · 2026/11/5 6:06:16
SMTP 邮件连接失败排障:端口加密、证书与超时定位 邮件发送这个功能,很多项目在开发阶段就跑通了,上线之后却突然开始抛Mail server connection failed; Could not connect to SMTP host。这个报错最让人头疼的地方在于——它把好几类完全不同的问题压缩成了一句话:端口写错、加密方式错配、出… · 2026/11/5 6:06:16
Qt串口实时温度曲线:环形缓冲与QPainter自绘实践 简介:这份基于Qt框架的串口温度监测示例,面向正在学习串口通信与桌面界面开发的初学者及嵌入式、物联网方向开发者,重点解决温度数据实时接收、解析与曲线展示的入门实践问题。压缩包共9个文件,约11KB,包含C头文件与cp… · 2026/11/5 6:05:15
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
多智能体协作系统架构设计与实践优化 1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39
大模型系统性入门实战指南:从原理到部署微调的全链路路线 提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39
鸿蒙文件系统沙箱机制解析与开发实践 1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38