python - AttributeError:模块“__main__”没有属性“AverageWordLengthExtractor”
问题描述
我AverageWordLengthExtractor
在管道代码中创建了一个自定义转换器类,并在成功运行后保存了模型。现在,当我尝试使用烧瓶应用程序加载模型时,它给出了AttributeError: module '__main__' has no attribute 'AverageWordLengthExtractor'
成功运行并保存模型的管道代码
自定义类
class AverageWordLengthExtractor(BaseEstimator, TransformerMixin):
def __init__(self):
pass
def average_word_length(self, text):
return np.mean([len(word) for word in text.split( ) if word not in stopWords])
def fit(self, x, y=None):
return self
def transform(self, x , y=None):
return pd.DataFrame(pd.Series(x).apply(self.average_word_length)).fillna(0)
保存模型
def save_model(model, model_filepath):
# Save best grid search pipeline to file
dump_file = model_filepath
joblib.dump(model, dump_file, compress=1)
上面的代码运行成功。
现在,我正在尝试使用烧瓶加载模型。
app = Flask(__name__)
....
....
# load model
model = joblib.load("../models/classifier2.pkl")
我正在尝试使用此模型进行预测,但它给出了错误,
$ python run.py
Traceback (most recent call last):
File "run.py", line 33, in <module>
model = joblib.load("../models/classifier2.pkl")
File "C:\Users\609775743\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\externals\joblib\numpy_pickle.py", line 578, in load
obj = _unpickle(fobj, filename, mmap_mode)
File "C:\Users\609775743\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\externals\joblib\numpy_pickle.py", line 508, in _unpickle
obj = unpickler.load()
File "C:\Users\609775743\AppData\Local\Continuum\anaconda3\lib\pickle.py", line 1050, in load
dispatch[key[0]](self)
File "C:\Users\609775743\AppData\Local\Continuum\anaconda3\lib\pickle.py", line 1338, in load_global
klass = self.find_class(module, name)
File "C:\Users\609775743\AppData\Local\Continuum\anaconda3\lib\pickle.py", line 1392, in find_class
return getattr(sys.modules[module], name)
AttributeError: module '__main__' has no attribute 'AverageWordLengthExtractor'
注意:代码可以在没有自定义类的情况下正常工作。
解决方案
AverageWordLengthExtractor
你在你的烧瓶应用程序中导入了这个类吗?例如
import joblib
from average_word_length_extractor import AverageWordLengthExtractor
app = Flask(__name__)
# ...
# ...
# load model
model = joblib.load("../models/classifier2.pkl")
average_word_length_extractor
AverageWordLengthExtractor
是你的类所在的 Python 文件。在这种情况下:average_word_length_extractor.py
推荐阅读
- c - 头文件中的全局变量
- python - OpenCV 图像倾斜与图像边界平行
- eclipse - 如何使用 Gradle 使用 Eclipse 导入包?
- rcpp - 使用 Rcpp 将向量或矩阵从 R 传递到 C 函数而没有本地副本?
- reactjs - 为什么 componentDidMount 卡在无限循环中?
- typescript - 如何在 typescript 中使用 memcache 模块?
- javascript - 不调用 Firebase Cloud 函数
- c - 如何在 GTK 中使用 enter 传递条目?
- c# - 添加引用后无法引用项目
- python - Django在html点击上运行外部py脚本