2025-05-31 Python深度学习9——网络模型的加载与保存

article/2025/6/10 10:16:13

文章目录

  • 1 使用现有网络
  • 2 修改网络结构
    • 2.1 添加新层
    • 2.2 替换现有层
  • 3 保存网络模型
    • 3.1 完整保存
    • 3.2 参数保存(推荐)
  • 4 加载网络模型
    • 4.1 加载完整模型文件
    • 4.2 加载参数文件
  • 5 Checkpoint
    • 5.1 保存 Checkpoint
    • 5.2 加载 Checkpoint

本文环境:

  • Pycharm 2025.1
  • Python 3.12.9
  • Pytorch 2.6.0+cu124

​ PyTorch 通过torchvision.models提供预训练模型(如 VGG16)。

​ 网址链接:https://docs.pytorch.org/vision/stable/models.html。

1 使用现有网络

​ 以 VGG16 为例,进入网址:https://docs.pytorch.org/vision/stable/models/generated/torchvision.models.vgg16.html#torchvision.models.vgg16。

image-20250531103635500

方法一:使用随机初始化权重

​ 将 weights 设置为 None,从 0 开始训练自己的网络。

vgg16_false = torchvision.models.vgg16(weights=None)  # 权重随机初始化

方法二:加载预训练权重

​ 也可以使用预训练好的网络参数,加载后可直接使用网络。
这将从官网上下载已训练好的模型文件。

vgg16_true = torchvision.models.vgg16(weights=torchvision.models.VGG16_Weights.IMAGENET1K_V1)

​ 可打印网络查看其模型结构:

print(vgg16_true)
image-20250531104433678
...
image-20250531104447912

2 修改网络结构

2.1 添加新层

​ 使用add_module在分类器(classifier)后追加全连接层:

vgg16_true.classifier.add_module('add_linear', nn.Linear(1000, 10))
image-20250531104536554

2.2 替换现有层

​ 直接修改分类器的最后一层(如适配 CIFAR10 的 10 分类任务):

vgg16_false.classifier[6] = nn.Linear(4096, 10)  # 替换第6层
image-20250531104551228

3 保存网络模型

​ 使用torch.save()方法保存网络模型。文件扩展名推荐使用.pt.pth

3.1 完整保存

​ 将模型类和参数一并保存到文件中。

torch.save(vgg16, 'vgg16_method1.pth')  # 包含模型类和参数
  • 优点:加载时无需重新定义模型结构。
  • 缺点:文件较大,且依赖原始代码环境(见 4.1 节)。

3.2 参数保存(推荐)

​ 仅保存参数字典到文件中。

torch.save(vgg16.state_dict(), 'vgg16_method2.pth')  # 仅保存参数字典
  • 优点:文件小,灵活性强,适合生产部署。

示例

import torch
import torchvision.models
from torch import nnvgg16 = torchvision.models.vgg16(weights=None)# 保存方式 1,模型结构 + 模型参数
torch.save(vgg16, 'vgg16_method1.pth')# 保存方式 2,模型参数(官方推荐)
torch.save(vgg16.state_dict(), 'vgg16_method2.pth')

4 加载网络模型

​ 使用torch.load()方法加载网络模型。

4.1 加载完整模型文件

​ 加载完整模型时,需将 weights_only 参数设置为 False。

model = torch.load('vgg16_method1.pth', weights_only=False)  # 需确保模型类已定义

​ 模型打印结果如下:

print(model)
image-20250531111142517

注意

​ 若保存自定义模型,加载时必须确保环境中也有该模型的定义,否则会出现报错。

  • model_save.py

    # model_save.pyimport torch
    from torch import nnclass MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()self.conv1 = nn.Conv2d(3, 64, 3)def forward(self, x):return self.conv1(x)model = MyModel()
    torch.save(model, 'my_model_method1.pth')
    
  • model_load.py

    import torchmodel = torch.load('my_model_method1.pth', weights_only=False)  # 报错,找不到 MyModel 的定义
    

    先运行 model_save.py,再运行 model_load.py,则会出现以下报错:

image-20250531110244566

4.2 加载参数文件

​ 首先,使用torch.load()方法加载网络模型。

​ 使用模型时,需先创建匹配的网络结构,再使用model.load_state_dict()加载参数数据。

vgg16 = torchvision.models.vgg16(weights=None)
model_dict = torch.load('vgg16_method2.pth')
vgg16.load_state_dict(model_dict)  # 需结构匹配

​ 模型打印结果是参数字典:

print(model_dict)
image-20250531111411199

注意

​ 模型保存时若在 GPU 上,加载时需指定 map_location 为 cup。

torch.load('model.pth', map_location=torch.device('cpu'))

​ 将参数加载到模型后,手动迁移到 GPU:

model = MyModel()
model.load_state_dict(model_dict)
model.to('cuda:0')

5 Checkpoint

​ 使用 Checkpoint 可以在训练过程中定期保存模型的状态,以便在中断后可以恢复训练,或者在测试时使用最终的模型。文件扩展名推荐使用.tar

5.1 保存 Checkpoint

​ 要保存一个模型的 Checkpoint,通常需要保存以下数据:

  • 模型的 state_dict(状态字典);
  • 优化器的状态;
  • 额外的信息,如 epoch 等。
import torch# 假设 model 是你的模型,optimizer 是你的优化器
checkpoint = {'epoch': epoch,'model_state_dict': model.state_dict(),'optimizer_state_dict': optimizer.state_dict(),'loss': loss
}# 保存checkpoint
torch.save(checkpoint, 'checkpoint.tar')

5.2 加载 Checkpoint

​ 加载 Checkpoint,首先需要加载文件,然后将其内容恢复到模型和优化器的状态中。

# 假设 model 和 optimizer 是你的模型和优化器实例
checkpoint = torch.load('checkpoint.tar')model.load_state_dict(checkpoint['model_state_dict'])
optimizer.load_state_dict(checkpoint['optimizer_state_dict'])
epoch = checkpoint['epoch']
loss = checkpoint['loss']# 如果需要,可以继续训练
model.train()  # 确保模型处于训练模式

http://www.hkcw.cn/article/YOEZlTfKVu.shtml

相关文章

智能测试新范式:GenAI 与 Playwright MCP 如何重塑 QA 流程

文章简介 在敏捷开发背景下,传统测试自动化面临动态 UI 适配难、脚本维护成本高等挑战。本文深度解析 ** 生成式 AI(GenAI)与Playwright MCP(模型上下文协议)** 的协同机制,展示如何通过自然语言驱动测试创…

孙颖莎全红婵们等比例长大 体育名将童心未泯

显示图片孙颖莎全红婵们等比例长大-今日头条-手机光明网今天是六一儿童节,祝大家儿童节快乐!来看看体育圈那些等比例长大的名将们吧!2025-06-01 10:05:46责任编辑:zx0176

赛龙舟快得千篇一律沉得五花八门 各地龙舟赛“名场面”

端午节到了,又是一年一度观看“水上F1”的时刻。作为端午节的传统节目,全国各地的龙舟大赛已经激烈打响,各地画风确实有所不同。快得千篇一律,沉得五花八门。有人划龙舟是为了纪念屈原,有人则是去救屈原,还有人是屈原救我。广东佛山的叠滘龙舟队是龙舟界公认最具实力的队…

AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月31日第94弹

从今天开始,咱们还是暂时基于旧的模型进行预测,好了,废话不多说,按照老办法,重点8-9码定位,配合三胆下1或下2,杀1-2个和尾,再杀4-5个和值,可以做到100-300注左右。 (1)定…

HackMyVM-First

信息搜集 主机发现 ┌──(kali㉿kali)-[~] └─$ nmap -sn 192.168.43.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-31 06:13 EDT Nmap scan report for 192.168.43.1 Host is up (0.0080s latency). MAC Address: C6:45:66:05:91:88 (Unknown) …

【赵渝强老师】数据库不适合Docker容器化部署的原因

在Docker的容器中可以部署运行一个MySQL数据库,并通过数据卷将运行在容器中的MySQL数据库的数据进行持久化。如果这时候运行MySQL的容器被销毁了,数据也将会发生丢失。因此在Docker中部署数据库服务时,一定要考虑数据持久化的问题。但数据库并…

“婚内强奸”被羁押285天当事人发声 申请33万赔偿

5月30日,尹某向河南省濮阳县人民检察院递交了《国家赔偿申请书》,申请国家赔偿33万元,并要求追责相关办案人员。濮阳县人民检察院接受了相关的申请材料。尹某表示,当时以强奸罪对他提起公诉,量刑为4年,但一年前决定不起诉,他被错误羁押了285天,希望获得应有的国家赔偿。…

美计划大幅增加对台军售,外交部回应 坚决反对售台武器

中国外交部发言人林剑在例行记者会上表示,中方坚决反对美国向中国台湾地区出售武器,敦促美方恪守一个中国原则和中美三个联合公报,特别是“八一七”公报的规定,停止售台武器,停止制造台海局势紧张因素。有记者在会上提问,据报道,美国特朗普政府正计划扩大对台军售规模,…

事关志愿填报!这些核心信息必看

随着高考临近,各高校陆续公布2025年招生章程,它是考生了解高校招生信息、录取规则的重要渠道,也是填报志愿的关键依据,怎么吃透招生章程?需要重点关注哪些信息?一起来听听高校招办主任的解读。高校招生章程必看的核心信息高校招生章程包含招生计划分配原则、招生录取规则…

Labubu冲破关税打压美国卖断货,中国智造雄起 原创设计赢得全球认可

美国摩根大通CEO杰米戴蒙最近访问了中国,他表示,面对美国的关税打压,中国人并不害怕,想让中国对美国卑躬屈膝的想法是不现实的。中国能够昂首挺胸,因为有越来越多的中国公司能生产出让美国消费者喜欢的产品。近期,一个来自中国的娃娃Labubu成为了世界顶流。从最初被部分人…

AR测量工具:精准测量,多功能集成

在日常生活中,我们常常会遇到需要测量物体长度、距离或角度的情况。无论是装修房屋、制作家具,还是进行户外活动,一个精准的测量工具都能大大提高我们的工作效率。AR测量工具就是这样一款集多种功能于一体的实用测量软件,它利用增…

LiquiGen流体导入UE

导出ABC 导出贴图 ABC导入Houdini UE安装SideFX_Labs插件 C:\Users\Star\Documents\houdini20.5\SideFXLabs\unreal\5.5 参考: LiquiGenHoudiniUE血液流程_哔哩哔哩_bilibili

Unity3D仿星露谷物语开发57之保存库存信息到文件

1、目标 保存下面库存栏中信息到文件中。 2、修改SceneSave.cs脚本 添加2行代码: 3、修改InventoryManager对象 添加Generate GUID组件。 4、修改InventoryManager.cs脚本 添加继承自ISaveable 添加属性信息: private string _iSaveableUniqueID;pub…

港大NVMIT开源Fast-dLLM:无需重新训练模型,直接提升扩散语言模型的推理效率

作者:吴成岳,香港大学博士生 原文:https://mp.weixin.qq.com/s/o0a-swHZOplknnNxpqlsaA 最近的Gemini Diffusion语言模型展现了惊人的throughput和效果,但是开源的扩散语言模型由于缺少kv cache以及在并行解码的时候性能严重下降等…

【AGI】Qwen3混合推理模型微调数据集

【AGI】Qwen3混合推理模型微调数据集 (1)OpenMathReasoning 数据集(AIMO-2)(2)FineTome-100k 数据集(Maxime Labonne) ​ 搭建好基础环境后,开始准备Qwen3混合推理模型微…

联邦学习与深度学习结合

联邦学习(Federated Learning)与深度学习(Deep Learning)的结合,是当前人工智能领域的研究热点之一。这种结合既发挥了深度学习在复杂数据建模中的强大能力,又通过联邦学习的分布式框架解决了数据隐私、安全…

特朗普送马斯克白宫钥匙 马斯克将任总统顾问

当地时间30日,美国总统特朗普在白宫举行新闻发布会“欢送”“政府效率部(DOGE)”负责人马斯克。发布会上,两人互道临别感言,特朗普向马斯克赠送了一把金色的白宫钥匙,而马斯克则表示,在从DOGE离职后,将成为特朗普的顾问,继续为其提供建议。当天,在椭圆形办公室举行的新…

日方请求恢复水产品入华,外交部回应 坚持科学安全原则

5月30日,外交部发言人林剑主持例行记者会。会上,日本广播协会的记者提问,询问发言人提到的关于日本水产品安全问题的新一轮技术交流取得实质性进展具体指哪些方面。记者还提到,日方表示双方已就恢复进口日本水产品所需的技术性条件达成一致,并询问中方是否也持有相同的看法…

探索DeepSeek提示词:关键策略与实用场景

在人工智能飞速发展的时代,DeepSeek作为一款备受关注的AI工具,其强大的功能为用户提供了高效便捷的服务。然而,要充分发挥DeepSeek的潜力,掌握提示词的使用策略至关重要。本文将深入探讨DeepSeek提示词的关键策略,并结…

广西官员王雄昌,与蓝天立同时被罢免 代表资格终止引发关注

5月29日,广西壮族自治区十四届人大常委会第十六次会议在广西人民会堂闭幕。会议表决通过了关于个别代表的代表资格的报告。蓝天立和王雄昌分别被百色市人大常委会和钦州市人大常委会罢免自治区第十四届人民代表大会代表职务,他们的代表资格随之终止。会议还通过了罢免蓝天立、…