gpt4 book ai didi

python-3.x - 如何在Flask应用程序中加载包含scikit-learn模型的pickle文件?

转载 作者:行者123 更新时间:2023-12-03 16:28:11 24 4
gpt4 key购买 nike

我正在尝试创建一个简单的基于Flask的Web应用程序,用户可以在其中输入一些文本并对其进行情感分类。使用scikit-learn训练模型后,我无法加载我保存的泡菜文件。我尝试加载的文件是tfidf_vectorizer_train.pkl,当我对load_tfidf_model进行函数调用时,该文件应该已经加载。每当我在本地运行应用程序时,都会出现以下错误


AttributeError:'NoneType'对象没有属性'transform'


我怀疑是由于模型无法加载而全局变量tfidf_model保持为None类型这一事实引起的。

如果有帮助,当前目录如下所示

├── ml_app.py
├── models
│   └── tfidf_vectorizer_train.pkl
├── templates
│   └── main.html


其中 ml_app.py包含以下代码

from flask import Flask, request, render_template 
from sklearn.externals import joblib

app = Flask(__name__)

models_directory = 'models'

tfidf_model = None


def load_tfidf_model():

global tfidf_model

tfidf_model = joblib.load('{}/tfidf_vectorizer_train.pkl'.format(models_directory))


@app.route('/')
def my_form():
return render_template('main.html')


@app.route('/', methods=['POST'])
def my_form_post():

text = request.form['text']

# clean using tfidf
comment_term_doc = tfidf_model.transform([text])
processed_text = comment_term_doc.toarray()

return render_template('main.html', text=text, processed_text=processed_text)


if __name__ == '__main__':

try:
load_tfidf_model()
print("Model loaded")

except Exception as e:
print("Model loading failed")
print(str(e))

app.run()

最佳答案

显然,您需要先调用load_tfidf_model,然后才能调用my_form_post路由方法。一个可能的结论是joblib.load失败。您不检查任何地方的返回值。

由于您没有报告任何异常,因此我假设没有任何异常发生。

joblib.load documentation建议可以返回任何Python类型,因此您可能需要查看创建正在加载的文件的代码。

风格上的问题:让load_tfidf_model返回joblib.load返回的值,而不是使用全局值,并将其保存在调用代码中(无需在全局中声明它)。全局变量不是在功能之间进行通信的好方法。

关于python-3.x - 如何在Flask应用程序中加载包含scikit-learn模型的pickle文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49480243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com