2017-05-31 77 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