(已解决)torch.load的时候发生错误ModuleNotFoundError: No module named ‘models‘

文章目录

      • 背景
      • 原因
      • 解决方案

背景

很简单,我网上下载了一个模型文件,现在想读取这个模型,然后将这个模型用在我的数据集上。

import torch
model=torch.load("model.pyt")#这步直接报错了。
output=model(mydata)

报错了。

ModuleNotFoundError: No module named ‘models‘

原因

我现在项目的目录结构和model.pyt这个模型文件当初在保存torch.save的时候的项目目录不一致,导致导入load模型的时候有一些关键东西缺失。

啥意思呢?假设当初模型保存torch.save的文件长成这样。

import torch
from A import Model
model=Model()
torch.save(model,"model.pyt")

保存在model.pyt中的东西,大家都知道,有模型权重,模型结构等。但是大家想过这样一个问题没有,如果模型里面的一个函数引用了另外一个用户自定义的函数,在torch.save之后,这个自定义函数会被保存吗?答案是不会被保存。也就是说,对于上面的代码,

import torch
from A import Model

torch这个库不会被保存,A这个文件也不会被保存。那么自然,等我们torch.load的时候,A就会找不到,torch可以找到,因为我们本地肯定会导入torch

为啥Pytorch设计的时候不保存这些呢?很简单,就怕模型里面的一个函数引用了另外一个用户自定义的函数,然后这个自定义函数又引用另外一个,然后没玩没了。更怕的是,自定义函数里面还导入了一些非常大的数据,如果全部保存起来,model.pyt得多么大呀!

解决方案

一种方法当然就是把他的原项目下载下来,这包括了他的代码文件,而不能像我一样只下载模型文件。

其实,在load的时候Pytorch已经提示我们了,虽然只是一个warning。

FutureWarning: You are using torch.load with weights_only=False (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for weights_only will be flipped to True. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via torch.serialization.add_safe_globals. We recommend you start setting weights_only=True for any use case where you don’t have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.

官方不建议torch.save(model,"model.pyt")这种保存方式,比较推荐torch.save(model.state_dict(),"model.pyt"),也就是只保存模型权重,其他的一律不保存。这样,强制了你去下载代码文件,不然下面第一行代码Model()会报错。

model = Model()
state_dict = torch.load('model.pyt')
model.load_state_dict(state_dict)#载入训练好的权重。

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

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

相关文章

高级算法设计与分析 学习笔记9 跳表

单链表的样子我们很熟悉了: 怎么加快查找?: 查找的具体方法: 超过了就回头下去。 这条“快速路”最好是几个节点呢?: 假如我们弄好多层跳表呢?: 给弄成2叉树了! 如何插入…

堆的数组实现

目录 一、堆 二叉树的顺序结构 堆的概念及结构 1.概念 2.堆的分类 (1)大堆 (2)小堆 二、利用数组(顺序结构)实现堆的过程 1.利用数组实现堆的思路 2.堆是用数组实现的,在数组中通过双亲找自己左右孩子、通过左右孩子找自己双亲的思路 2.1.思路 2.2.孩子与…

【YashanDB知识库】YMP迁移oracle不兼容给用户授权高级包

本文转自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7441382.html?templateId1718516 【标题】YMP迁移oracle不兼容给用户授权高级包 【关键字】oracle迁移,高级包授权 【问题描述】迁移评估任务中,oracle迁移YashanDB…

FOC电机驱动开发踩坑记录

关键技术 SVPWM电机磁场控制电流采样park变换和Clark变换滑膜观测器(无感FOC) SVPWM电机磁场控制 SVPWM主要思想是通过精确的对UVW三相电流的分时控制,来控制转子的合成力矩,达到目标方向,常用的是6分区的设计&…

RabbitMQ 高级特性——重试机制

文章目录 前言重试机制配置文件设置生命交换机、队列和绑定关系生产者发送消息消费消息 前言 前面我们学习了 RabbitMQ 保证消息传递可靠性的机制——消息确认、持久化和发送发确认,那么对于消息确认和发送方确认,如果接收方没有收到消息,那…

C++类和对象——第二关

目录 类的默认成员函数: (一)构造函数 (二)析构函数 (三)拷贝构造函数 类的默认成员函数: 类里面有6个特殊的成员函数分别包揽不同的功能; (一)构造函数…

极狐GitLab 17.4 升级指南

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab https://dl.gitlab.cn/6y2wxugm 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 本文分享极狐GitLab 17.4 升级…

老人跌倒扶不扶?涪城三职工给出响亮答案

一、关键时刻的选择 于绵阳市三江湖湿地公园,平凡午后,三名环卫人员刘后刚、严荣礼及杨树坤正紧张作业。突闻呼救声,一位老人在石阶上跌倒需援手。在紧急关头,他们果断抛却工具,疾速赶至老人身边。此举不仅展现了他们…

MySQL数据库进阶知识(四)《视图、存储过程、触发器》

学习目标: 掌握数据库视图基础知识 掌握数据库存储过程原理 掌握数据库触发器相关知识 学习内容: 一. 视图 介绍 视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询…

JPEG图像的DCT(Discrete Cosine Transform)变换公式代码详解

引 言 网络上图像在传输过程中为节省内存空间主要采用jpeg格式。jpeg图属于有损压缩图像的一种。在图像篡改检测过程中,可以利用jpeg图像的单双压缩伪影的不同而判别图像为伪造图并可以定位伪造区域。RGB图像变成jpeg图像过程中涉及从RGB图变成YCbCr图像&#xff0c…

FreeRTOS(四)FreeRTOS列表与列表项

目录 列表 列表项 迷你列表项 列表和列表项的关系 列表相关API函数 列表初始化 列表项初始化 列表项插入 列表项末尾插入 列表项删除 列表遍历 在 FreeRTOS 中,列表(List)和列表项(ListItem)是核心数据结构&…

Centos7系统根分区空间小home空间大如何增加分区

Centos7 默认安装,区划默认划分,用着怎么感觉有问题,根分区太小50G,而home分区太大。 如果处理,能扩大根分区呢?如果是新安装的,可以先删除home,然后再扩容 根分区。最后使其生效。…

计算机视觉硬件整理(四):相机与镜头参数介绍

文章目录 前言一、工业相机常用分类二、工业相机的基本参数三、工业相机的接口四、工业镜头的参数五、工业镜头的选择要点 前言 随着科技的飞速发展,工业自动化和智能制造在当今社会扮演着越来越重要的角色。在这个背景下,工业相机作为一种关键的视觉检…

Qualitor processVariavel.php 未授权命令注入漏洞复现(CVE-2023-47253)

0x01 漏洞概述 Qualitor 8.20及之前版本存在命令注入漏洞,远程攻击者可利用该漏洞通过PHP代码执行任意代码。 0x02 复现环境 FOFA:app"Qualitor-Web" 0x03 漏洞复现 PoC GET /html/ad/adpesquisasql/request/processVariavel.php?gridValoresPopHi…

【azure-openai】批量翻译demo【python】【gradio】

要求:拥有azure-openai-api,上传文件为csv格式,utf-8编码。 注意:如果出现乱码,重新运行,换种方式打开,有时候wps会自动改编码。 实现功能:选择语言,使用gpt4omini&…

使用docker形式部署prometheus+alertmanager+钉钉告警

一、拉取所需要的镜像 docker pull prom/node-exporter docker pull grafana/grafana docker pull prom/prometheus docker pull prom/alertmanager 其中 prom/node-exporter:用于收集主机系统信息和指标的 grafana/grafana:是一个用于可视化和分…

mac 上配置Jmeter代理进行web脚本录制过程容易踩坑的点

macOS 配置 Jmeter代理录制web脚本&容易踩坑的点 mac配置下载:前景提要:Jmeter中具体操作容易踩坑的点1、进入浏览器后,显示访问连接不安全。2、证书失效需要重新生成3、重新生成证书的方式4、没有生成新的证书5、jmeter安装路径找不到 m…

硬件设计很简单?合宙低功耗4G模组Air780E—开机启动及外围电路设计

Air780E是合宙低功耗4G-Cat.1模组经典型号之一,上期我们解答了大家关心的系列问题,并讲解了选型的注意要点。 有朋友问:能不能讲些硬件设计相关的内容? 模组的上电开机,是硬件设计调试的第一步。 本期特别分享——Ai…

MySQL数据库进阶知识(五)《锁》

学习目标: 一周掌握数据库锁相关知识 学习内容: 一. 概述 介绍 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共…

将本地文件上传至虚拟机

1、查看虚拟机ip地址 ip addr 2、xshell连接上虚拟机 连接root连接不上的解决办法更改配置文件vim /etc/ssh/sshd_config 重启(sudo service ssh restart)并查看是否开启ssh服务(sudo ps -e | grep ssh) 即可连接成功 3、复制文…