как правильно загрузить маринованные модели машинного обучения на сервер - PullRequest
0 голосов
/ 04 марта 2020

Это приложение Python Flask.

Тот же код работает на моем локальном компьютере, когда я запускаю это приложение на локальном компьютере. Но на сервере, который я арендую у DigitalOcean, у меня возникает эта проблема. Я пытался загрузить эту модель машинного обучения (модель классификации, которую я обучил, используя sklearn) во время бега. Но это дает мне эту ошибку, ИЛИ иногда, с некоторыми решениями, которые я видел в добавленном Stackoverflow, зависает навсегда.

UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0

Я пробовал каждое решение в Stackoverflow: как добавление 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")

Что с этим не так?

1 Ответ

0 голосов
/ 06 марта 2020

Кажется, что есть проблема, когда вы выбираете модель, используя python2 и пытаетесь загрузить эту модель, используя python3.

  • Вы пытались загрузить эту модель, используя Python 2?

  • Есть ли у вас такая же ошибка при запуске с параметром encoding = latin1? Если это другая ошибка, возможно, вам нужно запустить

    dill._dill._reverse_typemap["ObjectType"] = object

перед загрузкой.

Проблема описана здесь довольно хорошо: https://rebeccabilbro.github.io/convert-py2-pickles-to-py3/

...