Machine learning 如何在服务器上正确加载pickle机器学习模型

Machine learning 如何在服务器上正确加载pickle机器学习模型,machine-learning,flask,pickle,Machine Learning,Flask,Pickle,这是一个Python烧瓶应用程序 当我在本地运行此应用程序时,相同的代码在我的本地运行。但在我从DigitalOcean租来的服务器上,它给了我这个问题。 我一直试图在运行时加载这个机器学习模型(我使用sklearn训练的分类模型)。但它给了我这个错误,或者有时候,我在Stackoverflow中看到的一些解决方案,会永远挂起 UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0 我尝试了Stackover

这是一个Python烧瓶应用程序

当我在本地运行此应用程序时,相同的代码在我的本地运行。但在我从DigitalOcean租来的服务器上,它给了我这个问题。 我一直试图在运行时加载这个机器学习模型(我使用sklearn训练的分类模型)。但它给了我这个错误,或者有时候,我在Stackoverflow中看到的一些解决方案,会永远挂起

UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0
我尝试了Stackoverflow中的所有解决方案:比如在加载pickle时添加encoding=“latin-1”或“bytes”。我尝试了下面和许多其他组合,以及人们在Stackoverflow中推荐的不同参数

def load_model(file_path):
    script_directory = os.path.split(os.path.abspath(__file__))[0]
    abs_filepath = os.path.join(script_directory, file_path)
    with open(abs_filepath, 'rb') as f:
        classifier = pickle.loads(f.read())
    return classifier

def load_model(file_path):
        script_directory = os.path.split(os.path.abspath(__file__))[0]
        abs_filepath = os.path.join(script_directory, file_path)
        with open(abs_filepath, 'r') as f:
                               # also with 'rb'
            classifier = pickle.load(f, encoding="bytes")
                               # also with "latin-1" "latin1" etc.. and load, loads, f, and f.read()
        return classifier

model = load_model("modelname.pickle")

这有什么问题?

当您使用python2对模型进行pickle处理并尝试使用python3加载此模型时,似乎出现了问题

  • 您是否尝试使用Python2加载此模型

  • 当您使用参数encoding=latin1运行它时,是否存在相同的错误?如果是另一个错误,您可能需要运行

在加载之前

这里很好地描述了这个问题:

奇怪的是,模型在功能级别正确加载,即使用load_模型功能的功能。但是,当在任何函数中使用load_模型时,就会出现这个问题。例如,def classify(data):classifier=load_model('model.pickle')#做更多的事情。
    dill._dill._reverse_typemap["ObjectType"] = object