Pytorch 保存和加载模型

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

当保存和加载模型时,需要熟悉三个核心功能:

1. torch.save :将序列化对象保存到磁盘。此函数使用Python的 pickle 模块进行序列化。使
用此函数可以保存如模型、tensor、字典等各种对象。
2. torch.load :使用pickle的 unpickling 功能将pickle对象文件反序列化到内存。此功能还可
以有助于设备加载数据。
3. torch.nn.Module.load_state_dict :使用反序列化函数 state_dict 来加载模型的参数字典。

1 保存和加载推理模型

保存

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

加载

model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH))
model.eval()
    当保存好模型用来推断的时候,只需要保存模型学习到的参数,使用 torch.save() 函数来保
存模型 state_dict ,它会给模型恢复提供 最大的灵活性,这就是为什么要推荐它来保存的原
因。
    在 PyTorch 中最常见的模型保存使‘.pt’或者是‘.pth’作为模型文件扩展名。
    请记住,在运行推理之前,务必调用 model.eval() 去设置 dropout 和 batch normalization 层为评 估模式。如果不这么做,可能导致 模型推断结果不一致。
注意:load_state_dict() 函数只接受字典对象,而不是保存对象的路径。这就意味着在你传给
load_state_dict() 函数之前,你必须反序列化 你保存的 state_dict 。例如,你无法通过
model.load_state_dict(PATH) 来加载模型。

2 保存/加载完整模型

保存

torch.save(model, PATH)

加载

new_model = torch.load(PATH)
new_model.eval()
#new_model 不再需要第一种方法中的建立新模型的步骤
    此部分保存/加载过程使用最直观的语法并涉及最少量的代码。以 Python ‘pickle’ 模块的方式
来保存模型。这种方法的缺点是序列化数据受 限于某种特殊的类而且需要确切的字典结构。
这是因为pickle无法保存模型类本身。相反,它保存包含类的文件的路径,该文件在加载时使
用。 因此,当在其他项目使用或者重构之后,您的代码可能会以各种方式中断。
    在 PyTorch 中最常见的模型保存使用‘.pt’或者是‘.pth’作为模型文件扩展名。
    请记住,在运行推理之前,务必调用 model.eval() 设置 dropout 和 batch normalization 层为评估模式。如果不这么做,可能导致模型推断结果不一致。

3 保存和加载 Checkpoint 用于推理/继续训练

保存

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

加载

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']
model.eval()
# - or -
model.train()

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

保存

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)

加载

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'])
modelA.eval()
modelB.eval()
# - or -
modelA.train()
modelB.train()
    当保存一个模型由多个 torch.nn.Modules 组成时,例如GAN(对抗生成网络)、sequence-to-
sequence (序列到序列模型), 或者是多个模型融合, 可以采用与保存常规检查点相同的方法。
换句话说,保存每个模型的 state_dict 的字典和相对应的优化器。如前所述,可以通过简单地
将它们附加到字典的方式来保存任何其他项目,这样有助于恢复训练。
    PyTorch 中常见的保存 checkpoint 是使用 .tar 文件扩展名。 要加载项目,首先需要初始化模型和优化器,然后使用 torch.load() 来加载本地字典。这里,你可以非常容易的通过简单查询字典来访问你所保存的项目。
    请记住在运行推理之前,务必调用 model.eval() 去设置 dropout 和 batch normalization 为评估。如果不这样做,有可能得到不一致的推断结果。 如果你想要恢复训练,请调用 model.train() 以 确保这些层处于训练模式。

5 使用在不同模型参数下的热启动模式

保存

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

加载

modelB = TheModelBClass(*args, **kwargs)
modelB.load_state_dict(torch.load(PATH), strict=False)
    在迁移学习或训练新的复杂模型时,部分加载模型或加载部分模型是常见的情况。利用训练好
的参数,有助于热启动训练过程,并希望帮助你的模型比从头开始训练能够更快地收敛。
    无论是从缺少某些键的 state_dict 加载还是从键的数目多于加载模型的 state_dict , 都可以通过在 load_state_dict() 函数中将 strict 参数设置为 False 来忽略非匹配键的函数。
    如果要将参数从一个层加载到另一个层,但是某些键不匹配,主要修改正在加载的 state_dict 中的 参数键的名称以匹配要在加载到模型中的键即可。

6 通过设备保存/加载模型

6.1 保存到 CPU、加载到 CPU

保存

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

加载

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

6.2 保存到 GPU、加载到 GPU

保存

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

加载

device = torch.device("cuda")
model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH))
model.to(device) # 确保在你提供给模型的任何输入张量上调用input = input.to(device)
当在GPU上训练并把模型保存在GPU,只需要使用 model.to(torch.device('cuda')) ,将初
始化的 model 转换为 CUDA 优化模型。另外,请 务必在所有模型输入上使用 .to(torch.device('cuda')) 函数来为模型准备数据。请注意,调用 my_tensor.to(device)
会在GPU上返回 my_tensor 的副本。 因此,请记住手动覆盖张量: my_tensor= my_tensor.to(torch.device('cuda')) 。

6.3 保存到 CPU,加载到 GPU

保存

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

加载

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) # 确保在你提供给模型的任何输入张量上调用input = input.to(device)
    在CPU上训练好并保存的模型加载到GPU时,将 torch.load() 函数中的 map_location 参数设
置为 cuda:device_id 。这会将模型加载到指定的GPU设备。接下来,请务必调用
model.to(torch.device('cuda')) 将模型的参数张量转换为 CUDA 张量。最后,确保在所有
模型输入上使用 .to(torch.device('cuda')) 函数来为CUDA优化模型。请注意,调用
my_tensor.to(device) 会在GPU上返回 my_tensor 的新副本。它不会覆盖 my_tensor 。因
此, 请手动覆盖张量 my_tensor = my_tensor.to(torch.device('cuda')) 。

6.4 保存 torch.nn.DataParallel 模型

保存

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

加载

# 加载任何你想要的设备
torch.nn.DataParallel 是一个模型封装,支持并行GPU使用。要普通保存 DataParallel 模型,
请保存 model.module.state_dict() 。 这样,你就可以非常灵活地以任何方式加载模型到你
想要的设备中。

【PyTorch】基础学习:一文详细介绍 torch.save() 的用法和应用 作为PyTorch中用于保存模型或张量的重要函数,在实际项目中发挥着至关重要的作用。通过掌握其基本用法和高级功能,我们可以更加高效地进行模型的保存、加载和共享操作,为深度学习项目的开发提供有力支持。展望未来,随着深度学习技术的不断发展和应用领域的拓展,对模型保存和加载的需求也将更加多样化和复杂化。相信在PyTorch等开源框架的持续努力下,我们将拥有更加完善和强大的模型序列化工具,为深度学习领域的发展注入新的动力。希望本文能够为大家在PyTorch的学习和使用中提供一些帮助和启示。 阅读详情

相关推荐

Pytorch之Save&Load(保存和加载模型)

模型的保存和加载都在系列化的模块下 先看保存的 更详细的可以参考这里https://pytorch.org/docs/stable/notes/serialization.html#preserve-storage-sharing torch.save()并torch.load()让您轻松保存和加载张量:最简单的就是 t = torch.tensor([1., 2.]) torch.save(t, 'tensor.pth') torch.load('tensor.pth') 按照惯例,Py

记录学习的小白 6978

pytorch模型保存与加载总结

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

蜗牛博客 1万+

Pytorch加载保存好的模型发现与实际保存模型的参数不一致

Pytorch加载保存好的模型发现与实际保存的参数不一致发现问题初衷:问题:保存模型并打印参数:加载模型并打印模型参数问题来了解决问题先说结论原因:联想问题本质二级目录三级目录参考博客 发现问题 初衷: 最近跑深度学习代码,数据量比较庞大所以训练速度慢的一,一旦有什么问题训练突然停止了,心态都要炸了,所以这时候使用pytorch保存每轮训练好的模型(可以使用一些保存技巧,保存得到的当前最新的模型checkpoint,倒不至于每轮都保存),即使训练停止还能接着去加载保存好的模型得到当前模型输出结果,节省时间,

weixin_42416791的博客 1万+

torch.save()

保存为pt或者pth都可以,前提似乎都得先mkdir或者makedirs,不能直接save到一个即时指定的文件夹下。 pytorch保存模型等相关参数,利用torch.save(),以及读取保存之后的文件 本文分为两部分,第一部分讲如何保存模型参数,优化器参数等等,第二部分则讲如何读取。 假设网络为model = Net(), optimizer = optim.Adam(model.parameters(), lr=.

edward_zcl的博客 5254

halcon 深度学习标注_Halcon deep learning之目标检测笔记(一)

设置输入输出的路径输入路径有两个,一个是图像路径HalconImageDir,一个是Json文件路径PillBagJsonFile。这两个参数用于后续在图像路径中读取coco文件。输出路径首先定义一个新的文件夹路径,用于存放样本和模型文件等数据。设置基于深度学习的目标检测模型的路径,该模型文件以.hdl结尾。设置样本数据文件夹ExampleDataDir:'detect_pills_data'数据...

weixin_27885313的博客 2697

固定资产报废的损失鉴定怎么做?

在社会生产的日常中,企业经常会遇到固定资产报废的损失鉴定,那么怎么去做鉴定?哪些情况下能申请固定资产报废损失鉴定呢? 今天,华碧鉴定就和大家说一说固定资产报废损失鉴定那些事儿。 符合下列条件之一的固定资产可申请报废: 1、使用年限过长,功能丧失,完全失去使用价值,或不能使用并无修复价值的; 2、产品技术落后,质量差,耗能高,效率低,已属淘汰且不适于继续使用,或技术指标已达不到使用要求的; 3、严重损坏,无法修复的或虽能修复,但累计修理费已接近或超过市场价值的; 4、主要附件损坏,无.

weixin_50362670的博客 2114

PyTorch模型保存与加载

torch.save:保存序列化的对象到磁盘,使用了Python的pickle进行序列化,模型、张量、所有对象的字典。 torch.load:使用了pickle的unpacking将pickled的对象反序列化到内存中。 torch.nn.Module.load_state_dict:使用反序列化的state_dict加载模型的参数字典。 state_dict 是一个Python字典,将每一层...

LXYTSOS的专栏 4万+

【汽车主动降噪】【ANC算法优化】基于深度学习的汽车主动噪声控制技术研究及Matlab实现

本文探讨了基于深度学习的汽车主动降噪(ANC)算法优化方案。针对传统FXLMS算法在应对复杂、非线性车内噪声时的局限性,文章详细解析了如何利用神经网络作为非线性建模器、深度滤波器或智能步长调节器来增强ANC系统性能,并提供了完整的Matlab仿真实战流程,展示了深度学习在提升降噪效果和收敛速度方面的潜力。

seed的博客 540

pytorch模型的保存和加载、checkpoint

pytorch模型的保存和加载、checkpoint 其实之前笔者写代码的时候用到模型的保存和加载,需要用的时候就去度娘搜一下大致代码,现在有时间就来整理下整个pytorch模型的保存和加载,开始学习把~ pytorch的模型和参数是分开的,可以分别保存或加载模型和参数。所以pytorch的保存和加载对应存在两种方式: 1. 直接保存加载模型 (1)保存和加载整个模型 # 保存模型 torch.save(model, 'model.pth\pkl\pt') #一般形式torch.save(net, P

qq_38765642的博客 4万+

GX WORKS2通过交换机连接PLC的方法

三菱PLC连接方法的分享

weixin_64927621的博客 3616

LEAP模型—低排放分析平台

LEAP 正在迅速成为进行综合资源规划、温室气体 (GHG) 缓解评估和低排放发展战略 (LEDS) 的国家的事实标准,尤其是在发展中国家,许多国家也选择使用 LEAP 作为其承诺的一部分向联合国气候变化框架公约(UNFCCC)报告。至少有 32 个国家使用 LEAP 来创建能源和排放情景,这些情景是其国家自主气候变化贡献计划 (INDC) 的基础:具有历史意义的巴黎气候协议的基础旨在表明各国开始经济脱碳的意图和投资于气候适应力。

weixin_54697010的博客 3278

pytorch 模型加载与保存

翻译自https://pytorch.org/tutorials/beginner/saving_loading_models.html 保存和与加载模型,有三个核心函数需要熟悉: torch.save: 保存一个序列化的对象至硬盘,。该函数使用了Python的pickle包用于序列化。模型、张亮和各种对象的字典都可以使用该函数保存; torch.load:使用pickle的反序列化功能将序列化...

wumo1556的博客 7395

【推荐100个unity插件之7】使用BehaviorDesigner插件制作BOSS的AI行为树

Behavior Designer是一个行为树插件,是一款为了让策划,程序员,美术人员方便使用的可视化编辑器。Behavior Designer提供了强大的AP1可以让你轻松的创建tasks(任务),配合uScript和PlayMaker这样的插件,可以不费吹灰之力就能够创建出强大的Al系统,而无需写行代码。(不懂PlayMaker的,我后面在单独出文章介绍一下,可以期待一下)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 6564

PyTorch保存和加载模型(全面汇总)

pytorch 中的 state_dict 是一个简单的python的字典对象,将每一层与它的对应参数张量建立映射关系.(如model的每一层的weights及偏置等等) 只有那些参数可以训练的layer才会被保存到模型的state_dict中,如卷积层,线性层等等。 优化器对象Optimizer也有一个state_dict,它包含了优化器的状态以及被使用的超参数(如lr, momentum,w...

zhongzhh8的博客 5389

190、LLC谐振变换器的样机调试实战(问题定位)

这篇实战笔记总结了LLC谐振变换器样机调试中的五大典型问题及解决方案:1)空载炸机源于谐振电容纹波电流能力不足;2)轻载啸叫因控制环路不稳定,需调整突发模式阈值;3)MOSFET过热由死区时间不当导致,需精确优化实现ZVS;4)输出纹波大由PCB布局耦合引起,需优化共模抑制;5)启动过冲需延长软启动时间。作者强调调试需结合示波器、热成像仪等工具,理论计算与实测并重,并详细记录每次参数调整。文章指出LLC调试是不断试错的过程,关键是通过现象分析本质原因。

Jack010169的博客 45

华为交换机系统软件升级和安全漏洞修复教程

在华为交换机国网可以查询到华为交换机官方电话:400-822-9999,通过下命令查询出需要升级的交换机软件版本和补丁版本号发给华为,获取新的升级系统软件和补丁以及升级教程。下面是我升级华为交换机总结的教程,作为参考。...

星如雨落 2964

pytorch模型保存、加载与续训练

最近,看到不少小伙伴问pytorch如何保存和加载模型,其实这部分pytorch官网介绍的也是很清楚的,感兴趣的点击☞☞☞了解详情🥁🥁🥁​  但是肯定有很多人是不愿意看官网的,所以我还是花一篇文章来为大家介绍介绍。当然了,在介绍中我会加入自己的一些理解,让大家有一个更深的认识。如果准备好了的话,就让我们开始吧。⏳⏳⏳​这部分还是蛮简单的,但一些细节还是需要大家自行考量,我就为大家介绍到这里啦,希望大家都能够有所收获吧。🥂🥂🥂如若文章对你有所帮助,那就🛴🛴🛴。

秃头小苏的博客 7776

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【PyTorch】保存和加载模型

■state_dict ■用于推理的保存和加载模型 ■保存和加载用于推断和/或恢复训练的一般检查点(Checkpoint) ■将多个模型保存在一个文件中 ■使用来自不同模型的参数进行暖启动(Warmstarting)模型 ■跨设备保存和加载模型 ■保存torch.nn.DataParallel模型

静谧、淡雅 1408

精雕软件(JDpaint) 5.5 绿色版

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

android 蓝牙通讯demo

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

pytorch保存和加载模型

主要用于fine-tune微调,加快模型的训练速度和提高精度,通常是加载预训练模型的部分网络参数作为模型的初始化参数以达到该效果。,表示当模型中的key与状态字典中的key不匹配时暂时跳过不管,但当模型中的key与状态字典中的key匹配时,pytorch就会尝试帮我们加载参数。因此,如果要使用字典来载入权重的参数必须要保证模型参数的名称一模一样,也就是模型的key与状态字典中的key匹配。加载状态字典,并将状态字典全部加载到模型上,通过修改加载后的模型结构,以此来修改修改结构的参数。都可以使用该方法保存。

tz的博客 4807

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

pytorch保存和加载模型权重的方式

(1) 保存和加载整个模型 # 模型保存 torch.save(model, 'model.pkl') # 模型加载 model = torch.load('model.pkl') 这种方式无需自定义网络,保存时已把网络结构保存,比较死板,不能调整网络结构。 (2) 仅仅保存模型参数以及分别加载模型结构和参数 # 模型参数保存 torch.save(model.state_dict(), 'model_param.pkl') # 模型参数加载 model = ModelClass(...) mo

lu_linux的博客 2万+

PyTorch 模型保存和加载

PyTorch 模型保存与加载指南 PyTorch 提供了两种主要方式保存和加载模型: state_dict 方式(推荐):仅保存模型参数,轻量灵活 完整模型方式:保存结构和参数,文件较大 保存 state_dict: torch.save(model.state_dict(), 'model.pth') 加载 state_dict: 需先创建相同结构模型,再加载参数 model.load_state_dict(torch.load('model.pth')) 完整模型保存/加载: torch.save(m

likuoelie的博客 921

pytorch模型保存和加载

pytorch有两种模型保存方式:1.保存整个的的结构信息和模型参数信息,save的对象是网络net2.只保存神经网络的训练模型参数,save的对象是net.state_dict()1.加载整个模型这种保存/加载模型的过程使用了最直观的语法,所用代码量少。这使用Python的pickle保存所有模块。这种方法的缺点是,保存模型的时候,的数据被绑定到了特定的类和确切的目录。这是因为pickle不保存模型类本身,而是保存这个类的路径,并且在加载的时候会使用。一般来说,的模型以.pt或者.pth文件格式保存。

yzy12hxw的博客 3043

Pytorch模型 保存&加载

keras中常使用 .h5 文件保存模型。而 Pytorch 保存数据的格式为.t7文件 或者 .pt文件 或者 .pkl格式 .t7格式 是沿用 torch7 中读取模型权重的方式 .pt格式 是Pytorch官方示例推荐使用的格式

绿色羽毛 1万+

Pytorch模型加载和保存

在模型的训练过程中,可能会因为各种原因停止,因此需要注意保存每一轮的epoch的模型(一般保存当前模型和最好模型)。

m0_52730486的博客 1452
上一篇: Torch.sqeeze() 函数
下一篇: 关于梯度下降法的理解
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值