2017-10-30 4 views
0

나는 SKLearn 모델을 훈련하고 다음 코드를 사용하여 모델을 저장하는 파이썬 3.6 스크립트가 : 나는에 피클을로드 할 때파이썬으로 파이썬 3 절인 SKlearn 모델을로드하는 방법이

with open('filepath', 'wb') as f: 
    pickle.dump(trained_model, f, protocol=2) 

을 파이썬 3.6, 일이 잘 해결 :

>>with open('filepath', 'rb') as f: 
>> model = pickle.load(f) 
>> 
>>model 

RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini', 
     max_depth=None, max_features='auto', max_leaf_nodes=None, 
     min_impurity_decrease=0.0, min_impurity_split=None, 
     min_samples_leaf=1, min_samples_split=2, 
     min_weight_fraction_leaf=0.0, n_estimators=80, n_jobs=1, 
     oob_score=False, random_state=None, verbose=0, 
     warm_start=False) 

내가 파이썬 2.7에서이 같은 pickle.load 명령을 실행할 때, 나는 다음과 같은 오류 얻을 :

>>with open('filepath', 'rb') as f: 
>> model = pickle.load(f) 

ValueError: non-string names in Numpy dtype unpickling 

설명서 및 유사 사례를 보면 프로토콜을 2 으로 설정하면은 피클 파일을 호환 가능해야합니다. 이 문제의 원인은 무엇이며 어떻게 해결할 수 있습니까?

+0

전체 추적입니까? –

+0

불행히도, 그렇습니다. – bigmacboy78

+0

나는 진단을 위해 [mcve]를 제공하지 않았다. –

답변

1

.load()-force using a pure-Python implementation 대신 pickle._load()을 사용할 수 있으며 더 유용한 추적을 얻을 수 있습니다. 결함이있는 부분이 있지만 numpy의 코드에있는 경우

, 당신은 여전히 ​​부분에 ...는 C 디버거를 사용하거나 손으로 소스 코드를 추적에
... 또는 사용 numpy pickle format spec을 남겨 그 numpy의 unpickling 루틴에 먹이를주고 무엇이 잘못되었는지를 추측 해보십시오!

  • pickletools.dis()이 작업을 수행합니까? 오프셋을 사용하여 피클 데이터의 디스 어셈블리를 인쇄합니다. 위반의 특성을 알아 내기 위해 여전히 사양이 필요할 수도 있지만.

즉, 3.4. Model persistence — scikit-learn 0.19.1 documentation은 모델 데이터를 다른 버전 및/또는 아키텍처로로드하는 것이 지원되지 않으며 경고 대신 소스 자료를 저장하도록 제안합니다.

관련 문제