Как развернуть модель машинного обучения с моделью, загруженной из файла pickle в Python? - PullRequest
0 голосов
/ 31 января 2019

Я создал модель НЛП и сохранил векторизатор и модель в файле pickle.Я использую эти файлы для прогнозирования новых данных.Загрузка маринада занимает около 10 минут.Я хочу сохранить файл pickle загруженным в память и запустить прогноз при получении ввода.

У меня есть файлgnation.py

from sklearn.externals import joblib

count_vectorizer = joblib.load("C:/Count_Vectorizer.pkl")

count_classifier = joblib.load("C:/Count_Classifier.pkl")

X=sys.argv[1]

X_count = count_vectorizer.transform(X)

prediction = count_classifier.predict(X_count )

print(X,prediction)

Я запускаю файл python с вводомстрока в качестве аргумента.

$ python prediction.py "Hello World"

IN Этот файл pickle загружается каждый раз, когда я запускаю скрипт.Есть ли способ сделать программу такой, чтобы файл pickle уже был загружен в память, и мы запустили файл прогноза и получили результат?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Это зависит от вашего варианта использования.Самым простым будет блокнот на основе Jupyter, чтобы вы могли играть в arount.Если вы работаете в более крупном проекте, возможно, вас больше интересует использование какого-либо API REST, такого как flask.

0 голосов
/ 31 января 2019

Вам придется немного изменить структуру кода.

1.daemon.py

Эта часть отвечает за загрузку моделей в память один раз и должна запускаться все время, получая входные данные из «передней» части

import numpy as np    
from sklearn.externals import joblib

count_vectorizer = joblib.load("C:/Count_Vectorizer.pkl")    
count_classifier = joblib.load("C:/Count_Classifier.pkl")

while True:
    # Load your data from file saved on disk, pass path via input
    # User can pass data, separate script saves it and passes it to daemon
    with open(input("Pass your data here")) as f:
        X_count = count_vectorizer.transform(np.fromfile(f))

        prediction = count_classifier.predict(X_count )
        print(X,prediction)

Это только набросок как я не знаю ваш точный случай использования.По сути, существует бесконечный цикл, принимающий файлы (или пути к файлам, как здесь) и выводящий прогнозы.

2.front.py

Используя модуль subprocess, вы можете отправлять файлы путей из сценария 'front' в Daemon , ожидая пути и возвращая ответы.Вы должны присоединить входной и выходной потоки Daemon , чтобы передать путь к файлу и получить прогнозы из этого процесса.

subprocess.run или Popen , вероятно, все, что вам нужно для выполнения этой операции, ознакомьтесь с документацией и примерами использования (например, здесь , здесь и т. Д.).

РЕДАКТИРОВАТЬ: Ответ @Koalapa является еще одним вариантом, так как мы сказали, что в значительной степени зависит от того, что именно вы хотите делать, что являетсяпользовательская нагрузка и т. д.

...