网络模型的保存与读取

news2024/11/15 13:52:12

文章目录

    • 一、模型的保存
    • 二、文件的加载
    • 三、模型加载时容易犯的陷阱

一、模型的保存

方式1:torch.save(vgg16, “vgg16_method1.pth”)

import torch
import torchvision.models

vgg16 = torchvision.models.vgg16(pretrained=False)
torch.save(vgg16, "vgg16_method1.pth")

如果运行报错:UserWarning: Arguments other than a weight enum or None for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing weights=None或者The parameter ‘pretrained‘ is deprecated since 0.13 and may be removed in the future

原因是在 PyTorch 的 torchvision 库中,从版本 0.13 开始,pretrained 参数已经被弃用,取而代之的是 weights 参数。这个改变是为了提供更丰富的预训练模型选择。当你尝试使用 vgg16(pretrained=False) 时,你收到了一个警告,告诉你 pretrained 参数已经不再被使用,并且建议你使用 weights 参数。

要解决这个问题,你应该使用 weights 参数来代替 pretrained。

修正代码:

import torch
import torchvision.models

vgg16 = torchvision.models.vgg16(weights=torchvision.models.VGG16_Weights.DEFAULT)
torch.save(vgg16, "vgg16_method1.pth")

运行代码:
在这里插入图片描述
可以看到多了一个新文件vgg16_method1.pth

该方式1保存的网路模型不仅保存了网络模型的一种结构,它也保存了模型当中的一些参数

方式2:把模型的参数保存成字典(dict)形式

import torch
import torchvision.models

vgg16 = torchvision.models.vgg16(weights=torchvision.models.VGG16_Weights.DEFAULT)
torch.save(vgg16.state_dict(),"vgg16_method2.pth")

运行结果:
在这里插入图片描述
方式1与方式2对比:

方式1保存的是模型的结构+模型的参数,方式2保存的只是模型的参数(官方推荐的保存方式)

官方推荐的原因是当保存一个大的模型时候,方式2所用的空间更小

我们可以查看一下两种保存方式的文件大小:
在这里插入图片描述
因为vgg这个模型本身就不大,所以文件大小差距并不明显,但方式2足足小了7kb!要是在大模型下节省空间这点会尤其明显。

二、文件的加载

代码:

import torch

model = torch.load("vgg16_method1.pth")
print(model)

运行结果:
在这里插入图片描述

通过将save与load的文件debug运行:
在这里插入图片描述
能够发现两者都是一样的,说明被完整加载出来。

通过上述步骤可以看到模型中的参数也一同保存下来了。

加载方式2保存的模型:

import torch

model = torch.load("vgg16_method2.pth")
print(model)

运行结果:
在这里插入图片描述
可以看到方式2形式是一个个字典形式.

方式2从字典形式想要恢复网络模型结构则需要:

import torch
import torchvision

# 创建一个VGG16模型实例,参数pretrained=False表示不加载预训练的权重。
vgg16 = torchvision.models.vgg16(pretrained=False)

# 加载之前保存的模型权重,这些权重保存在名为"vgg16_method2.pth"的文件中。
vgg16.load_state_dict(torch.load("vgg16_method2.pth"))

# 打印出模型的结构,这样可以看到模型的各个层和参数。
print(vgg16)

运行结果:
在这里插入图片描述
可以看到把模型参数成功加载出来了

三、模型加载时容易犯的陷阱

保存一个自己写的网络模型:

import torch
import torchvision.models
from torch import nn


class Sen(nn.Module):
    def __init__(self):
        super(Sen, self).__init__()
        self.conv1 = nn.Conv2d(3, 64, kernel_size=3)

    def forward(self, x):
        x = self.conv1(x)
        return x

sen = Sen()
torch.save(sen, "sen_method1.pth")

运行结果:
在这里插入图片描述

因为用方式1进行保存,故使用方式1的方法进行加载:

import torch
import torchvision

model = torch.load("sen_method1.pth")
print(model)

运行结果:
在这里插入图片描述
可以看到发生了报错,报错的意思是加载的时候没有找到Sen这个类

解决方法是将类复制到加载代码中:

import torch
import torchvision

class Sen(nn.Module):
    def __init__(self):
        super(Sen, self).__init__()
        self.conv1 = nn.Conv2d(3, 64, kernel_size=3)

    def forward(self, x):
        x = self.conv1(x)
        return x

model = torch.load("sen_method1.pth")
print(model)

注意不需要写sen = Sen()这一代码

运行代码:
在这里插入图片描述

也就是用自己写的网络模型不同于现有的网络模型,需要进行导入才能正常加载出来!

或者也可以用import的方法加载自己写的网络模型,那么就不需要老是复制粘贴

通过from model_save import *加载:

import torch
from model_save import *

model = torch.load("sen_method1.pth")
print(model)

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2150857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

oracle数据库启动

文章目录 背景一、步骤1.登录oracle用户2.启动监听服务3.启动数据库 背景 oracle数据库启动 一、步骤 1.登录oracle用户 代码如下(示例): su - oracle2.启动监听服务 代码如下(示例): lsnrctl start成…

【C++】STL----vector常见用法

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:C从小白到高手 🌹往期回顾🌹:[C]string类 🔖 流水不争,争的是滔滔不息。 文章目录 一、vector的介绍vector…

MATLAB绘图基础8:双变量图形绘制

参考书:《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 8.双变量图形绘制 8.1 散点图 散点图用于显示两个变量间的关系,每个数据点在图上表示为一个点,一个变量在 X {\rm X} X轴,一个变量在 Y {\rm Y} Y轴&#…

【Python报错已解决】AttributeError: ‘DataFrame‘ object has no attribute ‘append‘

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

暴雨信息|《2024 年全球人工智能趋势报告》发布,GPU仍是AI发展最大关键之一

全球著名调研机构WEKA近日正式发布《2024年全球人工智能趋势报告》,该报告是基于全球1500人工智能决策者的深度调查,覆盖金融、政府、医疗保健等多个行业,解锁了人工智能领域的关键见解和策略。 人工智能正成为许多组织战略的一个基本面&…

滑动窗口(8)_最小覆盖字串

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 滑动窗口(8)_最小覆盖字串 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 题…

6.C++程序中的基本数据类型

数据类型是指在C中用于声明不同类型变量或函数的一个系统或抽象或者是一个分类,它决定了变量存储占用的内存空间以及解析存储的位模式。其实数据类型可以理解为固定内存大小的别名,是创建变量的模具,具体使用哪种模具(包括自定义&…

基于深度学习的文本情感原因提取研究综述——论文阅读

前言 既然要学习情感分析,那么肯定还要了解情感原因对抽取的发展历程,所以我又搜了一篇研究综述,虽然是2023年发表的,但是里面提及到的历程仅停留到2022年。这篇综述发布在TASLP期刊,是音频、声学、语言信号处理的顶级…

进程间的通信-信号量

信号量 1.资源竞争 资源竞争 : 当多个进程同时访问共享资源时,会产生资源竞争,最终最导致数据混乱临界资源 : 不允许同时有多个进程访问的资源,包括硬件资源(CPU、内存、存储器以及其他外围设备)与软件资源(共享代码段、共享数据结构)临界区…

有关JS下隐藏的敏感信息

免责声明:本文仅做分享! 目录 JavaScript 介绍 核心组成 工具 FindSomething ** 浏览器检查 ** LinkFinder URLfinder ** SuperSearchPlus ** ffuf ParasCollector waymore Packer Fuzzer JS逆向 应用: 小结: Ja…

基于Python+SQLite的课程管理系统

系统需求简介 1.1需求分析 实现一个具体的课程管理系统。按照软件工程思路设计简化的专业课数据库,尽量模拟现有专业课程一个学期的选课排课原型实际情况。(注:本系统由本人单独设计、开发完成) 1.2 数据结构需求分析 课程管理…

NAND闪存:迎来新的发展机遇

2024年,存储市场正在经历着动态的变化,其中包括合同价格的上涨、制造商营收的增长以及多项技术上的突破。在这个背景下,主要的存储公司正在为新的挑战做准备,尤其是在NAND闪存领域即将面临转型的情况下。 扩展阅读:20…

PMData:人工智能之运动记录数据集

简介 在这个数据集中,我们展示了 PMData 数据集,旨在将传统的生活记录与体育活动记录相结合。这样的数据集可以开发几个有趣的分析应用程序,例如,可以使用额外的运动数据来预测和分析日常发展,如人的体重和睡眠模式&a…

数据飞轮:打造业务增长的持续循环

在当今数据驱动的世界中,企业必须利用数据的力量才能保持竞争力。然而,仅仅收集和分析数据是不够的;企业必须能够从他们的数据中创造一个持续增长的循环,才能保持成功。其中一种方法就是创建数据飞轮。接下来让我们来探讨一下什么…

centos7如何连接网络 centos7wifi连接

这段时间重新学习 Linux 知识,用的是笔记本,连接的是无良房东家的 WiFi,IP地址经常变动。每次都要修改 Xshell 的配置才能连上虚拟机。效率很低。 为此,必须要解决这个 IP 地址经常变动的事情!这里讲解的版本是&#…

Java集成gdal 处理解析tiff和shp数据

1. 配置 gdal 1.1. 官网下载 这个是因为你电脑是 win64 位才选择哦~ 下载这个,然后解压 1.2. 复制这个压缩包下的 ddl 文件 可以按照类型复制,然后复制到你的 java jDK 文件夹下 1.3. 找到你的 java jdk 文件夹 不知道 java 的文件夹位置…

数字签名和CA数字证书的核心原理

看了蛋老师的视频就很容易理解了,首先对服务器的公钥和信息进行哈希运算得到一个短字符串,然后用CA机构中的私钥对这一短字符串进行加密就得到了一个数字签名,然后就这个数字签名放到数字证书中,同时服务器的公钥也放在数字证书中…

NFT Insider #148:The Sandbox 推出 SHIBUYA Y3K 时尚系列,Azuki 进军动漫 NFT 领域

市场数据 加密艺术及收藏品新闻 Infinex 新推 NFT 系列首四日销售额破4000万美元 尽管顶级 NFT 系列表现不佳,Infinex 的最新 NFT 系列在首四日内销售额已超过 4000 万美元。Infinex 是一个非托管平台,提供轻松访问链上协议和 dApp。 Infinex Core 的…

Day69补 前后端分离思想

ajax前后端分离 前后端分离处理:前端------(数据)-----服务端----(数据)-----前端-----动态改变页面的内容 1.json 1、JSON:由于JSON易读以及纯文本格式的特性,可以非常容易地与其他程序进行沟通…

引领长期投资新篇章:价值增长与财务安全的双重保障

随着全球金融市场的不断演变,长期投资策略因其稳健性和对价值增长的显著推动作用而日益受到投资者的重视。在这一背景下,Zeal Digital Shares(ZDS)项目以其创新的数字股票产品,为全球投资者提供了一个全新的长期投资平…