pytorch加载模型遇到问题ModuleNotFoundError: No module named ‘models‘

YoloV5部署时遇到的一些问题,ModuleNotFoundError: No module named ‘models‘,解决方法 我的情况是模型训练完了,精度还可以,但是需要将YoloV5中detect模块部署到软件中把YoloV5的Models和Utils都移了过去,放在了软件专门放依赖的libs文件夹中,并且修改完全部的引用路径,但是还是报错。 阅读详情
AI摘要

本文介绍了PyTorch中模型的保存和加载的两种方法,包括只保存state_dict和保存整个模型。在训练中断时,可以保存模型和优化器的状态以便后续继续训练。当使用第二种方法保存模型时,由于pickle模块的特性可能导致在不同环境中加载失败,因为模型的类路径没有被保存。为了解决这个问题,可以尝试将模型转换为torchscript或者使用第一种方法保存state_dict。这两种方法都可以避免因依赖特定目录结构而导致的加载问题。

模型的保存和加载

Pytorch保存和加载模型主要有两种方式:

1. 只保存模型状态state_dict

保存:
torch.save(model.state_dict(),"model.pth")
加载:

model.load_state_dict(torch.load("model.pth"))
model.eval()

该方法仅需要保存训练后的模型学习参数。使用torch.save()函数保存模型的state_dict将提供最大的灵活性,以便以后恢复模型,推荐使用此方法来保存模型。常见的PyTorch文件格式是使用.pt或.pth文件扩展名保存模型。

注意:

  • a. 必须调用model.eval(),以便在推理之前将dropout和batch层设置为评估模式。如果不这样做,将会产生不一致的推理结果。
  • b. 在使用load_state_dict()函数加载模型时使用字典对象,而不是保存的路径。这意味着,在将保存的state_dict传递给
    load_state_dict()函数之前,必须使用torch.load()对其进行反序列化,无法使用model.load_state_dict(PATH)

* 训练中断时

有时候可能由于其他原因模型训练过程中被中断了,这时候就需要保存模型的状态,从终止状态进行训练。

定义模型的状态并保存:

state={'model':model.state_dict(),'optimizer':optimizer.state_dict(),'epoch':epoch}
torch.save(state,path)

加载继续训练:

checkpoint=torch.load(path)
model.load_state_dict(checkpoint('model'))
optimizer.load_state_dict(checkpoint['optimizer'])
epoch=checkpoint['epoch']

2. 保存整个模型并加载(包含参数和网络)

保存:
torch.save(model,"whole_model.pth")
加载:

model=torch.load("whole_model.pth")
model.eval()

这种保存/加载过程使用最直观的语法,并且涉及最少的代码。但以这种方式保存模型将使用Python的pickle模块保存整个模块。这种方法的缺点使序列化的数据保存到特定的类,并且在保存模型时使用确切的目录结构。这样做的原因是因为pickle不会保存模型类本身,而是将其保存到包含类的文件的路径,该路径在加载时使用。因此,在其他项目中使用或重构后,代码可能会以各种方式中断。

问题

File "load_model.py", line 9, in load_model
    ckpt = torch.load(weights, map_location=device)
File "/usr/local/python378/lib/python3.7/site-packages/torch/serialization.py", line 594, in load
    return _load(opened_zipfile, map_location, pickle_module, **pickle_load_args)
File "/usr/local/python378/lib/python3.7/site-packages/torch/serialization.py", line 853, in _load
    result = unpickler.load()
ModuleNotFoundError: No module named 'models'

原因

训练时采用第二种方式保存整个模型以便于在其他地方调用测试,而该方式保存模型会使序列化的数据保存到特定的类,并且依赖该类文件的特定的目录结构,该路径在加载时使用。因此,在上面项目中调用其他地方保存的模型时由于缺少models路径而找不到models模块。

使用Netron打开保存的整个网络:
保存整个网络
上图截取的一部分显示网络层的type是带有目录结构models.common的类型,如果加载时目录变了就会导致无法正常导入。

解决

参考github相关解答

1. 尝试转换模型

def convert_model(model, input=torch.tensor(torch.rand(size=(1,3,112,112)))):
        model = torch.jit.trace(self.model, input)
        torch.jit.save(model,'/home/projects/models/model.tjm')

然后加载模型:

# load the model 
self.model = torch.jit.load('/home/projects/models/model.tjm')

2. 使用第一种方法保存模型状态

self.model = checkpoint['model'].module
# create the new checkpoint based on what you need 
torch.save({'state_dict' : self.model.state_dict(), 'use_se':True},
            '/home/projects/models/best_checkpoint.pth')
YOLOV7-detect.py门开关计时脚本 【代码】YOLOV7-detect.py门开关计时脚本。 阅读详情

相关推荐

ModuleNotFoundError: 未找到名为“No_module_named“的模块的通俗解释和解决方法

模块未安装:如果你尝试导入的模块是第三方模块或自定义模块,但你没有将其安装到你的Python环境中,那么就会出现ModuleNotFoundError。你可以使用pip工具来安装第三方模块,或者确保你的自定义模块位于正确的路径下。模块路径问题:Python解释器在导入模块时会搜索一系列目录,这些目录包括Python标准库和你自己编写的模块所在的目录。通过理解ModuleNotFoundError的常见原因,并根据具体情况采取相应的解决方法,你应该能够解决这个错误并成功导入所需的模块。

CddaDebugging的博客 3万+

ModuleNotFoundError: No module named ‘models‘ 的解决方法

ModuleNotFoundError: No module named 'models'

tpz789的博客 4万+

王爽《汇编语言》课程设计2(不涉及软盘版本)

assume cs:code,ds:data,ss:stack stack segment db 128 dup (0) stack ends data segment db 256 dup (0) data ends code segment start: mov ax,stack mov ss,ax mov sp,128 ...

weixin_41944412的博客 1178

ModuleNotFoundError: No module named ‘models‘解决torch.load错误[yolo训练],已解决。

网上检索一遍,整理答案但都没解决,末尾已解决答案一:当使用torch.load时,报错No module named 'models'在网上查了很多资料说目录结构得和保存时一模一样,话虽如此,但一直没理解要如何一样因为我是用detect.py调用yolov5的best.pt模型,该模型被自动保存在runs/train/exp/weights/下,但即便改成了这样,还是报同样的错最后调试发现,No module named 'models'报错说没有models,确实是因为没有才报错的。

weixin_61623830的博客 8951

VQGAN实战:从文本到高清图像的保姆级生成教程(含PyTorch代码)

本文详细介绍了VQGAN(Vector Quantized Generative Adversarial Network)在文本到高清图像生成中的应用,提供了从环境配置到模型加载、文本编码及图像生成的完整PyTorch代码教程。通过实战案例和高级调优技巧,帮助开发者快速掌握VQGAN的核心技术,实现百万像素级的高清图像生成。

u8v9w0x1y的博客 649

STM32CubeMX+Keil5实战:手把手教你用STM32F103C8T6开发扫地机器人(附完整代码)

本文详细介绍了如何使用STM32F103C8T6开发智能扫地机器人,从STM32CubeMX配置到Keil5代码实现的全过程。涵盖硬件选型、时钟树配置、GPIO外设设置、电机驱动、超声波测距及自动避障算法等核心内容,并提供完整代码示例,助力开发者快速掌握智能硬件开发技巧。

weixin_30329623的博客 81

pytorch加载模型torch.load() 遇到问题ModuleNotFoundError: No module named ‘models‘

写load的这个文件要放到具有yolov5工程的文件夹里运行,因为它会寻找原生yolo5工程下的models文件夹,里面还会有yolo.py等文件存在,这就是这个找不到"models"的由来。此外,如果是自己手搓的简单网络pt权重文件话,就不会出现这种依赖工程的问题,打印是输出一堆张量。得到报错:ModuleNotFoundError: No module named 'models'。:添加寻找路径,让代码可以基于yolo系列的工程。

weixin_43990429的博客 2908

【电驱动】永磁同步电机工作原理及分类

永磁同步电机工作原理及分类

星Yeah 的博客 7323

【Pytorch】成功解决ModuleNotFoundError: No module named ‘timm‘

🔥【Pytorch】告别ModuleNotFoundError,轻松驾驭timm库!🚀 你是否曾因`ModuleNotFoundError: No module named 'timm'`而头疼不已?别担心,本文带你轻松解决这一难题!🌟 首先,我们深入了解timm库——一个高效易用的Pytorch图像模型库。📚接着,为你详细解析如何正确安装timm库,并贴心提供安装过程中可能遇到的疑难杂症及解决方案。💡 学会安装后,更有如何使用timm库加速项目的小技巧,让你的项目突飞猛进!🚀最后,带你探

创作高质量博文,分享知识,共同进步! 1万+

从LLM到Agent:智能体核心范式与认知架构全景解读

摘要: Agent技术正成为AI领域的新焦点,其核心在于通过外部认知基础设施(如记忆、工具、协议等)将大语言模型(LLM)从“生成文本”升级为“执行任务”的智能体。2026年的研究显示,Agent能力提升的关键已从模型本身转向外部化架构,如Harness工程(执行框架)和认知解耦(如ORCA框架)。当前Agent框架生态呈现多元化竞争(如LangGraph、AutoGen、CrewAI),但可观测性与治理仍是薄弱环节。未来竞争壁垒将取决于外部基础设施的完善程度,而非单纯模型性能。

2601_95807009的博客 51

web渗透学习手册

依据多年的渗透测试项目经验及个人理解,对漏洞分类

渗透之路,攻防之间皆学问 1万+

No module named ‘torchvision.models.utils‘

目录- 问题描述- 原因探寻- 解决方法- 方法一:- 方法二:- 方法三 - 问题描述 笔者在使用 pytorch=1.10.0, torchvision=0.11.1 的环境运行代码时,运行到语句 from torchvision.models.utils import load_state_dict_from_url 时会出现以下报错: >>> from torchvision.models.utils import load_state_dict_from_url Traceba

yyywxk的博客 3万+

爬虫实战:拆解WASM加密参数,破局2026电商动态接口反爬(实测某头部电商可用)

sign和wasm_token,而且每次请求这两个参数都在动态变化。用常规的参数拼接、MD5加密尝试还原,结果全是403;反编译前端JS,发现核心加密逻辑被打包成了.wasm,把关键参数加密、签名逻辑藏在二进制模块里,让爬虫无法直接逆向JS拿到加密规则。前后折腾了5天,从WASM文件解析、JS与WASM交互逻辑拆解,到本地还原加密参数、实战验证,踩了无数坑(比如WASM版本不兼容、内存数据读取失败、加密依赖环境缺失),最终成功还原了加密流程,稳定爬取商品详情、价格、销量等核心数据,连续运行72小时无封禁。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1913

[yoloV5项目 - error] torch.load() 出现 No module named ‘models‘

源码路径:https://github.com/ultralytics/yolov5 yoloV5 官方项目爬坑 最近整理了下我之前github上传的一个人脸识别项目,然后把一些组件稍微整理了一下。 还有就是最近在玩一个手势检测的项目,也用到了yoloV5的源码。但在加载模型torch.load()的时候就出现了ModuleNotFoundError: No module named 'models'这个问题。 也有粉丝跟我反馈说出现了这个问题。如下图。(因为之前上传的时候,我是在pycharm设置了y.

iamfishman 2万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

解决ModuleNotFoundError: No module named ‘models‘

当使用训练好的模型进行: torch.load('./x.pt') 发生以上报错。 原因可能是该模型仅保存了参数而非整体模型结构(可能原因,不确定) 因此需要将原始定义模型的py文件移植到同一目录下即可解决 ...

Sensente的博客 6519

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ModuleNotFoundError: No module named ‘models‘解决torch.load问题【天坑】

我训练的用torch.save(model, checkpoint_path)保存的模型文件,那么会把对应的网络结构路径序列化到模型内部, 而一旦更改了网络结构(model/slim)路径,再torch.load()时会报错.将调用 to’r’ch.load()方法的, xxx.py文件 与 模型的网络结构(slim)放在同一目录下.当使用torch.load时,报错No module named ‘models’在test.jw.py中调用torch.load()方法。解决方式二:torch。

m0_37591905的博客 4539

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

关于导包的错误 ModuleNotFoundError: No module named ‘models‘

关于导包的错误 ModuleNotFoundError: No module named 'models‘

zhang2362167998的博客 1711

解决 “ModuleNotFoundError: No module named ‘models‘” 的终极指南:从原理到实战

要彻底理解模块导入错误,需要深入Python的模块搜索机制。当执行时,Python会遍历sys.path列表中的所有路径,寻找models.py或models目录。理解这个机制是解决问题的关键。:在Jupyter Notebook中导入模块失败。

菜狗小测试 4770

【error】ModuleNotFoundError: No module named ‘model‘

【error】ModuleNotFoundError: No module named ‘model‘

w.here的优快云 1702

ModuleNotFoundError: No module named ‘model‘

当确定你的项目目录下有model时,就是你的运行目录存在问题 比如这个项目,os.chir是我的最后加进去的 刚开始我用终端在tasks目录下跑的没问题, 当我切换到一个平台,这个平台默认是在服务器我的文件夹下运行,所以我首先切换到项目目录下运行,结果还是报ModuleNotFoundError: No module named ‘model’, 最后我一想我在终端tasks下跑的,所以切换到tasks目录下,刚开始我把os.chir放到sys.path代码后面去了,结果还是报这个问题,最后发现它的代码有

weixin_44549562的博客 5349

No module named ‘models‘ 解决方法(亲测)

No module named ‘models‘ 解决方法(亲测)

OnlyHeart_的博客 1万+

import_module ModuleNotFoundError: No module named ‘model‘

使用importlib.import_module方法import一个pytorch model时出现如下报错 desktop@desktop-pc:~/workspace/test$ ls main_test.py mymodel.pt mymodel.py desktop@desktop-pc:~/workspace/test$ python main_test.py Traceback (most recent call last): File "main_test.py", line 1

AK6512的博客 5448

关于result = unpickler.load()ModuleNotFoundError: No module named ‘models‘解决

如果保存模型时使用 torch.save(model, path) 在加载时使用 model = torch.load(path) 可能会出现如下错误,通常这种错误就是把一个项目保存的权重文件用在另一个项目中进行加载, result = unpickler.load() ModuleNotFoundError: No module named 'models' 我尝试用官方示例代码把模型转为torch script来解决 scripted_module = torch.jit.scri

hpccph15的博客 4310

【Bug-ModuleNotFoundError: No module named ‘models‘】

Bug-ModuleNotFoundError: No module named 'models'

qq_45832651的博客 1766

ModuleNotFoundError:No module named ‘models‘---python导入自定义的模块库

问题描述:ModuleNotFoundError:No module named ‘models’ 或者 没有’utility’ 在该运行程序文件目录下有models和utiliy,但是无法加载进来 解决方法:加入加载自定义模块前将其路径先导入即可 如: import sys sys.path.append(r"paddleslim/demo") sys.path.append(r"paddleslim/demo/models") #在这之前导入模块路径 import models from ut.

天天放羊的博客 8096
上一篇: Ubuntu在docker中安装TensorRT7
下一篇: Leetcode #318: 最大单词长度乘积
wq_0708
博客等级 码龄6年 2万+粉丝 95原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值