- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个简单的基于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/
我正在开发一个需要能够平均三个数字的 Facebook 应用程序。但是,它总是返回 0 作为答案。这是我的代码: $y = 100; $n = 250; $m = 300; $number = ($y
我只是无法弄清楚这一点,也找不到任何对我来说有意义的类似问题。我的问题:我从数据库中提取记录,并在我的网页上以每个面板 12 条的倍数显示它们。因此,我需要知道有多少个面板可以使用 JavaScrip
我是一名优秀的程序员,十分优秀!