torch.load unpickler.load()中super().find_class(mod_name, name)报错
时间: 2023-06-14 15:02:39 浏览: 523
这个问题通常是因为 pickle 文件中引用的某些类已经被删除或重命名了。试着使用下面的代码来解决问题:
```python
import sys
import torch
# 新建一个类,继承 torch.serialization.pickle.Unpickler
class CustomUnpickler(torch.serialization.pickle.Unpickler):
def find_class(self, module, name):
if name == 'YourClassName': # 将 YourClassName 替换为实际类名
from your_module import YourClassName # 将 your_module 和 YourClassName 替换为实际的模块名和类名
return YourClassName
return super().find_class(module, name)
# 打开 pickle 文件,并使用自定义的 Unpickler 进行反序列化
with open('your_pickle_file.pkl', 'rb') as f:
obj = CustomUnpickler(f).load()
```
在上述代码中,我们新建了一个类 `CustomUnpickler`,并在其中重写了 `find_class` 方法,以便在 pickle 文件中找不到类定义时,可以使用自定义的方式加载类。你需要将 `YourClassName` 和 `your_module` 替换为实际的类名和模块名。
阅读全文
相关推荐














