我在64位python上训练一个RandomForestRegressor模型.我挑选了这个物体.当试图在32位python上取消对象时,我得到以下错误:
'ValueError:缓冲区dtype不匹配,预期'SIZE_t'但得到'long long''
我真的不知道如何解决这个问题,所以任何帮助都会非常感激.
编辑:更多细节
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\python27\lib\pickle.py", line 1378, in load
return Unpickler(file).load()
File "c:\python27\lib\pickle.py", line 858, in load
dispatch[key](self)
File "c:\python27\lib\pickle.py", line 1133, in load_reduce
value = func(*args)
File "_tree.pyx", line 1282, in sklearn.tree._tree.Tree.__cinit__ (sklearn\tre
e\_tree.c:10389)
Run Code Online (Sandbox Code Playgroud) 如果我们在64位计算机上使用joblib序列化randomforest模型,然后在32位计算机上解压缩,则会出现异常:
ValueError: Buffer dtype mismatch, expected 'SIZE_t' but got 'long long'
Run Code Online (Sandbox Code Playgroud)
之前曾有人问过这个问题:Scikits-Learn RandomForrest在64位python上受过训练,不会在32位python上打开。但是自2014年以来,这个问题一直没有得到回答。
学习模型的示例代码(在64位计算机上):
modelPath="../"
featureVec=...
labelVec = ...
forest = RandomForestClassifier()
randomSearch = RandomizedSearchCV(forest, param_distributions=param_dict, cv=10, scoring='accuracy',
n_iter=100, refit=True)
randomSearch.fit(X=featureVec, y=labelVec)
model = randomSearch.best_estimator_
joblib.dump(model, modelPath)
Run Code Online (Sandbox Code Playgroud)
在32位计算机上解压缩的示例代码:
modelPath="../"
model = joblib.load(modelPkl) # ValueError thrown here
Run Code Online (Sandbox Code Playgroud)
我的问题是:如果我们必须在64位计算机上学习并将其移植到32位计算机上进行预测,那么是否有针对该问题的通用解决方法?
编辑:尝试直接使用pickle而不是joblib。仍然存在相同的错误。错误发生在核心pickle库中(对于joblib和pickle):
File "/usr/lib/python2.7/pickle.py", line 1378, in load
return Unpickler(file).load()
File "/usr/lib/python2.7/pickle.py", line 858, in load
dispatch[key](self)
File "/usr/lib/python2.7/pickle.py", line 1133, in load_reduce
value = func(*args)
File "sklearn/tree/_tree.pyx", line 585, in sklearn.tree._tree.Tree.__cinit__ …Run Code Online (Sandbox Code Playgroud)