使用新版joblib加载旧版保存模型出现KeyError:0的解决方法
解决Joblib版本不兼容导致的KeyError:0问题
问题描述
我安装了最新版本的joblib,但忘记保存模型时使用的joblib版本,使用Python加载该旧版本保存的机器学习模型时出现KeyError:0错误,请问是否有解决办法?
相关代码
import joblib # Load the saved model model = joblib.load("/content/drive/MyDrive/dataset/Base Paper dataset results/Classifers/Linear_SVC_classifier.sav") # Check the version of Joblib used to save the model print("Joblib version used to save the model:", joblib.__version__)
报错信息
KeyError Traceback (most recent call last) <ipython-input-117-f85138883bf7> in <cell line: 3>() 1 import joblib 2 # Load the saved model ----> 3 model = joblib.load("/content/drive/MyDrive/dataset/Base Paper dataset results/Classifers/Linear_SVC_classifier.sav") 4 5 # Check the version of Joblib used to save the model 2 frames /usr/local/lib/python3.9/dist-packages/joblib/numpy_pickle.py in load(filename, mmap_mode) 585 obj = _unpickle(fobj, filename, mmap_mode) 586 return obj /usr/local/lib/python3.9/dist-packages/joblib/numpy_pickle.py in _unpickle(fobj, filename, mmap_mode) 504 obj = unpickler.load() 505 if unpickler.compat_mode: --> 506 warnings.warn("The file '%s' has been generated with a " 507 "joblib version less than 0.10. " 508 "Please regenerate this pickle file." /usr/lib/python3.9/pickle.py in load(self) 1210 raise EOFError 1211 assert isinstance(key, bytes_types) --> 1212 dispatch[key[0]](self) 1213 except _Stop as stopinst: 1214 return stopinst.value KeyError: 0
解决办法
降级Joblib到兼容版本:
从报错提示可知,模型是用joblib 0.10之前的版本保存的。先尝试安装旧版本,比如0.9.0:pip install joblib==0.9.0安装完成后重新运行加载代码,若仍报错,可尝试更早的版本如0.8.4。
尝试用标准库pickle加载:
Joblib基于pickle开发,部分旧版本joblib保存的模型可直接用pickle读取:import pickle with open("/content/drive/MyDrive/dataset/Base Paper dataset results/Classifers/Linear_SVC_classifier.sav", 'rb') as f: model = pickle.load(f)还原保存模型时的环境:
若能找到保存模型时的完整Python环境(包括joblib、scikit-learn等依赖的版本),在该环境下加载模型后,用新版本joblib重新保存一次,后续即可用新版本正常加载。
内容的提问来源于stack exchange,提问作者Umer
相关产品推荐
相关产品推荐

