我正在尝试将训练有素的scikit-learn分类器转换为Docker容器。 我在github上找到了sklearn2docker项目,但失败了。
我从以下代码生成test.py
脚本:
from pandas import DataFrame
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
iris = load_iris()
input_df = DataFrame(data=iris['data'], columns=iris['feature_names'])
clf = DecisionTreeClassifier(max_depth=2)
clf.fit(input_df.values, iris['target'])
from sklearn2docker.constructor import Sklearn2Docker
s2d = Sklearn2Docker(
classifier=clf,
feature_names=iris['feature_names'],
class_names=iris['target_names'].tolist()
)
s2d.save(name="classifier", tag="iris")
python test.py
运行脚本并生成一个容器。
使用以下代码进行预测时发生错误:
from os import system
system("docker run -d -p 5000:5000 classifier:iris && sleep 5")
from requests import post
from pandas import read_json
request = post("http://localhost:5000/predict_proba/split",
json=input_df.to_json(orient="split"))
result = read_json(request.content.decode(), orient="split")
print(result.head())
错误如下:
requests.exceptions.ConnectionError:HTTPConnectionPool(host ='localhost',port = 5000):url超过了最大重试次数:/ predict / split(由NewConnectionError(':导致无法建立新连接:[Errno 111]连接被拒绝',))
我还尝试直接使用sklearn2docker目录中Dockerfile
中的requirements.txt
和constructor.py
,使用app.py
目录中的sklearn2docker
生成容器,但没有成功。