提示:推荐使用方法三,不会“科学上网”的请关注微信公众号“DGX杂学”并在后台私信!
错误:使用torch.load()加载模型参数时,提示“xxx.pt is a zip archive(did you mean to use torch.jit.load()?)“或者“xxx.pth is a zip archive(did you mean to use torch.jit.load()?)“
错误原因:
xxx.pth或者xxx.pt来自pytorch1.6或更高的版本。1.6之后pytorch默认使用zip文件格式来保存权重文件,导致这些权重文件无法直接被1.5及以下的pytorch加载。
解决方式:
方法一:升级pytorch版本
直接把自己的pytorch升级到pytorch1.6或者更高的版本。
方法二:用别人的电脑把权重文件改成非zip格式
如果自己不想升级或者自己电脑不支持pytorch更高版本,可以找身边pytorch高于1.6的人帮忙把权重文件改为非zip格式,改好后替换掉原来的权重文件问题就解决了。
代码:
import torch
state_dict = torch.load("xxx.pth")#xxx.pth或者xxx.pt就是你想改掉的权重文件
torch.save(state_dict, "xxx.pth", _use_new_zipfile_serialization=False)
方法三:用Google colab 把权重文件改为非zip格式(作者所用,推荐)
对于电脑不支持或者不想升级更高版本的人和借不到电脑的人(作者就是),怎么办呢?
答案:使用Google colab(要科学上网才可以用
) 这个免费的平台来把权重文件改为非zip格式。colab本身就装有高版本的pytorch和cuda,所以我们主要把权重文件上传上去并运行方法二中的代码就是ok了,转换完后下载就行。
import torch
state_dict = torch.load("xxx.pth")#xxx.pth或者xxx.pt就是你想改掉的权重文件
torch.save(state_dict, "xxx.pth", _use_new_zipfile_serialization=False)
使用colab改有两种方法:
方法一:直接上传权重文件(推荐!)
- 打开colab后直接上传
- 选择权重文件
- 开始修改权重文件
添加方法二中的代码(要改成自己的权重文件名)并运行
- 运行问题解决
遇到以下问题不要慌,因为我们没有设置好这个笔记本
- 问题解决:点击“视图”》“笔记本信息”》“打开笔记本设置”》“选择GPU”》“保存”。
然后重新运行代码。 - 运行结束后刷新文件列表下载文件。
- 把下载下来的权重文件替换掉原来的权重文件,就不会报错了。
方法二:同样是colab方法,权重文件先上传到谷歌云盘再在colab中引用
这种方法不细讲了直接上代码。
- 装载谷歌云盘
from google.colab import drive
# 將自己的云端硬盘装载上去
drive.mount('/content/gdrive')
- 使用%cd切换到权重文件路径
- 运行转换代码(笔记本可以提前设置好GPU)
import torch
state_dict = torch.load("xxx.pth")#xxx.pth或者xxx.pt就是你想改掉的权重文件
torch.save(state_dict, "xxx.pth", _use_new_zipfile_serialization=False)
- 文件下载与保存
以上代码运行完后刷新文件列表,下载权重文件即可。如果你想保存这个修改好后的权重文件到你的谷歌云盘(即同步)。可以使用以下命令:
drive.flush_and_unmount()