如何使用从Python中的pickle文件加载的模型来部署机器学习模型?

时间:2019-01-31 09:42:42

标签: python machine-learning pickle

我已经创建了一个NLP模型,并将矢量化器和模型保存在pickle文件中。我正在使用这些pickle文件来预测新数据。加载泡菜大约需要10分钟。我想将泡菜文件保存在内存中,并在得到输入后运行预测。

我有一个文件ictionary.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"

在每次运行脚本时都会加载该pickle文件。无论如何,有没有一个程序使泡菜文件已经加载到内存中,然后我们运行预测文件并获取结果?

2 个答案:

答案 0 :(得分:0)

您将不得不稍微更改代码结构。

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模块,您可以将路径文件从“前”脚本发送到 Daemon ,以等待路径并返回答案。您必须附加 Daemon 的输入和输出流,才能传递文件路径并从该过程中获取预测。

subprocess.runPopen可能是执行此操作,查看文档和示例用例(例如herehere等)所需的全部。 / p>

编辑: @Koalapa的答案是另一种选择,因为我们已经说过,它很大程度上取决于您要执行的操作,用户负载等。

答案 1 :(得分:0)

这取决于您的用例。最简单的将是一台Jupyter笔记本,这样您就可以尽情玩耍。如果您在更大的项目中,也许您对使用诸如flask的API REST更感兴趣。