Pytorch读写张量文件

目录

一、加载和保存张量

1、直接读写张量

2、读写张量列表

3、读写张量字典

二、加载和保存模型参数


一、加载和保存张量

1、直接读写张量

       对于单个张量,我们可以直接调用`load`和`save`函数分别读写它们。这两个函数都要求我们提供一个名称,`save`要求将要保存的变量作为输入。

import torch
from torch import nn
from torch.nn import functional as Fx = torch.arange(4)
torch.save(x, 'x-file')

       我们现在可以将存储在文件中的数据读回内存。

x2 = torch.load('x-file')
print(x2)
tensor([0, 1, 2, 3])

2、读写张量列表

       我们可以存储一个张量列表,然后把它们读回内存。

y = torch.zeros(4)
torch.save([x, y], 'x-files')
print(torch.load('x-files'))
# or
x2, y2 = torch.load('x-files')
print(x2, y2)
[tensor([0, 1, 2, 3]), tensor([0., 0., 0., 0.])]
tensor([0, 1, 2, 3]) tensor([0., 0., 0., 0.])

3、读写张量字典

       我们甚至可以写入或读取从字符串映射到张量的字典。当我们要读取或写入模型中的所有权重时,这很方便。

mydict = {'x': x, 'y': y}
torch.save(mydict, 'mydict')
mydict2 = torch.load('mydict')
print(mydict2)
{'x': tensor([0, 1, 2, 3]), 'y': tensor([0., 0., 0., 0.])}

二、加载和保存模型参数

       保存单个权重向量(或其他张量)确实有用,但是如果我们想保存整个模型,并在以后加载它们,单独保存每个向量则会变得很麻烦。毕竟,我们可能有数百个参数散布在各处。因此,深度学习框架提供了内置函数来保存和加载整个网络。需要注意的一个重要细节是,这将保存模型的参数而不是保存整个模型。例如,如果我们有一个3层多层感知机,我们需要单独指定架构。因为模型本身可以包含任意代码,所以模型本身难以序列化。因此,为了恢复模型,我们需要用代码生成架构,然后从磁盘加载参数。下面以多层感知机为例。

class MLP(nn.Module):def __init__(self):super().__init__()self.hidden = nn.Linear(20, 256)self.output = nn.Linear(256, 10)def forward(self, x):return self.output(F.relu(self.hidden(x)))net = MLP()
X = torch.randn(size=(2, 20))
Y = net(X)

       注意:这里不能用 net[0].state_dict() 来访问 MLP 隐藏层的参数,因为 net 是 MLP 类的一个实例,而不是一个包含多个子模块的 nn.Sequential 容器。因此,无法使用索引运算符 [] 来访问 net 对象的子模块。

       如果想获取 hidden 层的状态字典,你可以使用 state_dict() 方法直接在 net 对象上调用,如下所示:

print(net.hidden.state_dict())

同样也适用于ouput层:

print(net.output.state_dict())

请注意,这里使用的是 net.hidden 和 net.ouput,而不是 net[0]。

       接下来,我们将模型的参数存储在一个叫做“mlp.params”的文件中,.state_dict()的用法可以参考文章Pytorch神经网络的参数管理。

torch.save(net.state_dict(), 'mlp.params')

       为了恢复模型,我们实例化了原始多层感知机模型的一个备份。这里我们不需要随机初始化模型参数,而是直接读取文件中存储的参数。

clone = MLP()
clone.load_state_dict(torch.load('mlp.params'))
print(clone.eval())
MLP((hidden): Linear(in_features=20, out_features=256, bias=True)(output): Linear(in_features=256, out_features=10, bias=True)
)

       由于两个实例具有相同的模型参数,在输入相同的`X`时,两个实例的计算结果应该相同。让我们来验证一下。

Y_clone = clone(X)
Y_clone == Y
tensor([[True, True, True, True, True, True, True, True, True, True],[True, True, True, True, True, True, True, True, True, True]])

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

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

相关文章

C++11 shared_ptr智能指针

转载自c语言中文网 在实际的 C 开发中,我们经常会遇到诸如程序运行中突然崩溃、程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的。比如: 有些内存资源已经被释放,但指向它的指针并没有改…

FO with Prefix Hashing KEM Generalizations

参考文献: [Has88] Hastad J. Solving simultaneous modular equations of low degree[J]. siam Journal on Computing, 1988, 17(2): 336-341.[BBM00] Bellare M, Boldyreva A, Micali S. Public-key encryption in a multi-user setting: Security proofs and im…

2023 英特尔On技术创新大会直播 | AI 融合发展之旅

前言 2023 年的英特尔 On 技术创新大会中国站,主要聚焦最新一代增强 AI 能力的计算平台,深度讲解如何支持开放、多架构的软件方案,以赋能人工智能并推动其持续发展。 大会的目标之一是优化系统并赋能开发者,特别注重芯片增强技术…

国产划片机品牌众多,如何选择优质的供应商?

在半导体行业的发展浪潮中,划片机作为关键设备之一,其性能和质量对于生产过程的高效性和产品的质量具有至关重要的影响。近年来,国产划片机的品牌数量不断增多,为半导体行业提供了更多的选择。然而,如何从众多的品牌中…

解决docker拉取镜像错误 missing signature key 问题

核心原因:本地docker版本过低,需要: 1. 彻底卸载本地docker文件 2. 配置yum 镜像文件, 重新安装最新版本 相信教程可参考: CentOS安装Docker(超详细)_centos 安装docker-CSDN博客

七大主流的HttpClient程序比较

HttpClient HttpClient,是一款强大的支持HTTP协议的客户端编程工具包。主要功能在于提供一种有效、最新且功能丰富的方式来执行HTTP请求和响应。HttpClient与浏览器有着本质的区别,它并不会缓存内容,也不会处理嵌入在HTML页面中的代码或是错误…

【Python炫酷系列】一闪一闪亮星星,漫天都是小星星(完整代码)

文章目录 环境需求完整代码详细分析系列文章环境需求 python3.11.4及以上版本PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want595.…

uart和usart的区别

UART 通用异步收发器,一般来说,在单片机上,名为UART的接口只能用于异步串行通信。 USART 名为USART的接口既可用于同步串行通信,也可用于异步串行通信。

Python 爬虫之简单的爬虫(四)

爬取动态网页(下) 文章目录 爬取动态网页(下)前言一、大致内容二、基本思路三、代码编写1.引入库2.加载网页数据3.获取并保存4.保存文档 总结 前言 上篇主要讲了如何去爬取数据,这篇来讲一下如何在获取的同时将数据整…

每个开发人员都应该知道的六个生成式 AI 框架和工具

在快速发展的技术环境中,生成式人工智能是一股革命性的力量,它改变了开发人员处理复杂问题和创新的方式。本文深入探讨了生成式 AI 的世界,揭示了对每个开发人员都至关重要的框架和工具。 1. LangChain LangChain 由 Harrison Chase 开发并于…

Ansible自动化运维以及模块使用

ansible的作用: 远程操作主机功能 自动化运维(playbook剧本基于yaml格式书写) ansible是基于python开发的配置管理和应用部署工具。在自动化运维中,现在是异军突起 ansible能够批量配置、部署、管理上千台主机。类似于Xshell的一键输入工具。不需要每…

Linux 命令大全备忘录

碰巧一些 Linux 终端命令很难回忆起来,将它们作为备忘单保存在您的计算机或纸张上是一种很好的做法。此列表并不详尽,但它包括最常用的命令。请随时在下面的评论中添加您最常用的命令并分享此列表✌️。 用户 Id – 有关用户(uid、gid 和组…

通过层进行高效学习:探索深度神经网络中的层次稀疏表示

一、介绍 深度学习中的层次稀疏表示是人工智能领域日益重要的研究领域。本文将探讨分层稀疏表示的概念、它们在深度学习中的意义、应用、挑战和未来方向。 最大限度地提高人工智能的效率和性能:深度学习系统中分层稀疏表示的力量。 二、理解层次稀疏表示 分层稀疏表…

JDK各个版本特性讲解-JDK19特性

JDK各个版本特性讲解-JDK19特性 一、JAVA19概述二、新特性介绍1. 记录模式(预览版本)2.Linux/RISC-V 移植3.外部函数和内存 API (预览版)4.虚拟线程(预览版)5.Vector API (第四次孵化)6.Switch 模式匹配(第三预览版&am…

从C代码制作chm开发文档【doxygen + graphviz+winChm】

需要的工具: 1. doxygen 最新版本 2. graphviz 最新版本 3. winChm破解版本 1. 最后制作的效果 2. 生成HTML文档 生成hmtl文档是勾选如下2项,为生成chm准备: 需要选择如下2项: generate HTMLHELP 生…

C语言数据结构-排序

文章目录 1 排序的概念及运用1.1 排序的概念1.2 排序的应用 2 插入排序2.1 直接插入排序2.2 希尔排序2.3 直接排序和希尔排序对比 3 选择排序3.1 堆排序3.2 直接选择排序 4 交换排序4.1 冒泡排序4.2 快速排序4.2.1 挖坑法14.2.2 挖坑法24.2.3 挖坑法3 5 并归排序6 十万级别数据…

基于RBAC的k8s集群权限管控案例

在日常的kubernetes集群维护过程中,常常涉及多团队协作,不同的团队有不同的操作和权限需求。比如,运维团队需要有node的所有操作权限,以便对集群进行节点的扩缩容等日常维护工作,但资产运营团队通常只需要node的查看权…

深入探索Git的高级技巧与神奇操作(分支,高效合并)

欢迎来到我的博客,代码的世界里,每一行都是一个故事 深入探索Git的高级技巧与神奇操作 前言强制推送的妙用1. 什么是强制推送?2. 为什么需要使用强制推送?3. 强制推送的风险与注意事项4. 如何正确、安全地执行强制推送步骤&#x…

vCenter HA拆分和部署

原创作者:运维工程师 谢晋 vCenter HA拆分和部署 拆分vCenter HA部署vCenter HA 拆分vCenter HA 客户vCenter HA内一台虚拟机出现故障无法连接,报错如下: 点击移除集群报错如下: 查找官方KB,按照官方KB进行移除…

PyCharm关闭项目很慢

我的版本: PyCharm 2023.2.5 (Professional Edition) 问题: 关闭项目的时候显示一直在关闭项目 (单次解决:任务管理器里面杀掉PyCharm) 解决方案: 在PyCharm中按下快捷键 CtrlShiftA。 输入Registry或…