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

day 37

模型的保存和加载

仅保存模型参数

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

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

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

保存模型+权重

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

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

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

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

保存训练状态(断点续训)

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

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

 # 保存训练状态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, ...)

早停法(early stop)

- 正常情况:训练集和测试集损失同步下降,最终趋于稳定。

- 过拟合:训练集损失持续下降,但测试集损失在某一时刻开始上升(或不再下降)。

如果可以监控验证集的指标不再变好,此时提前终止训练,避免模型对训练集过度拟合。----监控的对象是验证集的指标。这种策略叫早停法。

if test_loss.item() < best_test_loss: # 如果当前测试集损失小于最佳损失best_test_loss = test_loss.item() # 更新最佳损失best_epoch = epoch + 1 # 更新最佳epochcounter = 0 # 重置计数器# 保存最佳模型torch.save(model.state_dict(), 'best_model.pth')else:counter += 1if counter >= patience:print(f"早停触发!在第{epoch+1}轮,测试集损失已有{patience}轮未改善。")print(f"最佳测试集损失出现在第{best_epoch}轮,损失值为{best_test_loss:.4f}")early_stopped = Truebreak  # 终止训练循环

逻辑:

- 首先初始一个计数器counter。

- 每 200 轮训练执行一次判断:比较当前损失与历史最佳损失。

  - 若当前损失更低,保存模型参数。

  - 若当前损失更高或相等,计数器加 1。

    - 若计数器达到最大容许的阈值patience,则停止训练。

@浙大疏锦行

相关文章:

  • SWOT 模型:基础框架的应用价值与改进路径
  • day 22 练习——泰坦尼克号幸存者预测
  • Spring boot基础
  • JAVA基础编程练习题--50道
  • 东北某汽车集团云建设:如何用监控易护航云平台系统?
  • C语言初阶--结构体
  • win11+vs2022 安装opencv 4.11.0图解教程
  • ULVAC VWR-400M/ERH 真空蒸发器 Compact Vacuum Evaporator DEPOX (VWR-400M/ERH)
  • 推理模型 vs 非推理模型:核心区别及优劣势解析
  • sd webui 安装sd-webui-TemporalKit 加载报错解决办法
  • 联邦学习与数据隐私保护之间的联系
  • 每日算法-250526
  • 对话魔数智擎CEO柴磊:昇腾AI赋能,大小模型融合开启金融风控新范式
  • python25-递归算法
  • Linux防火墙iptables学习指南!
  • n8n中文版安装指南,使用Docker部署N8N中文版
  • 唯一原生适配鸿蒙电脑的远程控制应用,向日葵正式上线
  • 并发编程艺术--AQS底层源码解析(三)
  • 使用NSIS 和 VNISEdit 打包 electron 程序为 exe 向导式安装包
  • m1 运行renrenfastvue出现的问题和解决方案
  • wordpress网页设计价格设计/宁波关键词排名优化
  • 做h的小说网站/快速排名优化推广手机
  • 郑州手机网站建设公司/百度seo培训公司
  • 有实力高端网站设计地址/今日广东头条新闻
  • 兰州新区网站建设/sem推广和seo的区别
  • 自媒体还是做网站/商城网站建设