############################ # With *scikit-learn*: print(pipeline.predict(train_data[:1])) print(pipeline.predict_proba(train_data[:1])) ############################### # There are discrepencies for this model because # the tokenization is not exactly the same. # This is a work in progress. ################################## # Display the ONNX graph # ++++++++++++++++++++++ # # Finally, let's see the graph converted with *sklearn-onnx*. pydot_graph = GetPydotGraph( model_onnx.graph, name=model_onnx.graph.name, rankdir="TB", node_producer=GetOpNodeProducer("docstring", color="yellow", fillcolor="yellow", style="filled")) pydot_graph.write_dot("pipeline_tfidf.dot") os.system('dot -O -Gdpi=300 -Tpng pipeline_tfidf.dot') image = plt.imread("pipeline_tfidf.dot.png") fig, ax = plt.subplots(figsize=(40, 20)) ax.imshow(image) ax.axis('off')
print("onnx", results[2]) ################################## # It looks good. # # Display the ONNX graph # ++++++++++++++++++++++ pydot_graph = GetPydotGraph(model_onnx.graph, name=model_onnx.graph.name, rankdir="TB", node_producer=GetOpNodeProducer("docstring", color="yellow", fillcolor="yellow", style="filled")) pydot_graph.write_dot("validator_classifier.dot") os.system('dot -O -Gdpi=300 -Tpng validator_classifier.dot') image = plt.imread("validator_classifier.dot.png") fig, ax = plt.subplots(figsize=(40, 20)) ax.imshow(image) ax.axis('off') ################################# # **Versions used for this example** print("numpy:", np.__version__) print("scikit-learn:", sklearn.__version__) print("onnx: ", onnx.__version__) print("onnxruntime: ", rt.__version__)
import numpy sess = rt.InferenceSession("pipeline_titanic.onnx") pred_onx = sess.run(None, inputs) print("predict", pred_onx[0][:5]) print("predict_proba", pred_onx[1][:1]) ################################## # Display the ONNX graph # ++++++++++++++++++++++ # # Finally, let's see the graph converted with *sklearn-onnx*. from onnx.tools.net_drawer import GetPydotGraph, GetOpNodeProducer pydot_graph = GetPydotGraph(model_onnx.graph, name=model_onnx.graph.name, rankdir="TB", node_producer=GetOpNodeProducer("docstring", color="yellow", fillcolor="yellow", style="filled")) pydot_graph.write_dot("pipeline_titanic.dot") import os os.system('dot -O -Gdpi=300 -Tpng pipeline_titanic.dot') import matplotlib.pyplot as plt image = plt.imread("pipeline_titanic.dot.png") fig, ax = plt.subplots(figsize=(40, 20)) ax.imshow(image) ax.axis('off')
onx2 = to_onnx(woe2, X) sess = InferenceSession(onx2.SerializeToString()) print(sess.run(None, {'X': X})[0]) ################################################ # ONNX Graphs # +++++++++++ # # onehot=False pydot_graph = GetPydotGraph( onx1.graph, name=onx1.graph.name, rankdir="TB", node_producer=GetOpNodeProducer( "docstring", color="yellow", fillcolor="yellow", style="filled")) pydot_graph.write_dot("woe1.dot") os.system('dot -O -Gdpi=300 -Tpng woe1.dot') image = plt.imread("woe1.dot.png") fig, ax = plt.subplots(figsize=(10, 10)) ax.imshow(image) ax.axis('off') ####################################### # onehot=True pydot_graph = GetPydotGraph( onx2.graph, name=onx2.graph.name, rankdir="TB", node_producer=GetOpNodeProducer( "docstring", color="yellow", fillcolor="yellow", style="filled"))
def test_pipeline_column_transformer(self): iris = datasets.load_iris() X = iris.data[:, :3] y = iris.target X_train = pandas.DataFrame(X, columns=["vA", "vB", "vC"]) X_train["vcat"] = X_train["vA"].apply(lambda x: "cat1" if x > 0.5 else "cat2") X_train["vcat2"] = X_train["vB"].apply(lambda x: "cat3" if x > 0.5 else "cat4") y_train = y % 2 numeric_features = [0, 1, 2] # ["vA", "vB", "vC"] categorical_features = [3, 4] # ["vcat", "vcat2"] classifier = LogisticRegression( C=0.01, class_weight=dict(zip([False, True], [0.2, 0.8])), n_jobs=1, max_iter=10, solver="lbfgs", tol=1e-3) numeric_transformer = Pipeline(steps=[ ("imputer", SimpleImputer(strategy="median")), ("scaler", StandardScaler()), ]) categorical_transformer = Pipeline(steps=[ ( "onehot", OneHotEncoder(sparse=True, handle_unknown="ignore"), ), ( "tsvd", TruncatedSVD(n_components=1, algorithm="arpack", tol=1e-4), ), ]) preprocessor = ColumnTransformer(transformers=[ ("num", numeric_transformer, numeric_features), ("cat", categorical_transformer, categorical_features), ]) model = Pipeline(steps=[("precprocessor", preprocessor), ("classifier", classifier)]) model.fit(X_train, y_train) initial_type = [ ("numfeat", FloatTensorType([None, 3])), ("strfeat", StringTensorType([None, 2])), ] X_train = X_train[:11] model_onnx = convert_sklearn(model, initial_types=initial_type, target_opset=TARGET_OPSET) dump_data_and_model( X_train, model, model_onnx, basename="SklearnPipelineColumnTransformerPipeliner") if __name__ == "__main__": from onnx.tools.net_drawer import GetPydotGraph, GetOpNodeProducer pydot_graph = GetPydotGraph( model_onnx.graph, name=model_onnx.graph.name, rankdir="TP", node_producer=GetOpNodeProducer("docstring")) pydot_graph.write_dot("graph.dot") import os os.system("dot -O -G=300 -Tpng graph.dot")
Y = predict_with_onnxruntime(model_def, X) print(Y) ################################## # Display the ONNX graph # ++++++++++++++++++++++ pydot_graph = GetPydotGraph(model_def.graph, name=model_def.graph.name, rankdir="TB", node_producer=GetOpNodeProducer("docstring", color="yellow", fillcolor="yellow", style="filled")) pydot_graph.write_dot("pipeline_transpose2x.dot") os.system('dot -O -Gdpi=300 -Tpng pipeline_transpose2x.dot') image = plt.imread("pipeline_transpose2x.dot.png") fig, ax = plt.subplots(figsize=(40, 20)) ax.imshow(image) ax.axis('off') ################################# # **Versions used for this example** import sklearn # noqa print("numpy:", numpy.__version__) print("scikit-learn:", sklearn.__version__) import skl2onnx # noqa
with open("TfidfVectorizer.onnx", "wb") as f: f.write(model_onnx.SerializeToString()) ########################### # Visualize # +++++++++ from onnx.tools.net_drawer import GetPydotGraph, GetOpNodeProducer # noqa pydot_graph = GetPydotGraph(model_onnx.graph, name=model_onnx.graph.name, rankdir="TB", node_producer=GetOpNodeProducer("docstring", color="yellow", fillcolor="yellow", style="filled")) pydot_graph.write_dot("tfidfvectorizer.dot") import os # noqa os.system('dot -O -Gdpi=300 -Tpng tfidfvectorizer.dot') import matplotlib.pyplot as plt # noqa image = plt.imread("tfidfvectorizer.dot.png") fig, ax = plt.subplots(figsize=(40, 20)) ax.imshow(image) ax.axis('off') ########################### # Visualize intermediate outputs # ++++++++++++++++++++++++++++++ from skonnxrt.sklapi import OnnxTransformer # noqa
################################## # Display the ONNX graph # ++++++++++++++++++++++ # # Finally, let's see the graph converted with *sklearn-onnx*. from onnx.tools.net_drawer import GetPydotGraph, GetOpNodeProducer # noqa pydot_graph = GetPydotGraph(onx.graph, name=onx.graph.name, rankdir="TB", node_producer=GetOpNodeProducer("docstring", color="yellow", fillcolor="yellow", style="filled")) pydot_graph.write_dot("pipeline_onnx_mixin.dot") import os # noqa os.system('dot -O -Gdpi=300 -Tpng pipeline_onnx_mixin.dot') import matplotlib.pyplot as plt # noqa image = plt.imread("pipeline_onnx_mixin.dot.png") fig, ax = plt.subplots(figsize=(40, 20)) ax.imshow(image) ax.axis('off') ################################# # **Versions used for this example** import numpy, sklearn # noqa print("numpy:", numpy.__version__)
from onnx import ModelProto model = ModelProto() with open(example1, "rb") as fid: content = fid.read() model.ParseFromString(content) ################################### # We convert it into a graph. from onnx.tools.net_drawer import GetOpNodeProducer, GetPydotGraph pydot_graph = GetPydotGraph(model.graph, name=model.graph.name, rankdir="LR", node_producer=GetOpNodeProducer("docstring")) pydot_graph.write_dot("graph.dot") ####################################### # Then into an image import os os.system("dot -O -Tpng graph.dot") ################################ # Which we display... import matplotlib.pyplot as plt image = plt.imread("graph.dot.png") plt.imshow(image)
# Display the ONNX graph # ++++++++++++++++++++++ # # Finally, let's see the graph converted with *onnxmltools*. import os import matplotlib.pyplot as plt from onnx.tools.net_drawer import GetPydotGraph, GetOpNodeProducer pydot_graph = GetPydotGraph(onx.graph, name=onx.graph.name, rankdir="TB", node_producer=GetOpNodeProducer("docstring", color="yellow", fillcolor="yellow", style="filled")) pydot_graph.write_dot("model.dot") os.system('dot -O -Gdpi=300 -Tpng model.dot') image = plt.imread("model.dot.png") fig, ax = plt.subplots(figsize=(40, 20)) ax.imshow(image) ax.axis('off') ################################# # **Versions used for this example** print("numpy:", numpy.__version__) print("scikit-learn:", sklearn.__version__) print("onnx: ", onnx.__version__) print("onnxruntime: ", rt.__version__)