2017-05-31 76 views
0

我救了一个模型对象如下:泡椒EOF错误而载入对象

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 
+0

也许仔细检查,如果该文件是好的。我会再做一次,使用一些更小巧,速度更快的模型。也许上次发生了错误(hdd-space,sys-memory,其他崩溃)。可以肯定的是,你不是在不同的版本/系统上进行酸洗/去除,对吧? – sascha

回答

0

pickle无法处理sklearn模型,因为它们包含numpy数组。相反,使用joblib.dump,它是相似的,但它们具有特殊的保存/加载大型numpy阵列。

https://pythonhosted.org/joblib/persistence.html

+0

但是不是pickle能够存储python类对象吗?如果我的类对象有一个sklearn模型的属性呢?请看看我问的这个问题,但还没有得到答案。 问题是我的模型和类对象已被酸洗。我需要现在加载它们来进一步使用它 https://stackoverflow.com/questions/44272487/loading-python-class-object-as-pickle-error – Baktaawar

+0

是'python'类对象,'numpy'使用数据表示不完全是'python'类对象,而是以'C'或'Fortran'顺序有效地存储数据数组。如果你将它们封装在一个'python'类中,那么无关紧要''pickle'必须能够对所有东西进行反序列化,而不仅仅是对象容器。我很抱歉成为坏消息的使者,但你需要再次训练你的模型,并坚持使用'joblib','pickle'文件是没有用的。 –

+0

我不确定你有没有在以前的评论中的链接。如你所见,它能够加载pickle类。然后使用加载的pickle类,我可以检索那里的属性。但问题是加载代码只能在模型被训练的笔记本上运行。其他笔记本试图加载类是给出了错误,如林 – Baktaawar