- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的项目中有典型的 flask 结构。一切都工作正常,直到我尝试在我的 flask 应用程序中加载一个 pickle 的对象。我使用不同的 python 脚本创建了 pickled 对象,并且依赖于一些自定义类。我认为当你在 main 中进行 pickle 并期望类位于那里时这是一个问题,但我还没有弄清楚如何解决它。我尝试将类添加到 pipeline_classes.py 并导入它们,但它不起作用。任何想法将不胜感激。
这是生成 pickle 对象的脚本:
train.py
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.multiclass import OneVsRestClassifier
from sklearn.pipeline import Pipeline
import pickle
from sklearn.externals import joblib
from sklearn.pipeline import FeatureUnion
from sklearn.feature_extraction import DictVectorizer
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.base import BaseEstimator, TransformerMixin
class ItemSelector(BaseEstimator, TransformerMixin):
def __init__(self, column):
self.column = column
def fit(self, X, y=None, **fit_params):
return self
def transform(self, X):
return (X[self.column])
class TextStats(BaseEstimator, TransformerMixin):
"""Extract features from each document for DictVectorizer"""
def fit(self, x, y=None):
return self
def transform(self, posts):
return [{'REPORT_M': text}
for text in posts]
def train():
data = joblib.load('data_df.pkl')
# train and predict
classifier = Pipeline([
('union', FeatureUnion([
('text', Pipeline([
('selector', ItemSelector(column='TEXT')),
('tfidf_vec', TfidfVectorizer(max_df=0.8
])),
('category', Pipeline([
('selector', ItemSelector(column='CATEGORY')),
('stats', TextStats()),
('vect', DictVectorizer())
]))
])),
('clf', ExtraTreesClassifier(n_estimators=30, max_depth=300, min_samples_split=6, class_weight='balanced'))])
classifier.fit(data, data.y)
joblib.dump(classifier, 'et.pkl')
if __name__ == '__main__':
train()
然后是我的 flask 应用程序,我尝试加载该 pickle 对象。
init.py
from flask import Flask
from .pipeline_classes import ItemSelector
from .pipeline_classes import TextStats
app = Flask(__name__)
app.config.from_object('config')
from app import views
run.py
from app import app
app.run(debug=True)
views.py
from app import app
from flask import render_template
from .load import load
@app.before_first_request
def load_classifier():
print("data loading")
global loaded
loaded = load()
print("data loaded")
load.py
import pickle
import pandas as pd
def load():
clf_ = pd.read_pickle('et.pkl')
我收到以下错误:
builtins.AttributeError
AttributeError: module '__main__' has no attribute 'ItemSelector'
带有回溯:
Traceback (most recent call last) File
"/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1836, in
__call__ return self.wsgi_app(environ, start_response) File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1820, in
wsgi_app response = self.make_response(self.handle_exception(e)) File
"/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1403, in
handle_exception reraise(exc_type, exc_value, tb) File
"/usr/local/lib/python3.5/dist-packages/flask/_compat.py", line 33, in
reraise raise value File
"/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1817, in
wsgi_app response = self.full_dispatch_request() File
"/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1470, in
full_dispatch_request
self.try_trigger_before_first_request_functions() File
"/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1497, in
try_trigger_before_first_request_functions func() File
"/home/q423446/server/app/views.py", line 17, in load_classifier
loaded = load() File "/home/q423446/server/app/load.py", line 11, in
load clf_ = pd.read_pickle('app/ml/et_30.pkl') File
"/usr/local/lib/python3.5/dist-packages/pandas/io/pickle.py", line 68,
in read_pickle return try_read(path, encoding='latin1') File
"/usr/local/lib/python3.5/dist-packages/pandas/io/pickle.py", line 62,
in try_read return pc.load(fh, encoding=encoding, compat=True) File
"/usr/local/lib/python3.5/dist-packages/pandas/compat/pickle_compat.py",
line 117, in load return up.load() File
"/usr/lib/python3.5/pickle.py", line 1039, in load
dispatch[key[0]](self) File "/usr/lib/python3.5/pickle.py", line 1334,
in load_global klass = self.find_class(module, name) File
"/usr/lib/python3.5/pickle.py", line 1388, in find_class return
getattr(sys.modules[module], name) AttributeError: module '__main__'
has no attribute 'ItemSelector'
最佳答案
尝试在第一个文件 pipeline_classes.py
的底部对此进行更改:
if __name__ == "__main__":
ItemSelector.__module__ = "pipeline_classes"
train()
关于python - 属性错误: module '__main__' has no attribute 'ItemSelector' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45106274/
我使用的是 ExtJS 6.0.2,我有一个包含以下信息的项目选择器: {
如何禁用 Itemselector 中的项目(参见附件) ?我想在将项目移动到目标字段时禁用源字段中的某些项目。你能帮我解决这个问题吗? ATTACHMENT - Image 我进行了很多搜索并应用了
这个问题已经有答案了: Unable to load files using pickle and multiple modules (5 个回答) 已关闭 4 年前。 我的项目中有典型的 flask
我正在研究 Ext.view.View类创建一个数据 View ,用于显示在 ajax 代理之后接收到的图像列表。根据 DataView 的 Sencha Doc,itemSelector属性(pro
我想在 ExtJS 4.1 中创建一个 ItemSelector,但它们似乎没有两个列表的工作“标题”属性。这正是我想要的: http://dev.sencha.com/deploy/ext-4.0.
我正在开发 ASP 项目,在 View 中使用 extjs。我在 EXTJS 中使用 ItemSelector 时遇到问题。 这是我的代码: var isForm = new Ext.Panel({
我想使用 dataview 来呈现以下层次结构数据: [{ id: 1, name: 'Parent #1', children: [ { id: 11, name: 'Child 1.1
Sencha Touch 2 有这样的选择吗 http://dev.sencha.com/deploy/ext-4.0.0/examples/multiselect/multiselect-demo.
我有以下multiselect control在 Ext JS 表单中,如下所示: 如何更改“可用”和“选定”这两个图例? 我在文件 ItemSelect.js 中看到我可以在内部设置这些内容: 但是
我使用 nthe neptune 主题使用 sencha CMD 3.1.2.342 生成了一个 Ext JS 4.2.1.883 应用程序...我的 View 中有一个 ItemSelector 控
我是一名优秀的程序员,十分优秀!