首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加载保存的文件时显示dill.dill消息时出现Flask错误

加载保存的文件时显示dill.dill消息时出现Flask错误
EN

Stack Overflow用户
提问于 2018-07-27 03:10:59
回答 1查看 653关注 0票数 1

我在s3中保存了两个文件(模型和矢量器),并尝试从s3下载并与我的flask应用程序文件一起运行。但是,这当前返回dill.dill (没有名为error的模块)。有趣的是,我没有在任何地方导入"dill“,但它看起来像是在内部导入,并抱怨说。

代码语言:javascript
复制
    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'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-06 18:42:12

在你的代码中,你使用了picklesklearn.externals.joblib。这可能是一个问题。

此外,您还可以尝试更新包:pip install dill --upgrade。帮助我解决了同样的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51546019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档