news 2026/4/16 13:29:26

DAY 39 早停策略和模型权重的保存

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DAY 39 早停策略和模型权重的保存

一、过拟合的判断

在机器学习中,过拟合(Overfitting) 的核心定义是:模型在训练集上表现极佳(损失极低、准确率极高),但在未见过的测试集 / 验证集上表现大幅下降,本质是模型 “死记硬背” 了训练数据的噪声和细节,而非学习到数据的通用规律。

核心判断依据:通过训练损失(Train Loss) 和测试损失(Test Loss) 的曲线对比,是判断过拟合的核心手段。

二、模型的保存和加载

1.仅保存模型参数

- 原理:保存模型的权重参数,不保存模型结构代码。加载时需提前定义与训练时一致的模型类。

- 优点:文件体积小(仅含参数),跨框架兼容性强(需自行定义模型结构)。

# 保存模型参数 torch.save(model.state_dict(), "model_weights.pth") # 加载参数(需先定义模型结构) model = MLP() # 初始化与训练时相同的模型结构 model.load_state_dict(torch.load("model_weights.pth")) # model.eval() # 切换至推理模式(可选)

2.保存权重和模型

- 原理:保存模型结构及参数

- 优点:加载时无需提前定义模型类

- 缺点:文件体积大,依赖训练时的代码环境(如自定义层可能报错)。

# 保存整个模型 torch.save(model, "full_model.pth") # 加载模型(无需提前定义类,但需确保环境一致) model = torch.load("full_model.pth") model.eval() # 切换至推理模式(可选)

3.保存全部信息checkpoint,还包含训练状态

- 原理:保存模型参数、优化器状态(学习率、动量)、训练轮次、损失值等完整训练状态,用于中断后继续训练。

- 适用场景:长时间训练任务(如分布式训练、算力中断)。

# 保存训练状态 checkpoint = { "model_state_dict": model.state_dict(), "optimizer_state_dict": optimizer.state_dict(), "epoch": epoch, "loss": best_loss, } torch.save(checkpoint, "checkpoint.pth") # 加载并续训 model = MLP() optimizer = torch.optim.Adam(model.parameters()) checkpoint = torch.load("checkpoint.pth") model.load_state_dict(checkpoint["model_state_dict"]) optimizer.load_state_dict(checkpoint["optimizer_state_dict"]) start_epoch = checkpoint["epoch"] + 1 # 从下一轮开始训练 best_loss = checkpoint["loss"] # 继续训练循环 for epoch in range(start_epoch, num_epochs): train(model, optimizer, ...)

三、早停法

早停法是缓解过拟合最常用、最简洁的策略,核心逻辑是:训练过程中持续监控「验证集 / 测试集损失(或准确率)」,当模型在未见过的数据上的性能不再提升(甚至开始下降)时,提前终止训练,避免模型过度拟合训练集的噪声;同时保存训练过程中 “验证集表现最好” 的模型参数,保证最终使用的是泛化能力最优的模型。

早停法的核心要素

要素作用
监控指标优先选「验证集损失」(损失越低越好),也可选「验证集准确率」(越高越好)
耐心值(Patience)允许 “验证集性能不提升” 的最大轮数(比如 patience=50:连续 50 轮没提升就停)
最小改进值(Min_delta)忽略微小波动(比如 min_delta=0.0001:损失下降小于这个值,视为 “无提升”)
最优模型保存训练中实时保存 “验证集性能最好” 的模型参数,避免停在最后一轮的差模型

作业:对信贷数据集训练后保存权重,加载权重后继续训练50轮,并采取早停策略

import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import OneHotEncoder from sklearn.impute import SimpleImputer from sklearn.neural_network import MLPRegressor from sklearn.metrics import mean_squared_error import joblib # 1. 数据加载与预处理 df = pd.read_csv(r"D:\Study\PythonStudy\housing.csv") #信贷数据集路径 target_col = 'median_house_value' #目标变量名 # 缺失值填充 imputer = SimpleImputer(strategy='most_frequent') df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns) # 独热编码 ocean_proximity 列(唯一的类别型特征) categorical_col = 'ocean_proximity' ohe = OneHotEncoder(sparse_output=False) cat_ohe = ohe.fit_transform(df_imputed[[categorical_col]]) cat_df = pd.DataFrame(cat_ohe, columns=ohe.get_feature_names_out([categorical_col]), index=df_imputed.index) # 拼接回去,删掉原来的 ocean_proximity df_encoded = pd.concat([df_imputed.drop(columns=[categorical_col]), cat_df], axis=1) # 分割数据 X = df_encoded.drop(columns=[target_col]) y = df_encoded[target_col] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 2. 初始训练、保存 mlp = MLPRegressor(hidden_layer_sizes=(64, 32), max_iter=100, random_state=42, warm_start=True) mlp.fit(X_train, y_train) joblib.dump(mlp, 'mlp_credit_model.pkl') print("初始模型保存完毕。") # 3. 加载权重 mlp2 = joblib.load('mlp_credit_model.pkl') # 4. 继续训练50轮,早停 best_loss = np.inf patience = 5 wait = 0 for i in range(50): mlp2.max_iter += 1 # 每次多训练一轮 mlp2.fit(X_train, y_train) y_pred = mlp2.predict(X_test) loss = mean_squared_error(y_test, y_pred) print(f"第{i+1}轮,测试集MSE: {loss:.4f}") if loss < best_loss: best_loss = loss wait = 0 joblib.dump(mlp2, 'mlp_credit_model_best.pkl') else: wait += 1 if wait >= patience: print("早停触发,训练提前终止。") break # 5. 加载最优模型 best_model = joblib.load('mlp_credit_model_best.pkl') print("最优模型已加载。")

@浙大疏锦行

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 13:01:58

零基础也能秒变高手:LosslessCut视频调色极简指南

零基础也能秒变高手&#xff1a;LosslessCut视频调色极简指南 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 你是否遇到过这样的情况&#xff1a;精心拍摄的视频在电…

作者头像 李华
网站建设 2026/3/31 11:47:27

计算机网络 (郑烇) 1 计算机网络与互联网

1.1 互联网络概念1.2 网络边缘1.3 网络核心1.4 接入网和物理媒体1.5 互联网络结构与ISP1.6 分组延时、丢失与吞吐量1.7 协议层次与服务模型1.8 互联网历史1.9 总结

作者头像 李华
网站建设 2026/4/8 20:22:51

Foundation5 教程

Foundation 5 教程 Foundation 5 是 ZURB 公司开发的响应式前端框架&#xff08;2013 年发布&#xff09;&#xff0c;以移动优先、网格系统强大著称&#xff0c;是当时最先进的响应式框架之一。虽然现在最新版本是 Foundation 6&#xff0c;但 Foundation 5 仍有许多遗留项目…

作者头像 李华
网站建设 2026/4/15 23:54:40

SkyWalking使用:Spring Boot场景

目录 一、环境准备 二、步骤 1&#xff1a;部署 SkyWalking 服务端&#xff08;OAP UI&#xff09; 1. 下载并解压安装包 2. 配置存储&#xff08;测试 / 生产区分&#xff09; &#xff08;1&#xff09;测试环境&#xff08;H2 内存库&#xff0c;无需额外部署&#xf…

作者头像 李华
网站建设 2026/4/13 10:03:40

2025年12月15日全球AI前沿动态

摘要 本次梳理涵盖2025年12月15日前后全球AI领域核心动态&#xff0c;覆盖模型技术突破、智能体应用落地、机器人与硬件发展、企业布局、行业观点及伦理监管等全维度。国内以智谱、蚂蚁、通义千问、月之暗面等为代表&#xff0c;在开源模型、垂直场景技术应用上成果突出&#x…

作者头像 李华
网站建设 2026/4/13 15:06:12

npm构建工具在Qwen-Image-Edit-2509前端交互层的应用

npm构建工具在Qwen-Image-Edit-2509前端交互层的应用 在电商视觉优化和数字内容创作日益依赖AI的今天&#xff0c;一个强大模型背后是否具备流畅、直观的用户界面&#xff0c;往往决定了它能否真正落地。以Qwen-Image-Edit-2509为例&#xff0c;这款基于通义千问系列升级的专业…

作者头像 李华