深度学习模型的保存和加载

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

保存和加载模型

关于保存和加载模型,有三个核心功能需要熟悉:

  1. torch.save:将序列化的对象保存到磁盘。此函数使用Python的 pickle实用程序进行序列化。使用此功能可以保存各种对象的模型,张量和字典。
  2. torch.load:使用pickle的解码功能将序列化的目标文件反序列化到内存中。
  3. torch.nn.Module.load_state_dict:使用反序列化的state_dict加载模型的参数字典 。

什么是state_dict?

在PyTorch中,模型的可学习参数(即权重和偏差) torch.nn.Module 包含在模型的参数中 (通过访问model.parameters())state_dict是一个简单的Python字典对象,每个层映射到其参数张量。请注意,只有具有可学习参数的层(卷积层,线性层等)和已注册的缓冲区(batchnorm的running_mean)才在模型的state_dict中具有条目。优化器对象(torch.optim)还具有state_dict,其中包含有关优化器状态以及所用超参数的信息。

由于 state_dict 对象是Python词典,因此可以轻松地保存,更新,更改和还原它们,从而为PyTorch模型和优化器增加了很多模块化。

例如:

让我们从训练分类器 教程中使用的简单模型 看一下state_dict。

# Define model
class TheModelClass(nn.Module):
    def __init__(self):
        super(TheModelClass, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

# Initialize model
model = TheModelClass()

# Initialize optimizer
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)

# Print model's state_dict
print("Model's state_dict:")
for param_tensor in model.state_dict():
    print(param_tensor, "\t", model.state_dict()[param_tensor].size())

# Print optimizer's state_dict
print("Optimizer's state_dict:")
for var_name in optimizer.state_dict():
    print(var_name, "\t", optimizer.state_dict()[var_name])

推理模型的保存和加载

保存/加载state_dict

Save:

torch.save(model.state_dict(), PATH)

Load:

model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH))

整个模型的保存和加载

Save:

torch.save(model, PATH)

Load:

# Model class must be defined somewhere
model = torch.load(PATH)

保存和加载用于推理和/或继续训练的常规检查点

Save:

torch.save({
    'epoch': epoch,
    'model_state_dict': model.state_dict(),
    'optimizer_state_dict': optimizer.state_dict(),
    'loss': loss,
    ...
    }, PATH)

Load:

model = TheModelClass(*args, **kwargs)
optimizer = TheOptimizerClass(*args, **kwargs)

checkpoint = torch.load(PATH)
model.load_state_dict(checkpoint['model_state_dict'])
optimizer.load_state_dict(checkpoint['optimizer_state_dict'])
epoch = checkpoint['epoch']
loss = checkpoint['loss']

保存用于检查或继续训练的常规检查点时,您必须保存的不仅仅是模型的 state_dict。保存优化器的state_dict也是很重要的,因为它包含随着模型训练而更新的缓冲区和参数。您可能要保存的其他项目包括您未启用的时期,最新记录的训练损失,外部torch.nn.Embedding 图层等。

要保存多个组件,请将它们组织在字典中并用于 torch.save()序列化字典。常见的PyTorch约定是使用.tar文件扩展名保存这些检查点。

要加载项目,请首先初始化模型和优化器,然后使用本地加载字典torch.load()。从这里,您只需按期望查询字典即可轻松访问已保存的项目。

将多个模型保存在一个文件中

Save:

torch.save({
    'modelA_state_dict': modelA.state_dict(),
    'modelB_state_dict': modelB.state_dict(),
    'optimizerA_state_dict': optimizerA.state_dict(),
    'optimizerB_state_dict': optimizerB.state_dict(),
    ...
    }, PATH)

Load:

modelA = TheModelAClass(*args, **kwargs)
modelB = TheModelBClass(*args, **kwargs)
optimizerA = TheOptimizerAClass(*args, **kwargs)
optimizerB = TheOptimizerBClass(*args, **kwargs)

checkpoint = torch.load(PATH)
modelA.load_state_dict(checkpoint['modelA_state_dict'])
modelB.load_state_dict(checkpoint['modelB_state_dict'])
optimizerA.load_state_dict(checkpoint['optimizerA_state_dict'])
optimizerB.load_state_dict(checkpoint['optimizerB_state_dict'])

保存由多个模型组成的模型时torch.nn.Modules,例如GAN,序列到序列模型或模型集成,您将采用与保存常规检查点相同的方法。换句话说,保存每个模型的state_dict和相应的优化器的字典。如前所述,您可以保存任何其他可以帮助您恢复训练的项目,只需将它们添加到字典中即可。

使用来自不同模型的参数进行热启动模型

Save:

torch.save(modelA.state_dict(), PATH)

Load:

modelB = TheModelBClass(*args, **kwargs)
modelB.load_state_dict(torch.load(PATH), strict=False)

在转移学习或训练新的复杂模型时,部分加载模型或加载部分模型是常见方案。利用经过训练的参数,即使只有少数几个可用的参数,也将有助于热启动训练过程,并希望与从头开始训练相比,可以更快地收敛模型。

无论是从缺少某些键的部分state_dict加载,还是要加载比要加载的模型更多的key 的state_dict,都可以 在函数中将strict参数设置为False,load_state_dict()以忽略不匹配的键。

如果要将参数从一层加载到另一层,但是某些键不匹配,只需更改要加载的state_dict中参数键的名称, 以匹配要加载到的模型中的键。

跨设备保存和加载模型

保存在GPU上,在CPU上加载

Save:

torch.save(model.state_dict(), PATH)

Load:

device = torch.device('cpu')
model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH, map_location=device))

在使用GPU训练的CPU上加载模型时,将其传递 torch.device('cpu')给map_location函数中的 torch.load()参数。在这种情况下,使用map_location参数将张量下面的存储动态地重新映射到CPU设备。

保存在GPU上,在GPU上加载

Save:

torch.save(model.state_dict(), PATH)
Load:
device = torch.device("cuda")
model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH))
model.to(device)
# Make sure to call input = input.to(device) on any input tensors that you feed to the model

保存CPU,加载在GPU

Save:

torch.save(model.state_dict(), PATH)
Load:
device = torch.device("cuda")
model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH, map_location="cuda:0"))  # Choose whatever GPU device number you want
model.to(device)
# Make sure to call input = input.to(device) on any input tensors that you feed to the model更多详情可见https://pytorch.apachecn.org/docs/1.2/beginner/saving_loading_models.html
【NLP】使用 Keras 保存和加载深度学习模型 训练深度学习模型是一个耗时的过程。您可以在训练期间和训练后保存模型进度。因此,您可以从上次中断的地方继续训练模型,并克服漫长的训练挑战。这篇博文中,我们将介绍如何保存模型并使用 Keras 逐步加载它。我们还将探索模型检查点回调,它通常用于模型训练。 阅读详情

相关推荐

35、保存和加载模型:深度学习项目的持久化与复用

本文详细介绍了在深度学习项目中如何使用PyTorch和fastai框架保存和加载模型,涵盖保存模型状态字典、整个模型、最佳模型的保存与加载方法。同时探讨了迁移学习中的模型管理、云端部署、分布式训练以及模型版本控制的最佳实践,并分析了实际项目中的应用案例和常见挑战解决方案,帮助开发者高效管理和复用模型。

gaochao的博客 93

[深度学习笔记(3)]模型保存与加载

深度学习笔记系列(三),关于PyTorch实现模型保存与加载。

qq_45634318的博客 1542

每天五分钟深度学习框架PyTorch:算法模型的保存和加载(CPU和GPU)

我们前面学习了模型的训练,比如线性回归,全连接神经网络,各种经典的卷积神经网络,模型训练完成之后,我们如何将训练的模型保存起来,然后方便之后的使用。pytorch已经封装好了相关的api,下面我们对此进行介绍。

huanfeng_AI的博客 784

如何将Python训练好的模型保存下来(可使用or继续训练)

Python提供了许多机器学习框架,例如Scikit-learn、TensorFlow和PyTorch。这些框架是使用Python编写的,可以方便地训练模型。但是,模型训练是一项昂贵的任务,需要大量的计算资源和时间。一旦模型训练完成,将其保存以便以后使用是非常重要的。

qq_22841387的博客 2万+

泛微OA与金蝶云星空深度集成实战:审批与表单双场景解析

本文深入解析泛微OA与金蝶云星空的深度集成实战,聚焦审批流程与表单对接两大核心场景。通过具体案例,详细阐述了如何实现业务数据与审批流程的自动联动,打破数据孤岛,提升企业运营效率与数据一致性,并分享了接口设计、安全策略及实战避坑指南。

4k5l6j7h8的博客 466

CUDA 12.1环境下的动态库链接修复:从libcusparse.so.12的undefined symbol错误到libnvJitLink.so.12的正确加载

本文详细解析了在CUDA 12.1环境下,PyTorch因libcusparse.so.12找不到libnvJitLink.so.12中的__nvJitLinkAddData_12_1符号而报错的根本原因。通过诊断动态链接过程,提供了创建符号链接、修改环境变量等三种解决方案,并深入探讨了nvJitLink组件的作用及环境配置的最佳实践,帮助开发者彻底解决此类动态库链接问题。

c8d9e0f1的博客 205

pytorch模型保存与加载总结

pytorch模型保存与加载方式、打包保存tar、多卡训练遇到的问题、torch.jit、加载预训练模型、保存模型再加载精度损失

蜗牛博客 1万+

手把手教你用Simulink搭建DSOGI-PLL模型(附完整代码下载)

本文详细介绍了在Simulink中搭建高鲁棒性DSOGI-PLL模型的完整工程实践指南。针对传统锁相环在非理想电网下的不足,文章深入剖析了双二阶广义积分器锁相环(DSOGI-PLL)的核心原理与优势,并提供了从模块构建、系统组装到参数整定与测试验证的全流程手把手教程,附有完整代码下载,助力工程师应对谐波、电压跌落等复杂电网工况。

weixin_29223603的博客 388

python保存模型_python中如何保存并使用训练好的模型并调用

保存tensorflow训练好的模型并调用此模型工具/原料pythontensorflow2.0保存为HDF5文件1保存模型Keras 可以使用 HDF5 标准提供基本保存格式。出于我们的目的,可以将保存的模型视为单个二进制blob,如下图2调用模型从保存的文件中重新加载模型调用,如下图3验证模型检查模型准确率ENDsaved_model 保存1创建并训练模型2保存模型创建一个 saved_mod...

weixin_39666496的博客 5086

【LVGL】从HTML到LVGL:嵌入式UI的设计迁移与落地实践

嵌入式UI迁移实践:从HTML到LVGL 本文介绍了将HTML/CSS设计的UI原型迁移到嵌入式系统(LVGL)的完整流程,重点涉及"HTML→Figma→LVGL"的三步转换方法。具体内容包括: 设计迁移流程:通过Figma作为中间桥梁,将HTML原型转化为标准设计资产,再适配到LVGL库; 工具与参数准备:详细列出了设计迁移所需的工具链和需要提取的核心设计参数; Figma还原步骤:分组件讲解如何在Figma中1:1还原HTML设计,包括标题栏、压力显示区、图表区等核心组件; LVG

ymlmail的博客 1971

STM32与K210串口通信

这篇文章是为了填上一篇埋下的坑,k210和STM32通过串口通信,我是采用数据包的形式发送数据的,因为K210发送的数据有几种,采用数据包的形式发送比较安全。本文代码运行的平台是STM32F103C8T6和K210 Dock,只涉及到K210发送数据给STM32,stm32将接受到的数据显示到0.96寸OLED屏上。

qq_70715693的博客 3万+

基于Pytorch的深度学习模型保存和加载方式

我们在训练深度学习模型的过程中,最好对已经训练好的深度学习模型进行保存,或者方便的加载别人训练好的模型微调节省训练时间,实现高效率解决问题。

rothschild666的博客 5105

头歌平台-人工智能导论实验(人脸识别)

答案仅供参考,自己动手丰衣足食!!!

qq_52119136的博客 3026

深度学习模型的加载和保存(.pth .ckpt)

(该类型可以保存和加载模型或者模型参数)

2202_75341904的博客 842

出现Command ‘vim‘ is available in the following places,vim: command not found等解决方法

内置命令无法识别,说明系统变量有误,导致无法识别,既然系统变量有误,将其注释或者更改为正确的即可,但是现在打不开,又怎么注释掉。替换vim来打开编辑,打开之前错误的全局变量文件,发现变量有误,要么注释要么改为。系统变量有全局变量(通过命令行printenv或者echo)和局部变量。对应通过vim修改错误的变量文件,不然source也无法让配置文件生效。本身vim是系统内置的命令,连vim都出现问题。修改为正确的即可,之后还需要重启服务器,使用。之后即可成功,通过即可查看命令是否有写入。...

码农研究僧的博客 5883

计算机视觉与深度学习 | Matlab实现ORBSLAM2(附完整代码)

================================================ 博主github:https://github.com/MichaelBeechan 博主优快云:https://blog.youkuaiyun.com/u011344545 ================================================ 代码阅览 效果图 代码 imdsLeft = imageDatastore('C:\MichaelSpace\matlabworks

尘世冰封的专栏 1522

Pytorch深度学习框架实战教程09:模型的保存和加载

本文介绍了PyTorch中模型保存与加载的两种方法:一是仅保存模型权重,通过state_dict和load_state_dict实现;二是同时保存模型结构和权重。第一种方法需先创建相同模型实例再加载权重,第二种方法可直接保存整个模型。文章强调了使用weights_only=True加载权重的最佳实践,并提醒导入模型类的重要性。这两种方式为深度学习模型部署提供了灵活性选择。

数据饕餮 845

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

DL7-tensorflow中模型的保存和加载

简单示例 import tensorflow as tf a = tf.Variable(tf.random_normal([1, 2]), name='a') b = tf.Variable(tf.random_normal([2, 3]), name='b') init = tf.global_variables_initializer() saver = tf.train.Saver()...

进击的小杨人 1807

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

机器学习或深度学习中---保存和加载模型的方法

根据使用的框架(如 scikit-learn、TensorFlow、PyTorch),选择合适的方法保存模型的权重或结构,并在需要时加载模型进行推理或进一步训练。在机器学习或深度学习中,训练好的模型可以通过多种方式保存和加载,以便在后续使用中进行推理(预测)或进一步训练。以下是常见的保存和加载模型的方法,以 Python 中的常见库(如 scikit-learn、TensorFlow、PyTorch)为例。:保存整个模型可能限制模型的可移植性(例如,需要相同的环境和依赖),因此推荐保存和加载权重。

weixin_45880844的博客 976

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

深度学习第四周:模型保存和加载——猴痘病识别

本周我们使用一个本地数据集,数据集有两个文件夹,“Monkeypox”文件夹中内容是关于猴痘病的图片;百度网盘(提取码:7qtp))

2402_84836667的博客 1846

24- 深度学习的模型保存和加载 (TensorFlow系列) (深度学习)

Fashion-MNIST总共有十个类别的图像。每一个类别由训练数据集6000张图像和测试数据集1000张图像。所以训练集和测试集分别包含60000张和10000张。测试训练集用于评估模型的性能。,分别是t-shirt,trouser,pillover,dress,coat,sandal,shirt,sneaker,bag,ankle boot。每一个输入图像的高度和宽度均为28像素。数据集由灰度图像组成。keras 保存成hdf5文件, 1.保存模型和参数, 2.只保存参数。创建interpreter。

March_A的博客 1826

【模型的保存和加载】——深度学习.全连接神经网路

训练一个模型通常需要大量的数据、时间和计算资源。通过保存训练好的模型,可以满足后续的模型部署、模型更新、迁移学习、训练恢复等各种业务需要求。

weixin_70972767的博客 494

深度学习-Pytorch如何保存和加载模型

用pytorch构建模型,并训练模型,得到一个优化的模型,那么如何保存模型?然后如何又加载模型呢?

Alex_StarSky的博客 1699

深度学习 --- 批量标准化以及模型保存和加载

批量标准化(Batch Normalization)是深度学习中重要的正则化技术,通过在每层输入上执行标准化操作来加速训练并提高模型稳定性。其核心步骤包括计算批次均值和方差、标准化处理、以及可学习的缩放和平移。BN在训练阶段使用当前批次统计量,测试阶段则依赖全局统计量以保证一致性。相比无BN的网络,BN能缓解梯度问题、允许更大学习率、减少过拟合,并显著提升训练速度和模型性能。实验表明带BN的网络在收敛速度和准确率上均有优势。

m0_73338216的博客 843

深度学习——keras模型的保存和加载

​在上一篇关于深度学习的推文中,我们介绍了使用Keras来实现机器学习中的线性回归和非线性回归算法。不过在那期的推文当中我们没有介绍如何保存我们的训练的模型和加载我们训练的模型,所以在本次的推文中我们将向大家介绍一下Keras中如何进行模型的保存、加载和接着训练。 一、Keras模型的保存 我们将使用手写字体识别的案例来进行说明。 我们先看一下之前的代码: from keras.datasets import mnist from keras.utils import np_utils fro..

th1522856954的博客 1388
上一篇: 深度学习常见代码汇总
下一篇: 论文中出现的arg max/min含义
pytorch start
博客等级 码龄9年 4粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值