Logging, verbose#

The conversion of a pipeline fails if it contains an object without any associated converter. It may also fails if one of the object is mapped by a custom converter. If the error message is not explicit enough, it is possible to enable logging.

Train a model#

A very basic example using random forest and the iris dataset.

import logging
import numpy
import onnx
import onnxruntime as rt
import sklearn
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from skl2onnx.common.data_types import FloatTensorType
from skl2onnx import convert_sklearn
import skl2onnx

iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y)
clr = DecisionTreeClassifier()
clr.fit(X_train, y_train)
print(clr)
DecisionTreeClassifier()

Convert a model into ONNX#

initial_type = [('float_input', FloatTensorType([None, 4]))]
onx = convert_sklearn(clr, initial_types=initial_type,
                      target_opset=12)


sess = rt.InferenceSession(onx.SerializeToString())
input_name = sess.get_inputs()[0].name
label_name = sess.get_outputs()[0].name
pred_onx = sess.run([label_name],
                    {input_name: X_test.astype(numpy.float32)})[0]
print(pred_onx)
[2 2 2 1 2 1 0 1 2 2 2 2 0 2 2 2 1 0 1 1 0 0 0 1 1 0 1 0 0 1 1 2 0 0 1 0 1
 0]

Conversion with parameter verbose#

verbose is a parameter which prints messages on the standard output. It tells which converter is called. verbose=1 usually means what skl2onnx is doing to convert a pipeline. verbose=2+ is reserved for information within converters.

convert_sklearn(clr, initial_types=initial_type, target_opset=12, verbose=1)
[convert_sklearn] parse_sklearn_model
[convert_sklearn] convert_topology
[convert_operators] begin
[convert_operators] iteration 1 - n_vars=0 n_ops=2
[call_converter] call converter for 'SklearnDecisionTreeClassifier'.
[call_converter] call converter for 'SklearnZipMap'.
[convert_operators] end iter: 1 - n_vars=5
[convert_operators] iteration 2 - n_vars=5 n_ops=2
[convert_operators] end iter: 2 - n_vars=5
[convert_operators] end.
[_update_domain_version] +opset 0: name='', version=9
[_update_domain_version] +opset 1: name='ai.onnx.ml', version=1
[convert_sklearn] end

ir_version: 7
producer_name: "skl2onnx"
producer_version: "1.14.0"
domain: "ai.onnx"
model_version: 0
doc_string: ""
graph {
  node {
    input: "float_input"
    output: "label"
    output: "probabilities"
    name: "TreeEnsembleClassifier"
    op_type: "TreeEnsembleClassifier"
    attribute {
      name: "class_ids"
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      type: INTS
    }
    attribute {
      name: "class_nodeids"
      ints: 1
      ints: 1
      ints: 1
      ints: 5
      ints: 5
      ints: 5
      ints: 6
      ints: 6
      ints: 6
      ints: 7
      ints: 7
      ints: 7
      ints: 10
      ints: 10
      ints: 10
      ints: 12
      ints: 12
      ints: 12
      ints: 14
      ints: 14
      ints: 14
      ints: 15
      ints: 15
      ints: 15
      ints: 16
      ints: 16
      ints: 16
      type: INTS
    }
    attribute {
      name: "class_treeids"
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "class_weights"
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      type: FLOATS
    }
    attribute {
      name: "classlabels_int64s"
      ints: 0
      ints: 1
      ints: 2
      type: INTS
    }
    attribute {
      name: "nodes_falsenodeids"
      ints: 2
      ints: 0
      ints: 8
      ints: 7
      ints: 6
      ints: 0
      ints: 0
      ints: 0
      ints: 16
      ints: 11
      ints: 0
      ints: 13
      ints: 0
      ints: 15
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "nodes_featureids"
      ints: 2
      ints: 0
      ints: 2
      ints: 0
      ints: 2
      ints: 0
      ints: 0
      ints: 0
      ints: 3
      ints: 2
      ints: 0
      ints: 3
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "nodes_hitrates"
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      type: FLOATS
    }
    attribute {
      name: "nodes_missing_value_tracks_true"
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "nodes_modes"
      strings: "BRANCH_LEQ"
      strings: "LEAF"
      strings: "BRANCH_LEQ"
      strings: "BRANCH_LEQ"
      strings: "BRANCH_LEQ"
      strings: "LEAF"
      strings: "LEAF"
      strings: "LEAF"
      strings: "BRANCH_LEQ"
      strings: "BRANCH_LEQ"
      strings: "LEAF"
      strings: "BRANCH_LEQ"
      strings: "LEAF"
      strings: "BRANCH_LEQ"
      strings: "LEAF"
      strings: "LEAF"
      strings: "LEAF"
      type: STRINGS
    }
    attribute {
      name: "nodes_nodeids"
      ints: 0
      ints: 1
      ints: 2
      ints: 3
      ints: 4
      ints: 5
      ints: 6
      ints: 7
      ints: 8
      ints: 9
      ints: 10
      ints: 11
      ints: 12
      ints: 13
      ints: 14
      ints: 15
      ints: 16
      type: INTS
    }
    attribute {
      name: "nodes_treeids"
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "nodes_truenodeids"
      ints: 1
      ints: 0
      ints: 3
      ints: 4
      ints: 5
      ints: 0
      ints: 0
      ints: 0
      ints: 9
      ints: 10
      ints: 0
      ints: 12
      ints: 0
      ints: 14
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "nodes_values"
      floats: 2.5999999046325684
      floats: 0.0
      floats: 4.849999904632568
      floats: 4.949999809265137
      floats: 3.8999998569488525
      floats: 0.0
      floats: 0.0
      floats: 0.0
      floats: 1.75
      floats: 4.949999809265137
      floats: 0.0
      floats: 1.5499999523162842
      floats: 0.0
      floats: 6.949999809265137
      floats: 0.0
      floats: 0.0
      floats: 0.0
      type: FLOATS
    }
    attribute {
      name: "post_transform"
      s: "NONE"
      type: STRING
    }
    domain: "ai.onnx.ml"
  }
  node {
    input: "probabilities"
    output: "output_probability"
    name: "ZipMap"
    op_type: "ZipMap"
    attribute {
      name: "classlabels_int64s"
      ints: 0
      ints: 1
      ints: 2
      type: INTS
    }
    domain: "ai.onnx.ml"
  }
  node {
    input: "label"
    output: "output_label"
    name: "Cast"
    op_type: "Cast"
    attribute {
      name: "to"
      i: 7
      type: INT
    }
    domain: ""
  }
  name: "deb1b65745284802904d0b7988deb9d2"
  input {
    name: "float_input"
    type {
      tensor_type {
        elem_type: 1
        shape {
          dim {
          }
          dim {
            dim_value: 4
          }
        }
      }
    }
  }
  output {
    name: "output_label"
    type {
      tensor_type {
        elem_type: 7
        shape {
          dim {
          }
        }
      }
    }
  }
  output {
    name: "output_probability"
    type {
      sequence_type {
        elem_type {
          map_type {
            key_type: 7
            value_type {
              tensor_type {
                elem_type: 1
              }
            }
          }
        }
      }
    }
  }
}
opset_import {
  domain: ""
  version: 9
}
opset_import {
  domain: "ai.onnx.ml"
  version: 1
}

Conversion with logging#

This is very detailed logging. It which operators or variables (output of converters) is processed, which node is created… This information may be useful when a custom converter is being implemented.

logger = logging.getLogger('skl2onnx')
logger.setLevel(logging.DEBUG)
logging.basicConfig(level=logging.DEBUG)

convert_sklearn(clr, initial_types=initial_type, target_opset=12)
DEBUG:skl2onnx:[Var] +Variable('float_input', 'float_input', type=FloatTensorType(shape=[None, 4]))
DEBUG:skl2onnx:[Var] update is_root=True for Variable('float_input', 'float_input', type=FloatTensorType(shape=[None, 4]))
DEBUG:skl2onnx:[parsing] found alias='SklearnDecisionTreeClassifier' for type=<class 'sklearn.tree._classes.DecisionTreeClassifier'>.
DEBUG:skl2onnx:[Op] +Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='', outputs='', raw_operator=DecisionTreeClassifier())
DEBUG:skl2onnx:[Op] add In Variable('float_input', 'float_input', type=FloatTensorType(shape=[None, 4])) to Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='', raw_operator=DecisionTreeClassifier())
DEBUG:skl2onnx:[Var] +Variable('label', 'label', type=Int64TensorType(shape=[]))
DEBUG:skl2onnx:[Var] +Variable('probabilities', 'probabilities', type=FloatTensorType(shape=[]))
DEBUG:skl2onnx:[Var] set parent for Variable('label', 'label', type=Int64TensorType(shape=[])), parent=Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='', raw_operator=DecisionTreeClassifier())
DEBUG:skl2onnx:[Op] add Out Variable('label', 'label', type=Int64TensorType(shape=[])) to Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='label', raw_operator=DecisionTreeClassifier())
DEBUG:skl2onnx:[Var] set parent for Variable('probabilities', 'probabilities', type=FloatTensorType(shape=[])), parent=Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='label', raw_operator=DecisionTreeClassifier())
DEBUG:skl2onnx:[Op] add Out Variable('probabilities', 'probabilities', type=FloatTensorType(shape=[])) to Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='label,probabilities', raw_operator=DecisionTreeClassifier())
DEBUG:skl2onnx:[Op] +Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='', outputs='', raw_operator=None)
DEBUG:skl2onnx:[Var] +Variable('output_label', 'output_label', type=Int64TensorType(shape=[None]))
DEBUG:skl2onnx:[Var] set parent for Variable('output_label', 'output_label', type=Int64TensorType(shape=[None])), parent=Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='', raw_operator=None)
DEBUG:skl2onnx:[Op] add Out Variable('output_label', 'output_label', type=Int64TensorType(shape=[None])) to Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='output_label', raw_operator=None)
DEBUG:skl2onnx:[Var] +Variable('output_probability', 'output_probability', type=SequenceType(element_type=DictionaryType(key_type=Int64TensorType(shape=[None]), value_type=FloatTensorType(shape=[]))))
DEBUG:skl2onnx:[Var] set parent for Variable('output_probability', 'output_probability', type=SequenceType(element_type=DictionaryType(key_type=Int64TensorType(shape=[None]), value_type=FloatTensorType(shape=[])))), parent=Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='output_label', raw_operator=None)
DEBUG:skl2onnx:[Op] add Out Variable('output_probability', 'output_probability', type=SequenceType(element_type=DictionaryType(key_type=Int64TensorType(shape=[None]), value_type=FloatTensorType(shape=[])))) to Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='output_label,output_probability', raw_operator=None)
DEBUG:skl2onnx:[Op] update is_evaluated=True for Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='output_label,output_probability', raw_operator=None)
DEBUG:skl2onnx:[Var] update is_leaf=True for Variable('output_label', 'output_label', type=Int64TensorType(shape=[None]))
DEBUG:skl2onnx:[Var] update is_leaf=True for Variable('output_probability', 'output_probability', type=SequenceType(element_type=DictionaryType(key_type=Int64TensorType(shape=[None]), value_type=FloatTensorType(shape=[]))))
DEBUG:skl2onnx:[Var] update is_fed=True for Variable('float_input', 'float_input', type=FloatTensorType(shape=[None, 4])), parent=None
DEBUG:skl2onnx:[Var] update is_fed=False for Variable('label', 'label', type=Int64TensorType(shape=[])), parent=Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='label,probabilities', raw_operator=DecisionTreeClassifier())
DEBUG:skl2onnx:[Var] update is_fed=False for Variable('probabilities', 'probabilities', type=FloatTensorType(shape=[])), parent=Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='label,probabilities', raw_operator=DecisionTreeClassifier())
DEBUG:skl2onnx:[Var] update is_fed=False for Variable('output_label', 'output_label', type=Int64TensorType(shape=[None])), parent=Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='output_label,output_probability', raw_operator=None)
DEBUG:skl2onnx:[Var] update is_fed=False for Variable('output_probability', 'output_probability', type=SequenceType(element_type=DictionaryType(key_type=Int64TensorType(shape=[None]), value_type=FloatTensorType(shape=[])))), parent=Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='output_label,output_probability', raw_operator=None)
DEBUG:skl2onnx:[Op] update is_evaluated=False for Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='label,probabilities', raw_operator=DecisionTreeClassifier())
DEBUG:skl2onnx:[Op] update is_evaluated=False for Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='output_label,output_probability', raw_operator=None)
DEBUG:skl2onnx:[Shape2] call infer_types for Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='label,probabilities', raw_operator=DecisionTreeClassifier())
DEBUG:skl2onnx:[Shape-a] Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='label,probabilities', raw_operator=DecisionTreeClassifier()) fed 'True' - 'FalseFalse'
DEBUG:skl2onnx:[Var] update type for Variable('label', 'label', type=Int64TensorType(shape=[]))
DEBUG:skl2onnx:[Shape-b] Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='label,probabilities', raw_operator=DecisionTreeClassifier()) inputs=[Variable('float_input', 'float_input', type=FloatTensorType(shape=[None, 4]))] - outputs=[Variable('label', 'label', type=Int64TensorType(shape=[None])), Variable('probabilities', 'probabilities', type=FloatTensorType(shape=[None, 3]))]
DEBUG:skl2onnx:[Conv] call Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='label,probabilities', raw_operator=DecisionTreeClassifier()) fed 'True' - 'FalseFalse'
DEBUG:skl2onnx:[Node] 'TreeEnsembleClassifier' - 'float_input' -> 'label,probabilities' (name='TreeEnsembleClassifier')
DEBUG:skl2onnx:[Conv] end - Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='label,probabilities', raw_operator=DecisionTreeClassifier())
DEBUG:skl2onnx:[Op] update is_evaluated=True for Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='label,probabilities', raw_operator=DecisionTreeClassifier())
DEBUG:skl2onnx:[Var] update is_fed=True for Variable('label', 'label', type=Int64TensorType(shape=[None])), parent=Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='label,probabilities', raw_operator=DecisionTreeClassifier())
DEBUG:skl2onnx:[Var] update is_fed=True for Variable('probabilities', 'probabilities', type=FloatTensorType(shape=[None, 3])), parent=Operator(type='SklearnDecisionTreeClassifier', onnx_name='SklearnDecisionTreeClassifier', inputs='float_input', outputs='label,probabilities', raw_operator=DecisionTreeClassifier())
DEBUG:skl2onnx:[Shape2] call infer_types for Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='output_label,output_probability', raw_operator=None)
DEBUG:skl2onnx:[Shape-a] Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='output_label,output_probability', raw_operator=None) fed 'TrueTrue' - 'FalseFalse'
DEBUG:skl2onnx:[Var] update type for Variable('output_label', 'output_label', type=Int64TensorType(shape=[None]))
DEBUG:skl2onnx:[Shape-b] Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='output_label,output_probability', raw_operator=None) inputs=[Variable('label', 'label', type=Int64TensorType(shape=[None])), Variable('probabilities', 'probabilities', type=FloatTensorType(shape=[None, 3]))] - outputs=[Variable('output_label', 'output_label', type=Int64TensorType(shape=[None])), Variable('output_probability', 'output_probability', type=SequenceType(element_type=DictionaryType(key_type=Int64TensorType(shape=[None]), value_type=FloatTensorType(shape=[]))))]
DEBUG:skl2onnx:[Conv] call Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='output_label,output_probability', raw_operator=None) fed 'TrueTrue' - 'FalseFalse'
DEBUG:skl2onnx:[Node] 'Cast' - 'label' -> 'output_label' (name='Cast')
DEBUG:skl2onnx:[Node] 'ZipMap' - 'probabilities' -> 'output_probability' (name='ZipMap')
DEBUG:skl2onnx:[Conv] end - Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='output_label,output_probability', raw_operator=None)
DEBUG:skl2onnx:[Op] update is_evaluated=True for Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='output_label,output_probability', raw_operator=None)
DEBUG:skl2onnx:[Var] update is_fed=True for Variable('output_label', 'output_label', type=Int64TensorType(shape=[None])), parent=Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='output_label,output_probability', raw_operator=None)
DEBUG:skl2onnx:[Var] update is_fed=True for Variable('output_probability', 'output_probability', type=SequenceType(element_type=DictionaryType(key_type=Int64TensorType(shape=[None]), value_type=FloatTensorType(shape=[])))), parent=Operator(type='SklearnZipMap', onnx_name='SklearnZipMap', inputs='label,probabilities', outputs='output_label,output_probability', raw_operator=None)

ir_version: 7
producer_name: "skl2onnx"
producer_version: "1.14.0"
domain: "ai.onnx"
model_version: 0
doc_string: ""
graph {
  node {
    input: "float_input"
    output: "label"
    output: "probabilities"
    name: "TreeEnsembleClassifier"
    op_type: "TreeEnsembleClassifier"
    attribute {
      name: "class_ids"
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      type: INTS
    }
    attribute {
      name: "class_nodeids"
      ints: 1
      ints: 1
      ints: 1
      ints: 5
      ints: 5
      ints: 5
      ints: 6
      ints: 6
      ints: 6
      ints: 7
      ints: 7
      ints: 7
      ints: 10
      ints: 10
      ints: 10
      ints: 12
      ints: 12
      ints: 12
      ints: 14
      ints: 14
      ints: 14
      ints: 15
      ints: 15
      ints: 15
      ints: 16
      ints: 16
      ints: 16
      type: INTS
    }
    attribute {
      name: "class_treeids"
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "class_weights"
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      type: FLOATS
    }
    attribute {
      name: "classlabels_int64s"
      ints: 0
      ints: 1
      ints: 2
      type: INTS
    }
    attribute {
      name: "nodes_falsenodeids"
      ints: 2
      ints: 0
      ints: 8
      ints: 7
      ints: 6
      ints: 0
      ints: 0
      ints: 0
      ints: 16
      ints: 11
      ints: 0
      ints: 13
      ints: 0
      ints: 15
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "nodes_featureids"
      ints: 2
      ints: 0
      ints: 2
      ints: 0
      ints: 2
      ints: 0
      ints: 0
      ints: 0
      ints: 3
      ints: 2
      ints: 0
      ints: 3
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "nodes_hitrates"
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      type: FLOATS
    }
    attribute {
      name: "nodes_missing_value_tracks_true"
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "nodes_modes"
      strings: "BRANCH_LEQ"
      strings: "LEAF"
      strings: "BRANCH_LEQ"
      strings: "BRANCH_LEQ"
      strings: "BRANCH_LEQ"
      strings: "LEAF"
      strings: "LEAF"
      strings: "LEAF"
      strings: "BRANCH_LEQ"
      strings: "BRANCH_LEQ"
      strings: "LEAF"
      strings: "BRANCH_LEQ"
      strings: "LEAF"
      strings: "BRANCH_LEQ"
      strings: "LEAF"
      strings: "LEAF"
      strings: "LEAF"
      type: STRINGS
    }
    attribute {
      name: "nodes_nodeids"
      ints: 0
      ints: 1
      ints: 2
      ints: 3
      ints: 4
      ints: 5
      ints: 6
      ints: 7
      ints: 8
      ints: 9
      ints: 10
      ints: 11
      ints: 12
      ints: 13
      ints: 14
      ints: 15
      ints: 16
      type: INTS
    }
    attribute {
      name: "nodes_treeids"
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "nodes_truenodeids"
      ints: 1
      ints: 0
      ints: 3
      ints: 4
      ints: 5
      ints: 0
      ints: 0
      ints: 0
      ints: 9
      ints: 10
      ints: 0
      ints: 12
      ints: 0
      ints: 14
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "nodes_values"
      floats: 2.5999999046325684
      floats: 0.0
      floats: 4.849999904632568
      floats: 4.949999809265137
      floats: 3.8999998569488525
      floats: 0.0
      floats: 0.0
      floats: 0.0
      floats: 1.75
      floats: 4.949999809265137
      floats: 0.0
      floats: 1.5499999523162842
      floats: 0.0
      floats: 6.949999809265137
      floats: 0.0
      floats: 0.0
      floats: 0.0
      type: FLOATS
    }
    attribute {
      name: "post_transform"
      s: "NONE"
      type: STRING
    }
    domain: "ai.onnx.ml"
  }
  node {
    input: "label"
    output: "output_label"
    name: "Cast"
    op_type: "Cast"
    attribute {
      name: "to"
      i: 7
      type: INT
    }
    domain: ""
  }
  node {
    input: "probabilities"
    output: "output_probability"
    name: "ZipMap"
    op_type: "ZipMap"
    attribute {
      name: "classlabels_int64s"
      ints: 0
      ints: 1
      ints: 2
      type: INTS
    }
    domain: "ai.onnx.ml"
  }
  name: "d4e54234eafe4b21ad1417b49809c723"
  input {
    name: "float_input"
    type {
      tensor_type {
        elem_type: 1
        shape {
          dim {
          }
          dim {
            dim_value: 4
          }
        }
      }
    }
  }
  output {
    name: "output_label"
    type {
      tensor_type {
        elem_type: 7
        shape {
          dim {
          }
        }
      }
    }
  }
  output {
    name: "output_probability"
    type {
      sequence_type {
        elem_type {
          map_type {
            key_type: 7
            value_type {
              tensor_type {
                elem_type: 1
              }
            }
          }
        }
      }
    }
  }
}
opset_import {
  domain: ""
  version: 9
}
opset_import {
  domain: "ai.onnx.ml"
  version: 1
}

And to disable it.

logger.setLevel(logging.INFO)
logging.basicConfig(level=logging.INFO)

convert_sklearn(clr, initial_types=initial_type, target_opset=12)
ir_version: 7
producer_name: "skl2onnx"
producer_version: "1.14.0"
domain: "ai.onnx"
model_version: 0
doc_string: ""
graph {
  node {
    input: "float_input"
    output: "label"
    output: "probabilities"
    name: "TreeEnsembleClassifier"
    op_type: "TreeEnsembleClassifier"
    attribute {
      name: "class_ids"
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      ints: 0
      ints: 1
      ints: 2
      type: INTS
    }
    attribute {
      name: "class_nodeids"
      ints: 1
      ints: 1
      ints: 1
      ints: 5
      ints: 5
      ints: 5
      ints: 6
      ints: 6
      ints: 6
      ints: 7
      ints: 7
      ints: 7
      ints: 10
      ints: 10
      ints: 10
      ints: 12
      ints: 12
      ints: 12
      ints: 14
      ints: 14
      ints: 14
      ints: 15
      ints: 15
      ints: 15
      ints: 16
      ints: 16
      ints: 16
      type: INTS
    }
    attribute {
      name: "class_treeids"
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "class_weights"
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      floats: 0.0
      floats: 0.0
      floats: 1.0
      type: FLOATS
    }
    attribute {
      name: "classlabels_int64s"
      ints: 0
      ints: 1
      ints: 2
      type: INTS
    }
    attribute {
      name: "nodes_falsenodeids"
      ints: 2
      ints: 0
      ints: 8
      ints: 7
      ints: 6
      ints: 0
      ints: 0
      ints: 0
      ints: 16
      ints: 11
      ints: 0
      ints: 13
      ints: 0
      ints: 15
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "nodes_featureids"
      ints: 2
      ints: 0
      ints: 2
      ints: 0
      ints: 2
      ints: 0
      ints: 0
      ints: 0
      ints: 3
      ints: 2
      ints: 0
      ints: 3
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "nodes_hitrates"
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      floats: 1.0
      type: FLOATS
    }
    attribute {
      name: "nodes_missing_value_tracks_true"
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "nodes_modes"
      strings: "BRANCH_LEQ"
      strings: "LEAF"
      strings: "BRANCH_LEQ"
      strings: "BRANCH_LEQ"
      strings: "BRANCH_LEQ"
      strings: "LEAF"
      strings: "LEAF"
      strings: "LEAF"
      strings: "BRANCH_LEQ"
      strings: "BRANCH_LEQ"
      strings: "LEAF"
      strings: "BRANCH_LEQ"
      strings: "LEAF"
      strings: "BRANCH_LEQ"
      strings: "LEAF"
      strings: "LEAF"
      strings: "LEAF"
      type: STRINGS
    }
    attribute {
      name: "nodes_nodeids"
      ints: 0
      ints: 1
      ints: 2
      ints: 3
      ints: 4
      ints: 5
      ints: 6
      ints: 7
      ints: 8
      ints: 9
      ints: 10
      ints: 11
      ints: 12
      ints: 13
      ints: 14
      ints: 15
      ints: 16
      type: INTS
    }
    attribute {
      name: "nodes_treeids"
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "nodes_truenodeids"
      ints: 1
      ints: 0
      ints: 3
      ints: 4
      ints: 5
      ints: 0
      ints: 0
      ints: 0
      ints: 9
      ints: 10
      ints: 0
      ints: 12
      ints: 0
      ints: 14
      ints: 0
      ints: 0
      ints: 0
      type: INTS
    }
    attribute {
      name: "nodes_values"
      floats: 2.5999999046325684
      floats: 0.0
      floats: 4.849999904632568
      floats: 4.949999809265137
      floats: 3.8999998569488525
      floats: 0.0
      floats: 0.0
      floats: 0.0
      floats: 1.75
      floats: 4.949999809265137
      floats: 0.0
      floats: 1.5499999523162842
      floats: 0.0
      floats: 6.949999809265137
      floats: 0.0
      floats: 0.0
      floats: 0.0
      type: FLOATS
    }
    attribute {
      name: "post_transform"
      s: "NONE"
      type: STRING
    }
    domain: "ai.onnx.ml"
  }
  node {
    input: "label"
    output: "output_label"
    name: "Cast"
    op_type: "Cast"
    attribute {
      name: "to"
      i: 7
      type: INT
    }
    domain: ""
  }
  node {
    input: "probabilities"
    output: "output_probability"
    name: "ZipMap"
    op_type: "ZipMap"
    attribute {
      name: "classlabels_int64s"
      ints: 0
      ints: 1
      ints: 2
      type: INTS
    }
    domain: "ai.onnx.ml"
  }
  name: "6f56fd8fc39d404ab00fa8fdb2117ac8"
  input {
    name: "float_input"
    type {
      tensor_type {
        elem_type: 1
        shape {
          dim {
          }
          dim {
            dim_value: 4
          }
        }
      }
    }
  }
  output {
    name: "output_label"
    type {
      tensor_type {
        elem_type: 7
        shape {
          dim {
          }
        }
      }
    }
  }
  output {
    name: "output_probability"
    type {
      sequence_type {
        elem_type {
          map_type {
            key_type: 7
            value_type {
              tensor_type {
                elem_type: 1
              }
            }
          }
        }
      }
    }
  }
}
opset_import {
  domain: ""
  version: 9
}
opset_import {
  domain: "ai.onnx.ml"
  version: 1
}

Versions used for this example

print("numpy:", numpy.__version__)
print("scikit-learn:", sklearn.__version__)
print("onnx: ", onnx.__version__)
print("onnxruntime: ", rt.__version__)
print("skl2onnx: ", skl2onnx.__version__)
numpy: 1.23.5
scikit-learn: 1.2.2
onnx:  1.13.1
onnxruntime:  1.14.1
skl2onnx:  1.14.0

Total running time of the script: ( 0 minutes 0.243 seconds)

Gallery generated by Sphinx-Gallery