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

pytorch框架保存和加载模型

PyTorch 中,有几种常见的方法来保存和加载模型,具体方法取决于你想保存什么内容(例如,只保存模型的权重,还是保存整个模型)。下面我将介绍几种常见的保存和加载模型的方法。

1、保存和加载模型的 state_dict

  • state_dict 是一个简单的 Python 字典对象,它将每一层的参数映射到其对应的张量(tensor)。这是最推荐的保存方式,因为它只保存模型的权重和参数,而不依赖于模型的代码结构。
  • 保存模型的 state_dict
import torch
import torch.nn as nn# 假设我们有一个模型
model = nn.Linear(10, 2)# 保存模型的 state_dict
torch.save(model.state_dict(), 'model.pth')
  • 加载模型的 state_dict
import torch
import torch.nn as nn# 假设我们有相同结构的模型
model = nn.Linear(10, 2)# 加载 state_dict
model.load_state_dict(torch.load('model.pth'))# 使用模型
model.eval()

2、保存和加载整个模型

  • 这种方法不仅保存了模型的权重和参数,还保存了模型的结构。因此,整个模型在加载时不需要再定义模型结构。尽管这提供了更大的便利性,但也有一些缺点,比如文件可能与代码过于耦合(会保存模型的类和结构,如果代码发生变化可能无法加载)。
  • 保存整个模型:
import torch
import torch.nn as nn# 假设我们有一个模型
model = nn.Linear(10, 2)# 保存整个模型
torch.save(model, 'model_entire.pth')
  • 加载整个模型:
import torch# 加载整个模型
model = torch.load('model_entire.pth')# 使用模型
model.eval()

3、保存和加载 checkpoint(保存更多的训练状态)

  • 如果你希望保存更多的训练信息,例如优化器状态、当前的 epoch 以及训练损失等,以便后续继续训练,可以保存一个包含多个内容的字典。
  • 保存 checkpoint
import torch
import torch.nn as nn
import torch.optim as optim# 假设我们有一个模型和优化器
model = nn.Linear(10, 2)
optimizer = optim.SGD(model.parameters(), lr=0.001)# 保存 checkpoint
checkpoint = {'epoch': 10,'model_state_dict': model.state_dict(),'optimizer_state_dict': optimizer.state_dict(),'loss': 0.5,
}torch.save(checkpoint, 'checkpoint.pth')
  • 加载 checkpoint
import torch
import torch.nn as nn
import torch.optim as optim# 假设我们有相同结构的模型和优化器
model = nn.Linear(10, 2)
optimizer = optim.SGD(model.parameters(), lr=0.001)# 加载 checkpoint
checkpoint = torch.load('checkpoint.pth')
model.load_state_dict(checkpoint['model_state_dict'])
optimizer.load_state_dict(checkpoint['optimizer_state_dict'])
epoch = checkpoint['epoch']
loss = checkpoint['loss']# 恢复训练
model.train()

4、动态量化后的模型保存与加载

  • 如果你对模型进行了量化(如动态量化),你可能需要保存量化后的模型。保存和加载方法与保存 state_dict 类似。
  • 动态量化模型:
import torch
import torch.nn as nn# 假设我们有一个模型
model = nn.Linear(10, 2)# 进行动态量化
quantized_model = torch.quantization.quantize_dynamic(model, {nn.Linear}, dtype=torch.qint8
)# 保存量化后的模型
torch.save(quantized_model.state_dict(), 'quantized_model.pth')
  • 加载量化模型:
import torch
import torch.nn as nn# 重新定义与量化前相同的模型结构
model = nn.Linear(10, 2)# 加载量化后的模型权重
model.load_state_dict(torch.load('quantized_model.pth'))
model.eval()

总结

  1. 保存 state_dict:最常用和推荐的方式,只保存模型参数,需手动重新定义模型结构后加载。
  2. 保存整个模型:保存模型结构和参数,一次性加载整个模型,但依赖于模型的代码结构。
  3. 保存 checkpoint:适合长时间训练的场景,保存更多状态以便后续继续训练。
  4. 保存量化后的模型:用于保存经过量化处理的模型,节省存储空间并提升推理速度。

不同的保存方式适合不同的使用场景,推荐使用 state_dict 来保存模型权重,尤其是在需要在不同环境或版本中加载模型时。

http://www.lryc.cn/news/420692.html

相关文章:

  • 开发输出防护栏以检测GPT-4o幻觉
  • 代码复现,代码改进,算法复现,模型复现
  • 基于STM32开发的智能机器人系统
  • 【数据结构题目】循环队列,以及队列实现栈的模拟
  • 大数据CloudSim应用实践:基于CloudSimExamle6.java修改(超详细教程)
  • 完美解决浏览器的输入框自动填入时,黄色背景问题,以及图标被遮住问题(最新)
  • C 语言中的头文件
  • 数据结构复杂度
  • MySQL基础篇
  • 详解C++中的四种强制转换reinterpret_cast / const_cast / static_cast / dynamic_cast
  • Word中加载Mathtype后粘贴复制快捷键(Ctrl+C/V)不能使用
  • Linux硬件-bios
  • VisionPro二次开发学习笔记12-使用CogToolGroup控件进行图像检测
  • mfc140u.dll丢失的科学修复手段,简单又方便的mfc140u.dll修复
  • RabbitMQ、Kafka对比(超详细),Kafka、RabbitMQ、RocketMQ的区别
  • 【案例35】销售订单公式问题导致系统宕机
  • 编程-设计模式 4:建造者模式
  • 百度文心一言API调用,千帆大模型获取API Key和API Secret图解
  • kafka下载|安装
  • 贪心算法part03
  • 以树莓集团的视角:探索AI技术如何重塑数字媒体产业发展
  • package.json的 和 的区别,以及|| 和 | 的区别
  • Wireshark_DNS_v7.0
  • 阿里云的CentOS系统上安装Docker
  • 力扣面试经典100题
  • python打怪练习
  • excel下载模板,0KB或者乱码问题
  • JDBC连接Mysql数据库超详细讲解
  • ArcGIS基础:自定义创建点线面等样式符号以方便使用
  • 蔚来2025届全球校招笔试/测评通关攻略北森测评题库更新了!