Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 加载对象时Pickle EOF错误_Python_Scikit Learn_Pickle - Fatal编程技术网

Python 加载对象时Pickle EOF错误

Python 加载对象时Pickle EOF错误,python,scikit-learn,pickle,Python,Scikit Learn,Pickle,我保存了一个模型对象,如下所示: with open('bestModel_smv_3class_version2data.pickle','wb') as f: pickle.dump(jpsa_svm_3class.g_cv.best_estimator_,f) 现在,当我尝试加载它时,它给出了一个错误 with open('bestModel_smv_3class_version2data.pickle','rb') as f: svm_bestModel=pickle.

我保存了一个模型对象,如下所示:

with open('bestModel_smv_3class_version2data.pickle','wb') as f:
    pickle.dump(jpsa_svm_3class.g_cv.best_estimator_,f)
现在,当我尝试加载它时,它给出了一个错误

with open('bestModel_smv_3class_version2data.pickle','rb') as f:
    svm_bestModel=pickle.load(f)
错误:

EOFError                                  Traceback (most recent call last)
<ipython-input-66-df8734c64828> in <module>()
      8 
      9 with open('bestModel_smv_3class_version2data.pickle','rb') as f:
---> 10     svm_bestModel=pickle.load(f)

EOFError: Ran out of input
EOFError回溯(最近一次调用)
在()
8.
9将open('bestModel_smv_3class_version2data.pickle','rb')作为f:
--->10 svm_bestModel=酸洗负荷(f)
EOFError:输入不足

pickle
无法处理
sklearn
模型,因为它们包含
numpy
数组。改为使用
joblib.dump
,这与此类似,但它们都有保存/加载大型
numpy
数组的特殊情况


但是pickle不能存储python类对象吗?如果我的类对象有一个属性是sklearn model呢?请看我问的这个问题,还没有得到答案。问题是我的模型和类对象已经被pickle了。我现在需要加载它们以进一步使用它是的
python
类对象,
numpy
使用的数据表示形式不完全是
python
类对象,而是以
C
Fortran
顺序高效地存储数据数组。不管您是否将它们封装在
python
pickle
中,都必须能够对所有内容进行反序列化,而不仅仅是对象容器。很抱歉,我带来了坏消息,但您需要再次训练您的模型,并使用
joblib
将它们持久化
pickle
文件没有任何用处。我不确定您是否获得了前面评论中的链接。如您所见,它能够加载pickle类。然后使用加载的pickle类,我可以在那里检索属性。但问题是,加载代码只在训练模型的笔记本中起作用。另一个试图加载该类的笔记本给出了如linI所示的错误。我不知道您上一个问题中发生了什么,可能模型不适合,因此不包含numpy数组,但我可以从个人经验告诉您,
pickle
无法处理适合的
sklearn
模型,改用
joblib
。指示pickle很好(这不会让我感到惊讶,因为他们可能为所有类定义了特殊的pickle行为,包括使用numpy自己的数组pickle def),而joblib只是在性能方面更加专业。官方的例子也使用香草泡菜。也许会仔细检查一下这个文件是否正确。我会再做一次,用一些更小的,快速安装的模型。也许上次出了什么问题(硬盘空间、系统内存、其他一些崩溃)。当然,你不会在不同的版本/系统上进行酸洗/去酸洗,对吗?