Pytorch学习笔记十七:模型的保存与加载

pytorch模型的保存与加载 PyTorch提供了三种种方式来保存和加载模型,在这三种方式中,加载模型的代码和保存模型的代码必须相匹配,才能保证模型的加载成功。通常情况下,使用第一种方式(保存和加载模型状态字典)更加常见,因为它更轻量且不依赖于特定的模型类。 阅读详情

一、模型的保存与加载

当我们的模型训练好之后是需要保存下来,以备后续的使用,那么如何保存和加载模型呢?下面就从三个方面来理解一下。

1、序列化与反序列化

序列化是指内存中的某一对象保存到硬盘中,以二进制的形式存储下来,这就是一个序列化的过程;反序列化就是将硬盘中的存储的二进制数反序列化到内存中,得到一个相应的对象,这样就可以再次使用这个模型了。如下图所示:
在这里插入图片描述
序列化和反序列化的目的就是将模型保存并再次使用。

pytorch中序列化和反序列化的方法:
torch.save(obj, f):obj表示对象,也就是保存的数据,可以是模型、张量、dict等。f表示输出的路径。
torch.load(f, map_location):f表示文件的路径,map_location 表示指定存放的位置,CPU或者GPU

2、模型的保存与加载

pytorch中模型的保存有两种方式,一种是保存整个Module,另一种是保存模型的参数,相对应的加载模型也就有两种方式。
1⃣️保存和加载整个Module:torch.save(net, path),torch.load(fpath)
2⃣️保存模型参数:torch.save(net.state_dict(), path), net.load_state_dict(torch.load(path))

第一种方法保存的是整个模型架构,比较费时占用内存,第二种方法只保存了模型上可学习的参数,等建立一个新的相同的网络结构时将这些参数加载到网络中即可。推荐使用第二种。
下面从代码中看一下这两种方法的具体实现过程:
构建一个网络结构:

class LeNet2(nn.Module):
    def __init__(self, classes):
        super(LeNet2, self).__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 6, 5),
            nn.ReLU(),
            nn.MaxPool2d(2, 2),
            nn.Conv2d(6, 16, 5),
            nn.ReLU(),
            nn.MaxPool2d(2, 2)
        )
        self.classifier = nn.Sequential(
            nn.Linear(16*5*5, 120),
            nn.ReLU(),
            nn.Linear(120, 84),
            nn.ReLU(),
            nn.Linear(84, classes)
        )

    def forward(self, x):
        x = self.features(x)
        x = x.view(x.size()[0], -1)
        x = self.classifier(x)
        return x

    def initialize(self):
        # 这里将网络结构中的参数都填充为20191104
        for p in self.parameters():
            p.data.fill_(20191104)
# 建立网络结构
net = LetNet2(classes=2019)

# 训练
# "训练"
print("训练前: ", net.features[0].weight[0, ...<
pytorch_lightning自学之——获取ckpt信息 由于pl保存的是ckpt文件,当我想加载一个ckpt,用模型做推理,但我同时需要一些ckpt里的信息,例如当前的epoch。或者nn_model.load_from_checkpoint,也有这个nn_model.current_epoch,结果都是0。功力深厚的巨佬可能根本不会遇到这个问题,因为他们懂torch怎么加载ckpt,查看ckpt里的参数。可我既然用了pl,我就必须用pl的方式打开。现在国内的pl讨论太少了,一搜全是搬运b乎的几个大佬的教程;确实,pl也是用的torch。 阅读详情

相关推荐

PyTorch模型的保存和加载方法是什么?

需要注意的是,在保存和加载模型时,确保模型的定义和加载环境一致,例如使用相同的PyTorch版本和库依赖。此外,还可以选择不同的文件格式,如.pt、.pth、.pkl等,根据个人需求选择适合的文件扩展名。通过保存和加载模型的参数或完整的检查点,可以实现模型的持久化存储和恢复,方便后续的推理、迁移学习或继续训练等任务。注意:在加载模型参数时,需要确保创建了与原始模型结构相同的模型实例,以便正确加载参数。

huidhsu的博客 870

Pytorch学习(十七)--- 模型load各种问题解决

简单的模型load 一般来说,保存模型是把参数全部用model.cpu().state_dict(), 然后加载模型时一般用 model.load_state_dict(torch.load(model_path))。 值得注意的是:torch.load 返回的是一个 OrderedDict. import torch import torch.nn as nn class Net_old(...

Hungryof的专栏 7万+

第十七章 解读PyTorch断点训练(工具)

最近在尝试用CIFAR10训练分类问题的时候,由于数据集体量比较大,训练的过程中时间比较长,有时候想给停下来,但是停下来了之后就得重新训练,我们学习断点继续训练及继续训练的时候注意epoch的改变等。绝望!!!!!训练到了一定次数发现训练次数少了,或者中途断了又得重新开始训练。

专注于人工智能学习,总结 1359

计算机网络简答题

协议定义了在两个或多个通信实体之间交换的报文格式和顺序,以及发送接收报文以及其他事件需要采取的操作。为。

m0_61636632的博客 1699

游戏脚本开发避坑:Python调用OP模块实现阴阳师后台操作的5个关键点

本文深入探讨了使用Python调用OP模块开发《阴阳师》后台自动化脚本的5个核心避坑点。重点解析了窗口绑定、后台截图与图像识别、鼠标键盘模拟、脚本稳定性以及性能优化等关键环节的常见问题与实战解决方案,帮助开发者高效实现稳定的游戏后台挂机功能。

u0v1w2x3的博客 588

护网日志分析基础

简要介绍日志分析,给出日志分析的步骤和思路。要求根据日志中的字符串特征,识别攻击者的攻击工具;根据日志中的行为特征,确定攻击者可能的攻击手段等。总结归纳护网中常见的中间件Tomcat、Apache、Weblogic、Nginx、Apache、IIS、MySQL、SQL Server、Oracle的日志路径和日志配置文件路径等。

m0_59302403的博客 3694

用deepseek部署全自动的机器人--bytebot

Bytebot是一款开源AI桌面代理,提供完整的虚拟桌面环境,支持跨应用任务处理、文件管理、文档处理等复杂工作流。其技术架构包含核心控制、LLM代理、UI等组件,支持Docker和Kubernetes部署。本文演示了基于CloudStudio的部署流程,包括环境配置、Docker部署及DeepSeek API集成,实现多模型调用功能。

Kin 2481

一文说清STM32CubeMX中文汉化全流程(图解说明)

详细讲解STM32CubeMX中文汉化的完整流程,通过图文并茂的方式手把手教学,解决界面英文带来的使用障碍,让开发更高效。掌握stm32cubemx中文汉化技巧,提升嵌入式开发体验。

weixin_42499004的博客 6267

深入解析数据通信中的码元速率与比特率:从基础到实战应用

本文深入解析了数据通信中的核心概念码元速率与比特率,通过生动的比喻和公式(比特率=波特率×log₂(M))揭示其本质关系。文章结合BPSK、QPSK、16QAM等调制技术,剖析了从4G/5G到LoRa等实战场景中如何权衡速率、距离与可靠性,并提供了软考真题解析与系统设计建议,帮助读者从理论到应用全面掌握数据速率优化。

weixin_29324877的博客 213

Linux内核配置选项详解及编译过程

在内核编译完成后,可以通过重启系统并选择新编译的内核来使用它。可以在该菜单下选择需要编译进内核的设备驱动,也可以选择将设备驱动编译为模块。可以在该菜单下选择需要编译进内核的设备驱动,也可以选择将设备驱动编译为模块。可以选择需要的调试选项,并根据需要启用或禁用相应的功能。可以选择需要的文件系统类型,并根据需要启用或禁用相应的选项。可以选择需要的网络协议和功能,并根据需要启用或禁用相应的选项。可以选择需要的调试选项,并根据需要启用或禁用相应的功能。可以选择需要的文件系统类型,并根据需要启用或禁用相应的选项。

TechGlide的博客 746

使用Zed 实现测距

此代码基于官方代码基础上进行改写,主要是获取zed相机深度画面的深度值,为yolo测距打基础。Zed相机是由Stereolabs公司开发的一种先进的立体视觉相机。这种相机专为计算机视觉和机器学习应用而设计,能够提供高质量的3D捕捉和分析功能。: Zed相机配备有一对垂直排列的传感器,能够捕捉两个略有偏移的图像,从而模拟人的双眼视觉,实现深度感知。: 利用立体成像技术,Zed相机能够实时生成环境的3D模型,这对于机器人导航、增强现实(AR)和虚拟现实(VR)等应用至关重要。

weixin_45303602的博客 911

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: YOLO9000: Better, Faster, Stronger论文解读
下一篇: matplotlib 画图总结
Dear_林
博客等级 码龄5年 37粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值