You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch加载自身导出的.h5模型提示ModuleNotFoundError如何解决?

报错原因

你遇到的ModuleNotFoundError: No module named 'model'报错和导入缺失直接相关,核心是PyTorch的序列化逻辑导致的:

  • torch.save直接保存完整模型对象时,默认使用pickle机制,不会存储模型类NSNetModel的完整定义,只会存储该类在你导出环境中的引用路径(也就是你导出时NSNetModel是从model模块导入的)
  • 加载模型的环境中,没有对应路径的model模块,也没有提前导入NSNetModel类,pickle反序列化时找不到对应的类定义就会抛出这个错误

另外补充说明:你使用.h5作为模型文件后缀不影响加载逻辑,只是该后缀通常用于HDF5格式/Keras模型,容易引发混淆,建议后续使用PyTorch官方推荐的.pth/.pt后缀。

解决方案

方案1:补全导入(适配现有模型文件)

在执行torch.load之前,保证NSNetModel的导入路径和你导出模型时的路径完全一致即可,比如你导出时的导入语句为from model import NSNetModel,加载代码前先执行同一句导入即可。

如果找不到原model模块,也可以用临时模块映射的方式应急加载:

import torch
import sys
# 此处导入你自己的NSNetModel类,替换为实际的导入语句
from your_module_path import NSNetModel

# 手动将缺失的model模块映射到当前NSNetModel所在的模块
sys.modules['model'] = sys.modules['your_module_path']
# 再加载模型
loaded_model = torch.load('/Users/me/tmp_model.h5')

方案2:调整导出逻辑(推荐,避免路径依赖)

后续导出模型时只保存权重参数,不保存完整模型对象,彻底避免类路径依赖问题:

导出代码调整

from pathlib import Path
import torch

ckpoint = 'version_131/epoch=171-step=1375.ckpt'
model = NSNetModel.load_from_checkpoint(Path('/Users/dev/Documents/models/'+ckpoint))
# 仅保存模型权重字典
torch.save(model.state_dict(), 'tmp_model_weights.pth')

加载代码

import torch
# 导入你的模型类
from your_module_path import NSNetModel

# 先实例化模型类
model = NSNetModel()
# 加载权重到实例中
model.load_state_dict(torch.load('tmp_model_weights.pth'))

内容的提问来源于stack exchange,提问作者Eric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:48:04