Python 我无法使用joblib和pickle将ML模型加载到烧瓶中

Python 我无法使用joblib和pickle将ML模型加载到烧瓶中,python,flask,scikit-learn,pickle,Python,Flask,Scikit Learn,Pickle,我面临着将ML模型(随机森林ML模型)装入烧瓶的问题。 我尝试过两个库joblib和pickle都会生成相同的错误 model=pickle.load(f) sklearn.tree.\u tree.tree.\u cinit中的文件“sklearn\tree\\u tree.pyx”,第606行__ ValueError:缓冲区数据类型不匹配,应为“SIZE\u t”,但为“long” 这是我的烧瓶应用程序 #导入所有必要的库 #使用pickle加载预先训练的模型。 打开(f'model/m

我面临着将ML模型(随机森林ML模型)装入烧瓶的问题。 我尝试过两个库joblib和pickle都会生成相同的错误

model=pickle.load(f)
sklearn.tree.\u tree.tree.\u cinit中的文件“sklearn\tree\\u tree.pyx”,第606行__
ValueError:缓冲区数据类型不匹配,应为“SIZE\u t”,但为“long”
这是我的烧瓶应用程序

#导入所有必要的库
#使用pickle加载预先训练的模型。
打开(f'model/model_2.pkl,'rb')作为f:
模型=pickle.load(f)
#模型=负载('model/model.joblib')
app=flask.flask(\uuuuu name\uuuuuuuuuu,template\u folder='templates'))
我的Jubyter笔记本:

来自sklearn.employ的

从sklearn.model\u选择导入列车\u测试\u拆分
将numpy导入为nm
作为pd进口熊猫
从sklearn.metrics导入分类报告
从sklearn.metrics导入混淆矩阵
df=pd.read\u csv('phishing\u url\u v2.csv')
列=['No_of_dots'、'Length_of_host'、'contains(exe)'、'redirect(/)'、]
labels=df[“恶意”]。值
特征2=df[列表(列)]。值
X_列_2,X_测试_2,y_列_2,y_测试_2=列_测试_分割(特征_2,标签,测试_大小=0.30)
模型=随机森林分类器(n_估计值=52)
模型拟合(X\U列2,y\U列2)
model_predict_2=model.predict(X_test_2)
精度=混淆矩阵(y检验2,模型预测2)
打印(准确性)
从joblib导入转储,加载
转储(模型'model.joblib')
进口泡菜
pickle.dump(model,open('model_2.pkl','wb'))
我在Jubyter笔记本中加载模型,效果非常好

model = pickle.load(open('model_2.pkl','rb'))
print(model.predict([[1,10,0,0]]))
[0]

我想不出这个问题。

谢谢马约斯滕的提示。 问题是Jubyter笔记本中使用的python版本是32位,而Pycharm中使用的是64位

要验证,请使用此命令

import ctypes
print (ctypes.sizeof(ctypes.c_voidp))

# 8 for 64bit and 4 for 32bit

谢谢梅奥斯滕的提示。 问题是Jubyter笔记本中使用的python版本是32位,而Pycharm中使用的是64位

要验证,请使用此命令

import ctypes
print (ctypes.sizeof(ctypes.c_voidp))

# 8 for 64bit and 4 for 32bit

两个问题:1)导入错误是否只发生在烧瓶中?即,您能否重新导入模型并在导出后在Jupyter NB中成功执行?2) 我在Flask应用程序代码中没有看到pickle的导入语句。你能发布Flask应用程序的完整代码吗?另外,您是否在与您在Jupyter中创建和序列化模型时相同的环境中使用相同版本的sklearn运行Flask应用程序?在不同体系结构上转储/加载可能有用的线程,至少可以解释您的问题:我在Flask和JubyterNotebook中使用相同版本的sklearn。我试着加载另一个线性回归模型,它工作正常。我在Jubyter笔记本中加载了该模型,工作正常。到目前为止,对于Flask,问题是如何加载模型两个问题:1)导入错误是否只发生在Flask中?即,您能否重新导入模型并在导出后在Jupyter NB中成功执行?2) 我在Flask应用程序代码中没有看到pickle的导入语句。你能发布Flask应用程序的完整代码吗?另外,您是否在与您在Jupyter中创建和序列化模型时相同的环境中使用相同版本的sklearn运行Flask应用程序?在不同体系结构上转储/加载可能有用的线程,至少可以解释您的问题:我在Flask和JubyterNotebook中使用相同版本的sklearn。我试着加载另一个线性回归模型,它工作正常。我在Jubyter笔记本中加载了该模型,工作正常。到目前为止,这就是我所拥有的,问题在于加载modelBravo!我们打算进一步建议将您在Conda中使用的确切环境导出到虚拟环境,但看起来您发现了类似的东西。太棒了!我们将进一步建议将您在Conda中使用的确切环境导出到虚拟环境,但看起来您发现了类似的内容。