Я создал один пользовательский класс преобразователя 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'
note : Код работает нормально без пользовательского класса.