当前位置: 首页 > news >正文

Pytorch 模型保存与加载

模型保存

pytorch模型保存一般使用torch.save(),保存方法一般分为两种,分别为保存模型状态字典和模型本身两种

保存状态字典

若要保存状态字典,需要将save的两个参数设置为model.state_dict()和模型保存的路径和名称

import numpy as np
import torch
from torch import set_grad_enableddevice = torch.device('mps' if torch.backends.mps.is_available() else 'cpu')class SimpleNet(torch.nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc1 = torch.nn.Linear(10, 1)def forward(self, x):return self.fc1(x)my_model = SimpleNet()
torch.save(my_model.state_dict(), 'my_model.pt')
保存模型

若要保存模型本身,需要将save的两个参数设置为model和模型保存的路径和名称

import numpy as np
import torch
from torch import set_grad_enableddevice = torch.device('mps' if torch.backends.mps.is_available() else 'cpu')class SimpleNet(torch.nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc1 = torch.nn.Linear(10, 1)def forward(self, x):return self.fc1(x)my_model = SimpleNet()
torch.save(my_model, 'my_model1.pt')

关于保存模型状态字典和模型本身的区别将在模型加载处分析

模型加载

模型加载会使用函数torch.load()

这里就会体现出保存模型状态字典和模型本身的区别,保存模型本身实际会占用更多的字节数,也就是空间,原因是若只保存状态字典,则只会保存模型每层的权重和偏置,若是保存模型,则会在保存权重和偏置的基础上额外保存模型的架构,这样的优势在于,加载模型状态字典的时候会需要先实例化相同的模型架构,然后使用load_state_dict(torch.load(...))去获取模型参数,而加载整个模型则只需要torch.load(...)就可以

加载状态字典
import numpy as np
import torch
from torch import set_grad_enableddevice = torch.device('mps' if torch.backends.mps.is_available() else 'cpu')class SimpleNet(torch.nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc1 = torch.nn.Linear(10, 1)def forward(self, x):return self.fc1(x)my_model = SimpleNet()
my_model.load_state_dict(torch.load('my_model.pt'))
print(my_model)
# SimpleNet(
#   (fc1): Linear(in_features=10, out_features=1, bias=True)
# )
加载完整模型
import numpy as np
import torch
from torch import set_grad_enableddevice = torch.device('mps' if torch.backends.mps.is_available() else 'cpu')class SimpleNet(torch.nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc1 = torch.nn.Linear(10, 1)def forward(self, x):return self.fc1(x)my_model = torch.load('my_model1.pt')
print(my_model)
# SimpleNet(
#   (fc1): Linear(in_features=10, out_features=1, bias=True)
# )

注意,这两种加载方法分别对应了加载状态字典和加载模型,不可混用,如直接使用torch.load()加载模型字典,则只会读取到参数;若使用加载状态字典的方式加载完整模型则会报错

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • java中拷贝文件数据到U盘
  • Excel的使用总结1
  • 开始尝试从0写一个项目--后端(四)
  • 图形几何算法 -- 判断两条线段是否相交
  • 线性层与MLP层
  • Git 多人协作
  • Linux --- 文件系统
  • 后来你发现 根密钥 的存储并不安全,于是你认识了PUF。
  • 怎么解决小程序的异步请求问题
  • WordPress简约响应式个人博客Kratos主题
  • Redis中事务与乐观锁
  • 继承与构造函数与析构函数
  • 基于Java+SpringBoot+Vue的师生共评的作业管理系统设计与实现
  • 白酒与旅行日记:探索世界,品味美酒
  • 河南萌新2024第六场
  • @angular/forms 源码解析之双向绑定
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • chrome扩展demo1-小时钟
  • conda常用的命令
  • leetcode386. Lexicographical Numbers
  • nodejs调试方法
  • Python中eval与exec的使用及区别
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • unity如何实现一个固定宽度的orthagraphic相机
  • 创建一个Struts2项目maven 方式
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 开源地图数据可视化库——mapnik
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 聊聊directory traversal attack
  • 嵌入式文件系统
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • (2.2w字)前端单元测试之Jest详解篇
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (SpringBoot)第二章:Spring创建和使用
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (初研) Sentence-embedding fine-tune notebook
  • (二)WCF的Binding模型
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (转) 深度模型优化性能 调参
  • (转)为C# Windows服务添加安装程序
  • *** 2003
  • ****三次握手和四次挥手
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET NPOI导出Excel详解
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 项目中发送电子邮件异步处理和错误机制的解决方案
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .net程序集学习心得