发布于2026-07-19 阅读(0)
扫一扫,手机访问
最常见的几个原因其实并不复杂——路径写错了、文件损坏了、键名对不上,或者设备映射没处理好。每个问题都有对应的排查思路,下面逐一拆解。

.pth 文件时路径不对或报错 OSError: No such file or directory路径问题大概是最常见的翻车现场。尤其是在 Jupyter 或不同工作目录下运行代码时,torch.load 并不会自动去项目根目录或模型目录里翻找——它只认当前 os.getcwd() 的相对路径或者你给它的绝对路径。
os.path.abspath("model.pth") 或者 Path(__file__).parent / "model.pth" 显式构造路径,别靠“应该就在旁边”这种直觉。os.path.exists("model.pth"),确认文件确实在那里,这比报错后回头翻路径快得多。weights/ckpt.pth,记得把斜杠写全——"weightsckpt.pth" 这种手误并不少见。RuntimeError: unexpected EOF 或 pickle.UnpicklingError这通常意味着文件本身坏了、不完整,或者压根就不是 PyTorch 保存的 .pth 格式——比如实际是 ONNX、TensorFlow checkpoint,或者下载中途断了。
file model.pth 看一眼文件类型,在 Windows 上用 PowerShell 执行 Get-ChildItem model.pth | Select Length 检查大小——空文件或者只有几 KB 的基本可以扔了。torch.load 默认走 pickle 反序列化,极少数情况下会碰到用旧方式(torch.sa ve(..., _use_new_zipfile_serialization=False))保存的文件,但更多时候就是文件本身不合法。.pth 文件——它是二进制 ZIP 格式,改一个字节整个文件就废了。state_dict 键名对不上,模型 load_state_dict 失败权重文件里的键(比如 "backbone.conv1.weight")跟模型实际参数名不一致,这种冲突通常来自:模型定义改过、用了不同训练脚本,或者权重是从 Hugging Face 这类第三方库拿过来的。
print(torch.load("model.pth").keys()) 确认存的是不是直接 state_dict,再用 print(list(model.named_parameters())) 对比一下。module.,可以用 state_dict = {k.replace("module.", ""): v for k, v in state_dict.items()} 清洗——这是多卡训练保存后的常见问题。map_location 避免 GPU 加载失败或显存泄漏在 CPU 上加载本应放在 GPU 上的 .pth 文件,或者反过来,如果不指定 map_location,很容易直接 OOM 或者报 Invalid device。
torch.load("model.pth", map_location="cpu"),否则默认会尝试加载到原设备(比如 cuda:0)。map_location="cuda:1",别靠后面补 model.cuda()——后者不改变 state_dict 里张量的设备,load_state_dict 会失败。map_location=torch.device("cpu"),比字符串更明确,也能兼容 PyTorch 的未来版本。说到底,PyTorch 的 torch.load 行为高度依赖文件来源和保存时的上下文。同一个 .pth 文件,换个环境可能因为设备、路径、模型定义的微小差异就加载失败——别想当然地以为“能跑通一次就永远没问题”。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8