Flask 在加载保存的文件时出现 dill.dill 错误

我在 s3 中保存了两个文件(模型和向量化器),并尝试从 s3 下载并在我的 Flask 应用文件中运行它们。但目前返回的是 dill.dill(没有名为的模块错误)。有趣的是,我在任何地方都没有导入“dill”,但看起来它是在内部导入并抱怨的。

    import flask    from flask import Flask, request, render_template, jsonify    from sklearn.externals import joblib    import numpy as np    from scipy import misc    from sklearn.feature_extraction.text import TfidfVectorizer    import boto3    import pickle     BUCKET_NAME = 'xxxx'    MODEL_FILE_NAME = 'text-classification-model-v1.pk'     VECTORIZER_FILE_NAME = 'word_vectorizer.pk'    ACCESS_KEY="QQQQ"    SECRET_KEY="ZZZZZ"    S3 = boto3.client('s3', aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY, region_name='us-west-2')    app = Flask(__name__)    @app.route('/', methods=['GET'])    def index():        payload = [request.args.get('description')]             prediction = predict_(payload)        return parse_data()    def predict_(payload):        transformed_text_features = load_vectorizer(payload)        return load_model(MODEL_FILE_NAME).predict(transformed_text_features)     def parse_data():        return 'xxx'    def load_vectorizer(payload):        with open("downloaded_vectorizer.pk", 'wb') as data:            S3.download_fileobj(BUCKET_NAME, VECTORIZER_FILE_NAME, data)        infile = open("downloaded_vectorizer.pk","rb")        loaded_vectorizer = joblib.load(infile)          infile.close()        transformed_text_features = loaded_vectorizer.transform(payload)          return transformed_text_features    def load_model(model):        with open("downloaded_model_textclassification.pkl", 'wb') as data:              S3.download_fileobj(BUCKET_NAME, MODEL_FILE_NAME, data)        infile = open("downloaded_model_textclassification.pkl","rb")            model = pickle.load(infile)         infile.close()        return model     ==========    error message    ==========      File "\flask\predict_commodity.py", line 32, in index        prediction = predict_(payload)      File "\flask\predict_commodity.py", line 38, in predict_        transformed_text_features = load_vectorizer(payload)      File "\flask\predict_commodity.py", line 60, in load_vectorize        loaded_vectorizer = joblib.load(infile)      File " \lib\site-packages\sklearn\externals\joblib\numpy_pickle.py", line 568, in load        obj = _unpickle(fobj)      File " \lib\site-packages\sklearn\externals\joblib\numpy_pickle.py", line 508, in _unpickle        obj = unpickler.load()      File " \anaconda3\Lib\pickle.py", line 1050, in load        dispatch[key[0]](self)      File "\Lib\pickle.py", line 1338, in load_global        klass = self.find_class(module, name)      File "\Lib\pickle.py", line 1388, in find_class        __import__(module, level=0)    ModuleNotFoundError: No module named 'dill.dill'

回答:

在你的代码中,你使用了 picklesklearn.externals.joblib。这可能会引起问题。

此外,你可以尝试更新包:pip install dill --upgrade。这对我解决相同的问题有帮助。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注