распаковка файла модели python scikit-learn (конвейер (память = нет, шаги = нет, подробно = нет)) - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь преобразовать файл маринада из Python 2 в Python 3, используя следующий код:

import os
import dill
import pickle
import argparse


def convert(old_pkl):
    """
    Convert a Python 2 pickle to Python 3
    """
    # Make a name for the new pickle
    new_pkl = os.path.splitext(os.path.basename(old_pkl))[0]+"_p3.pkl"

    # Convert Python 2 "ObjectType" to Python 3 object
    dill._dill._reverse_typemap["ObjectType"] = object

    # Open the pickle using latin1 encoding
    with open(old_pkl, "rb") as f:
        loaded = pickle.load(f, encoding="bytes")

    # Re-save as Python 3 pickle
    with open(new_pkl, "wb") as outfile:
        pickle.dump(loaded, outfile)

Травление работало нормально. Но проблема в том, что когда я пытался напечатать вывод Python3 маринованного файла, вместо показа ниже:

model = Pipeline([('count', CountVectorizer())
])

print(model)
Pipeline(memory=None,
     steps=[('count_vectorizer', CountVectorizer(analyzer='word', binary=False, decode_error='strict',
        dtype=<class 'numpy.int64'>, encoding='utf-8', input='content',
        lowercase=True, max_df=1.0, max_features=None, min_df=1,
        ngram_range=(1, 1), preprocessor=None, stop_words=None)])

это показано ниже:

Pipeline(memory=None, steps=None, verbose=None) 

1 Ответ

1 голос
/ 04 февраля 2020

Нашел решение:

При распаковке файла я использовал encoding как bytes вместо latin1.

Откройте рассол с использованием латинской кодировки

with open(old_pkl, "rb") as f:
    loaded = pickle.load(f, encoding="latin1")

и все работало нормально. Для уточнения см. это

...