簡體   English   中英

如何將具有文件外依賴項的 sklearn 模型保存到磁盤?

[英]How to save to disk an sklearn model with its out-of-file dependencies?

我想將 sklearn 管道保存到磁盤,其中包括自定義預處理和 RandomForestClassifier 以及保存文件中的所有依賴項。如果沒有此功能,我必須將所有依賴項(自定義模塊)復制到我想調用的任何地方的同一文件夾中這個模型(在我的情況下是在遠程服務器上)。

預處理器在一個類中定義,該類位於我項目的同一文件夾中的另一個文件 ( preprocessing.py ) 中。 所以我可以通過import訪問它。

培訓.py

from preprocessing import Preprocessor

from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
import pickle

clf = Pipeline([
("preprocessing", Preprocessor()),
("model", RandomForestClassifier())
])

# some fitting of the classifier
# ...

# Export
with open(savepath, "wb") as handle:
    pickle.dump(clf, handle, protocol=pickle.HIGHEST_PROTOCOL)

我嘗試了泡菜(及其一些變體)、蒔蘿和 joblib,但這不起作用。 當我在其他地方導入 .pkl 時(比如在我的遠程服務器上)。 我必須在架構中有一個相同的preprocessing.py ......這很痛苦。

我希望在其他地方有另一個文件:
遠程文件

import pickle

with open(savepath, "rb") as handle:
     model = pickle.load(handle)

print(model.predict(some_matrix))

但是這段代碼目前給了我一個錯誤,因為它沒有找到預處理器類......

我現在面臨同樣的問題。 為了解決這個問題,我將使用設置工具將我的管道/模型及其所有依賴項(預處理類)轉換為 Python 模塊,以便它是自包含的並且可以在任何地方運行(遠程服務器/docker 容器/VM。

我目前正在經歷這個過程,如果這是你感興趣的事情,我可以在我取得進展時用詳細說明的其他步驟做出回應。

我不確定您使用的工具是什么,但是 mlflow 有一個功能可以解決這個問題,這幾乎將所有依賴文件保存為一個包,並且在部署模型時,它會連同它的所有依賴項一起完成

跟隨這篇文章應該會有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM