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

Google Colab使用PyTorch加载模型报ModuleNotFoundError问题求助

报错原因

你遇到的ModuleNotFoundError: No module named 'models'是PyTorch模型序列化的常见问题,和第三方依赖无关:

  • 训练模型时,模型类定义在名为models的模块(本地的models.py文件或models包)下
  • 保存模型时使用了torch.save(model, 路径)的完整模型保存方式,该方式会把模型类的原始导入路径一起序列化
  • Google Colab环境中没有对应的models模块,反序列化加载时找不到类定义就会触发报错
解决方法
  • 方法1:补全类定义+重定向模块
    首先把训练时用到的所有模型相关类(包括fc_model.Network以及它依赖的自定义父类、函数)完整复制到Colab的代码中,然后在调用torch.load前添加如下代码,将当前运行环境的模块映射到原始的models路径:

    import sys
    # 若原始模型类定义在models模块下,添加这行映射
    sys.modules['models'] = sys.modules[__name__]
    # 若原始模型类定义在models.fc_model子模块下,额外添加这行
    # sys.modules['models.fc_model'] = sys.modules[__name__]
    

    完成后再调用你的加载函数即可正常读取模型。

  • 方法2:仅加载模型权重(推荐)
    该方式兼容性最强,不会依赖原始模块路径。如果能拿到原始训练代码,建议重新导出仅含权重的模型文件:
    训练侧导出代码:

    # 仅保存权重字典,不要保存整个模型对象
    torch.save(model.state_dict(), "best_weights_only.pt")
    

    Colab侧加载代码:

    # 先在Colab中定义和训练时完全一致的模型类
    model = fc_model.Network(input_size, output_size, hidden_layers)
    # 仅加载权重,不会触发类路径校验
    model.load_state_dict(torch.load("best_weights_only.pt", map_location="cpu"))
    
  • 方法3:上传本地模块到Colab
    直接将本地的models.py文件或者整个models包上传到Colab的工作目录,加载模型前先执行import models导入对应模块即可。

额外注意

你当前代码存在变量命名错误:load_checkpoint函数返回的是完成权重加载的完整模型对象,不是权重字典,建议把state_dict = load_checkpoint(PATH)修改为model = load_checkpoint(PATH),避免后续调用逻辑出错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 23:06:03