2017-05-31 2 views
0

J'ai sauvé un objet de modèle comme suit:Pickle erreur EOF tout objet de chargement

with open('bestModel_smv_3class_version2data.pickle','wb') as f: 
    pickle.dump(jpsa_svm_3class.g_cv.best_estimator_,f) 

Maintenant, lorsque je tente de le charger, il donne une erreur

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

Erreur:

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

Peut-être en quelque sorte une double vérification si ce fichier est ok. Je le ferais à nouveau, en utilisant un modèle plus petit et plus rapide. Peut-être que quelque chose s'est mal passé la dernière fois (hdd-space, sys-memory, un autre crash). Et juste pour être sûr: vous n'êtes pas décapant/décomposant sur différentes versions/systèmes, non? – sascha

Répondre

0

pickle ne peut pas gérer sklearn modèles car ils contiennent numpy tableaux. Utilisez joblib.dump à la place, il est similaire, mais ils ont des boîtes spéciales d'enregistrement/chargement de grands tableaux numpy.

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

+0

Mais le pickle n'est-il pas capable de stocker des objets de classe python? Que faire si mon objet de classe a un attribut sklearn model? SVP voir cette question que j'ai posée et je n'ai pas encore pu avoir de réponse. Le problème est mon modèle et les objets de classe sont déjà décapés. Je dois les charger maintenant pour l'utiliser davantage https://stackoverflow.com/questions/44272487/loading-python-class-object-as-pickle-error – Baktaawar

+0

oui objets de classe 'python',' numpy' utilise des données des représentations qui ne sont pas exactement des objets de classe 'python' mais des tableaux de données stockés efficacement dans l'ordre' C' ou 'Fortran'. Peu importe si vous avez encapsulé ceux dans une classe 'python'' pickle' doit être capable de tout/serialise tout, pas seulement le conteneur de l'objet. Je suis désolé d'être le porteur de mauvaises nouvelles, mais vous devez former vos modèles à nouveau et les persister en utilisant 'joblib' les fichiers' pickle' ne servent à rien. –

+0

Je ne suis pas sûr que vous avez le lien dans le commentaire précédent. Comme vous le voyez, il est capable de charger la classe pickle. Ensuite, en utilisant la classe pickle chargée, je peux récupérer l'attribut ici. Mais le problème est que le code de chargement ne fonctionne que dans le cahier où le modèle a été formé. L'autre cahier essayant de charger la classe donne l'erreur comme montré dans le lin – Baktaawar