我已经创建了一个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文件。无论如何,有没有一个程序使泡菜文件已经加载到内存中,然后我们运行预测文件并获取结果?
答案 0 :(得分:0)
您将不得不稍微更改代码结构。
该部分负责将模型一次加载到内存中,并应始终运行以从“前”部分获取输入
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)
这只是草图,因为我不知道您的确切用例。基本上,有一个无限循环来获取文件(或类似文件的路径)并输出预测。
使用subprocess
模块,您可以将路径文件从“前”脚本发送到 Daemon ,以等待路径并返回答案。您必须附加 Daemon 的输入和输出流,才能传递文件路径并从该过程中获取预测。
subprocess.run或Popen可能是执行此操作,查看文档和示例用例(例如here,here等)所需的全部。 / p>
编辑: @Koalapa的答案是另一种选择,因为我们已经说过,它很大程度上取决于您要执行的操作,用户负载等。
答案 1 :(得分:0)
这取决于您的用例。最简单的将是一台Jupyter笔记本,这样您就可以尽情玩耍。如果您在更大的项目中,也许您对使用诸如flask的API REST更感兴趣。