Skip to content

Instantly share code, notes, and snippets.

@thesps
Created June 4, 2021 13:15
Show Gist options
  • Save thesps/3300125b01b669bf042de0d0e81eeffc to your computer and use it in GitHub Desktop.
Save thesps/3300125b01b669bf042de0d0e81eeffc to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
name: connifer-onnx
channels:
- conda-forge
dependencies:
- python=3.7
- jupyterhub
- pip
- pip:
- jupyter
- git+git://github.com/thesps/conifer.git
- scikit-learn
- onnxmltools
- onnxruntime
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "deba8d77",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.datasets import make_hastie_10_2, fetch_openml\n",
"from sklearn.preprocessing import LabelEncoder, OneHotEncoder, StandardScaler\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.ensemble import GradientBoostingClassifier\n",
"import datetime\n",
"from sklearn.metrics import roc_curve, auc\n",
"from sklearn.metrics import accuracy_score\n",
"from scipy.special import expit\n",
"import numpy as np\n",
"import joblib\n",
"import onnxmltools\n",
"import onnx\n",
"import onnxruntime as rt\n",
"import conifer"
]
},
{
"cell_type": "markdown",
"id": "530f8548",
"metadata": {},
"source": [
"## Part 1\n",
"Generate some random separable data using the sklearn datasets `make_hastie_10_2`. Train a small GradientBoostingClassifier on the dataset and save it. Convert it to ONNX using onnxmltools"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "e8b63a27",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Iter Train Loss Remaining Time \n",
" 1 1.2567 0.08s\n",
" 2 1.1343 0.07s\n",
" 3 1.0224 0.07s\n",
" 4 0.9263 0.06s\n",
" 5 0.8298 0.06s\n",
" 6 0.7321 0.06s\n",
" 7 0.6547 0.05s\n",
" 8 0.6048 0.05s\n",
" 9 0.5653 0.04s\n",
" 10 0.5238 0.04s\n",
" 20 0.2847 0.00s\n"
]
},
{
"data": {
"text/plain": [
"['hastie_bdt.joblib']"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Example BDT creation from: https://scikit-learn.org/stable/modules/ensemble.html\n",
"\n",
"# Make a random dataset from sklearn 'hastie'\n",
"X, y = make_hastie_10_2(random_state=0)\n",
"X_train, X_test = X[:2000], X[2000:]\n",
"y_train, y_test = y[:2000], y[2000:]\n",
"\n",
"# Train a small BDT\n",
"clf = GradientBoostingClassifier(n_estimators=20, learning_rate=1.0,\n",
" max_depth=3, random_state=0, verbose=1).fit(X_train, y_train)\n",
"\n",
"joblib.dump(clf, 'hastie_bdt.joblib')"
]
},
{
"cell_type": "markdown",
"id": "277b4751",
"metadata": {},
"source": [
"Check the accuracy"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "4fafc063",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy: 0.8626\n"
]
}
],
"source": [
"y_pred = clf.predict(X_test)\n",
"accuracy_skl = accuracy_score(y_pred, y_test)\n",
"print(\"Accuracy: {}\".format(accuracy_skl))"
]
},
{
"cell_type": "markdown",
"id": "e30f31c7",
"metadata": {},
"source": [
"### Explore the trees\n",
"This is how we access the tree information (the thresholds, scores and the tree structure) in the scikit-learn converter. In `conifer` we represent the BDT in this way too. The tree structure is flattened into arrays. Each array is one attribute of the tree, and each index represents one node. The `children_left` and `children_right` arrays define the tree structure - the index of the left child of the root node is `children_left[0]`, and the index of its right child is `children_right[0]`.\n",
"\n",
"- The `feature` array defines which input feature is used in that node. `-2` means no feature is used: it is a leaf node. \n",
"- The `threshold` array are the thresholds that those features are compared against (again `-2` means leaf node)\n",
"- The `value` array are the scores that we need to output to make the prediction"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "0131c6a2",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"children_left: [ 1 2 3 -1 -1 6 -1 -1 9 10 -1 -1 -1]\n",
"children_right: [ 8 5 4 -1 -1 7 -1 -1 12 11 -1 -1 -1]\n",
"feature: [ 1 1 1 -2 -2 5 -2 -2 2 1 -2 -2 -2]\n",
"threshold: [ 1.11828619 -1.37190312 -2.10909235 -2. -2. 1.24175555\n",
" -2. -2. 0.94277498 1.52886301 -2. -2.\n",
" -2. ]\n",
"value: [-1.42552636e-16 -3.84930192e-02 2.79196970e-01 1.94346350e+00\n",
" 8.35049420e-01 -7.22245817e-02 -4.22594467e-01 9.52251047e-01\n",
" 2.35478648e-01 1.99016129e-01 3.50626576e-01 1.27179245e+00\n",
" 2.03873598e+00]\n"
]
}
],
"source": [
"for attr in ['children_left', 'children_right', 'feature', 'threshold', 'value']:\n",
" print('{}: {}'.format(attr, getattr(clf.estimators_[0][0].tree_, attr).flatten()))"
]
},
{
"cell_type": "markdown",
"id": "b0fdfe67",
"metadata": {},
"source": [
"## Convert the model with conifer"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "35bd88ee",
"metadata": {},
"outputs": [],
"source": [
"cfg = conifer.backends.vivadohls.auto_config()\n",
"conifer_model_0 = conifer.model(clf, conifer.converters.sklearn, config=cfg)"
]
},
{
"cell_type": "markdown",
"id": "757444f9",
"metadata": {},
"source": [
"## Validate\n",
"If you are using an environment with Vivado, you can execute the conifer model prediction and check that the accuracy is the same as the original model."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "b4d13694",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy sklearn: 0.8626\n",
"Accuracy conifer: 0.8628\n"
]
}
],
"source": [
"conifer_model_0.compile()\n",
"y_pred_hls = expit(conifer_model_0.decision_function(X_test))\n",
"y_pred_hls = np.where(y_pred_hls > 0.5, 1, -1)\n",
"accuracy_hls = accuracy_score(y_pred_hls, y_test)\n",
"print(\"Accuracy sklearn: {}\".format(accuracy_skl))\n",
"print(\"Accuracy conifer: {}\".format(accuracy_hls))"
]
},
{
"cell_type": "markdown",
"id": "8e18cf83",
"metadata": {},
"source": [
"## Explore\n",
"The representation conifer uses is similar to the `scikit-learn` one: arrays of trees, with each attribute represented by an array flattened over the tree nodes."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "2d1dbae6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"children_left: [1, 2, 3, -1, -1, 6, -1, -1, 9, 10, -1, -1, 13, -1, -1]\n",
"children_right: [8, 5, 4, -1, -1, 7, -1, -1, 12, 11, -1, -1, 14, -1, -1]\n",
"feature: [1, 1, 1, -2, -2, 5, -2, -2, 2, 1, -2, -2, -2, -2, -2]\n",
"threshold: [1.1182861924171448, -1.371903121471405, -2.109092354774475, -2.0, -2.0, 1.2417555451393127, -2.0, -2.0, 0.9427749812602997, 1.52886301279068, -2.0, -2.0, -2.0, -2.0, -2.0]\n",
"value: [-1.425526363618701e-16, -0.03849301919720615, 0.27919696969697, 1.9434634950836298, 0.8350494203204105, -0.07222458172457961, -0.42259446679495755, 0.9522510473963219, 0.2354786476868333, 0.19901612903225877, 0.3506265761940063, 1.2717924504079308, 2.0387359836901124, 2.0387359836901124, 2.0387359836901124]\n"
]
}
],
"source": [
"for attr in ['children_left', 'children_right', 'feature', 'threshold', 'value']:\n",
" print('{}: {}'.format(attr, conifer_model_0._ensembleDict['trees'][0][0][attr]))"
]
},
{
"cell_type": "markdown",
"id": "f68ead44",
"metadata": {},
"source": [
"## Convert to ONNX"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "09157f4d",
"metadata": {},
"outputs": [],
"source": [
"from skl2onnx.common.data_types import FloatTensorType\n",
"initial_type = [('float_input', FloatTensorType([None, X_train.shape[1]]))]\n",
"onnx_clf = onnxmltools.convert_sklearn(clf, 'Hastie model', initial_types=initial_type)\n",
"onnx.save(onnx_clf, 'hastie_bdt.onnx')"
]
},
{
"cell_type": "markdown",
"id": "79a3e2a1",
"metadata": {},
"source": [
"Compute the prediction with ONNX Runtime\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "7ab83b6c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy sklearn: 0.8626\n",
"Accuracy onnx: 0.8626\n"
]
}
],
"source": [
"sess = rt.InferenceSession(\"hastie_bdt.onnx\")\n",
"input_name = sess.get_inputs()[0].name\n",
"label_name = sess.get_outputs()[0].name\n",
"y_pred_onnx = sess.run([label_name], {input_name: X_test.astype(np.float32)})[0]\n",
"accuracy_onnx = accuracy_score(y_pred_onnx, y_test)\n",
"print(\"Accuracy sklearn: {}\".format(accuracy_skl))\n",
"print(\"Accuracy onnx: {}\".format(accuracy_onnx))"
]
},
{
"cell_type": "markdown",
"id": "ad390d6c",
"metadata": {},
"source": [
"### Print the ONNX model to see the structure\n",
"The model has one 'node', with attributes like the scikit-learn model"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "37020d1e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"ir_version: 4\n",
"producer_name: \"skl2onnx\"\n",
"producer_version: \"1.8.0\"\n",
"domain: \"ai.onnx\"\n",
"model_version: 0\n",
"doc_string: \"\"\n",
"graph {\n",
" node {\n",
" input: \"float_input\"\n",
" output: \"label\"\n",
" output: \"probabilities\"\n",
" name: \"TreeEnsembleClassifier\"\n",
" op_type: \"TreeEnsembleClassifier\"\n",
" attribute {\n",
" name: \"base_values\"\n",
" floats: -0.03800457343459129\n",
" type: FLOATS\n",
" }\n",
" attribute {\n",
" name: \"class_ids\"\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" type: INTS\n",
" }\n",
" attribute {\n",
" name: \"class_nodeids\"\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 9\n",
" ints: 11\n",
" ints: 12\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" ints: 3\n",
" ints: 4\n",
" ints: 6\n",
" ints: 7\n",
" ints: 10\n",
" ints: 11\n",
" ints: 13\n",
" ints: 14\n",
" type: INTS\n",
" }\n",
" attribute {\n",
" name: \"class_treeids\"\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" type: INTS\n",
" }\n",
" attribute {\n",
" name: \"class_weights\"\n",
" floats: 1.9434634447097778\n",
" floats: 0.8350493907928467\n",
" floats: -0.42259445786476135\n",
" floats: 0.9522510766983032\n",
" floats: 0.3506265878677368\n",
" floats: 1.2717924118041992\n",
" floats: 2.038735866546631\n",
" floats: 2.5850231647491455\n",
" floats: 1.9065169095993042\n",
" floats: 0.7526319622993469\n",
" floats: 2.186857223510742\n",
" floats: -0.3125271797180176\n",
" floats: 1.7358912229537964\n",
" floats: 2.033015012741089\n",
" floats: 0.7391120791435242\n",
" floats: 1.663438081741333\n",
" floats: 2.7910029888153076\n",
" floats: 0.5580502152442932\n",
" floats: 2.3966081142425537\n",
" floats: 2.423346996307373\n",
" floats: 1.2797335386276245\n",
" floats: 1.4723968505859375\n",
" floats: -0.31760352849960327\n",
" floats: 1.5275180339813232\n",
" floats: -0.24120619893074036\n",
" floats: 2.154590368270874\n",
" floats: 1.2837189435958862\n",
" floats: 1.6249427795410156\n",
" floats: 0.1289827823638916\n",
" floats: 1.9233931303024292\n",
" floats: 3.384934663772583\n",
" floats: 1.221190094947815\n",
" floats: -0.26040711998939514\n",
" floats: 3.684087038040161\n",
" floats: 2.1982812881469727\n",
" floats: 0.7684656977653503\n",
" floats: 2.6017661094665527\n",
" floats: 2.9754066467285156\n",
" floats: 1.2843072414398193\n",
" floats: 2.251046895980835\n",
" floats: 0.9593376517295837\n",
" floats: -0.387774258852005\n",
" floats: 0.9436675906181335\n",
" floats: 0.46141353249549866\n",
" floats: 2.1467244625091553\n",
" floats: 2.516728162765503\n",
" floats: 1.461212396621704\n",
" floats: 2.450843095779419\n",
" floats: 1.2357882261276245\n",
" floats: 2.3708486557006836\n",
" floats: 0.5872256755828857\n",
" floats: 2.3507437705993652\n",
" floats: 0.7832721471786499\n",
" floats: -0.3674807548522949\n",
" floats: 0.7152636647224426\n",
" floats: 0.48944175243377686\n",
" floats: -0.27445703744888306\n",
" floats: 0.5961743593215942\n",
" floats: 2.356477737426758\n",
" floats: 0.7329510450363159\n",
" floats: 3.269986391067505\n",
" floats: 2.16291880607605\n",
" floats: 1.4851714372634888\n",
" floats: 0.4619562327861786\n",
" floats: 1.6492670774459839\n",
" floats: 1.7179334163665771\n",
" floats: -0.1583036482334137\n",
" floats: 2.329017400741577\n",
" floats: 1.284667730331421\n",
" floats: 0.3390168249607086\n",
" floats: 1.6512786149978638\n",
" floats: 1.3497246503829956\n",
" floats: 0.29938170313835144\n",
" floats: 2.2370336055755615\n",
" floats: -0.2941824197769165\n",
" floats: 1.4881796836853027\n",
" floats: 0.45783090591430664\n",
" floats: 2.609707832336426\n",
" floats: 1.6585278511047363\n",
" floats: 0.20318201184272766\n",
" floats: 1.39783775806427\n",
" floats: -0.38649511337280273\n",
" floats: 0.4400976002216339\n",
" floats: 0.24128030240535736\n",
" floats: 0.9853077530860901\n",
" floats: 2.767528533935547\n",
" floats: 0.2736862301826477\n",
" floats: 1.2736371755599976\n",
" floats: 0.4293672442436218\n",
" floats: 1.8358389139175415\n",
" floats: 0.3756895661354065\n",
" floats: 1.8245795965194702\n",
" floats: 0.4023917019367218\n",
" floats: 1.6852091550827026\n",
" floats: -0.2622862458229065\n",
" floats: 0.2551558017730713\n",
" floats: 1.225711464881897\n",
" floats: 0.7204010486602783\n",
" floats: -0.3301903009414673\n",
" floats: 0.9658589363098145\n",
" floats: 3.507498025894165\n",
" floats: 4.613434791564941\n",
" floats: 0.2838306427001953\n",
" floats: 0.027584746479988098\n",
" floats: 1.9944995641708374\n",
" floats: 1.1394542455673218\n",
" floats: 1.7521392107009888\n",
" floats: -0.24951225519180298\n",
" floats: 1.8871749639511108\n",
" floats: 0.17286305129528046\n",
" floats: 0.9189367890357971\n",
" floats: 2.679753303527832\n",
" floats: 1.3014898300170898\n",
" floats: 1.880082130432129\n",
" floats: 0.9199938178062439\n",
" floats: -0.11600850522518158\n",
" floats: 0.9288240671157837\n",
" floats: 1.7684626579284668\n",
" floats: 0.8028098940849304\n",
" floats: 0.2793136239051819\n",
" floats: -0.2810150384902954\n",
" floats: 0.5568670034408569\n",
" floats: 1.675200343132019\n",
" floats: 3.141878843307495\n",
" floats: 1.6306616067886353\n",
" floats: 0.6794643402099609\n",
" floats: 3.3313679695129395\n",
" floats: 1.9413787126541138\n",
" floats: 1.8411741256713867\n",
" floats: 1.3037300109863281\n",
" floats: 0.9659942388534546\n",
" floats: -0.1656952053308487\n",
" floats: 1.7631648778915405\n",
" floats: 0.36751118302345276\n",
" floats: 0.2653636336326599\n",
" floats: -0.27233046293258667\n",
" floats: 1.126025915145874\n",
" floats: 0.19452112913131714\n",
" floats: 1.052375316619873\n",
" floats: 2.3420350551605225\n",
" floats: 1.759190320968628\n",
" floats: 1.1252235174179077\n",
" floats: 10.749170303344727\n",
" floats: 2.450801372528076\n",
" floats: -0.34115633368492126\n",
" floats: 1.199244737625122\n",
" floats: 2.1117870807647705\n",
" floats: -0.1008785143494606\n",
" floats: 0.5440289378166199\n",
" floats: 1.8000423908233643\n",
" floats: 0.6563649773597717\n",
" floats: 1.5485354661941528\n",
" floats: 2.9250810146331787\n",
" floats: 1.7720370292663574\n",
" floats: 3.008777618408203\n",
" floats: 1.0892974138259888\n",
" floats: -0.1587303727865219\n",
" floats: 0.35866817831993103\n",
" type: FLOATS\n",
" }\n",
" attribute {\n",
" name: \"classlabels_int64s\"\n",
" ints: -1\n",
" ints: 1\n",
" type: INTS\n",
" }\n",
" attribute {\n",
" name: \"nodes_falsenodeids\"\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 10\n",
" ints: 0\n",
" ints: 12\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 12\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 14\n",
" ints: 0\n",
" ints: 0\n",
" type: INTS\n",
" }\n",
" attribute {\n",
" name: \"nodes_featureids\"\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 0\n",
" ints: 0\n",
" ints: 5\n",
" ints: 0\n",
" ints: 0\n",
" ints: 2\n",
" ints: 1\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 5\n",
" ints: 3\n",
" ints: 9\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 2\n",
" ints: 0\n",
" ints: 0\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 2\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 8\n",
" ints: 0\n",
" ints: 0\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 3\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 2\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 8\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 6\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 5\n",
" ints: 8\n",
" ints: 0\n",
" ints: 0\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 3\n",
" ints: 3\n",
" ints: 8\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 9\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 0\n",
" ints: 0\n",
" ints: 5\n",
" ints: 3\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 2\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 7\n",
" ints: 1\n",
" ints: 0\n",
" ints: 0\n",
" ints: 5\n",
" ints: 0\n",
" ints: 0\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 5\n",
" ints: 0\n",
" ints: 0\n",
" ints: 2\n",
" ints: 2\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 0\n",
" ints: 0\n",
" ints: 2\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 2\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 6\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 0\n",
" ints: 0\n",
" ints: 4\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 0\n",
" ints: 1\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 8\n",
" ints: 5\n",
" ints: 0\n",
" ints: 0\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 8\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 5\n",
" ints: 0\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 5\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 0\n",
" ints: 0\n",
" ints: 2\n",
" ints: 2\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 0\n",
" ints: 0\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 5\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 0\n",
" ints: 0\n",
" ints: 3\n",
" ints: 9\n",
" ints: 0\n",
" ints: 0\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 1\n",
" ints: 1\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 1\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 0\n",
" ints: 0\n",
" ints: 4\n",
" ints: 2\n",
" ints: 2\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 0\n",
" ints: 0\n",
" ints: 8\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 0\n",
" ints: 0\n",
" ints: 2\n",
" ints: 2\n",
" ints: 9\n",
" ints: 0\n",
" ints: 0\n",
" ints: 7\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 8\n",
" ints: 0\n",
" ints: 0\n",
" ints: 4\n",
" ints: 0\n",
" ints: 0\n",
" type: INTS\n",
" }\n",
" attribute {\n",
" name: \"nodes_hitrates\"\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" floats: 1.0\n",
" type: FLOATS\n",
" }\n",
" attribute {\n",
" name: \"nodes_missing_value_tracks_true\"\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" type: INTS\n",
" }\n",
" attribute {\n",
" name: \"nodes_modes\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" strings: \"BRANCH_LEQ\"\n",
" strings: \"LEAF\"\n",
" strings: \"LEAF\"\n",
" type: STRINGS\n",
" }\n",
" attribute {\n",
" name: \"nodes_nodeids\"\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 4\n",
" ints: 5\n",
" ints: 6\n",
" ints: 7\n",
" ints: 8\n",
" ints: 9\n",
" ints: 10\n",
" ints: 11\n",
" ints: 12\n",
" ints: 13\n",
" ints: 14\n",
" type: INTS\n",
" }\n",
" attribute {\n",
" name: \"nodes_treeids\"\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 1\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 2\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 3\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 4\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 5\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 6\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 7\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 8\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 9\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 10\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 11\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 12\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 13\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 14\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 15\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 16\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 17\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 18\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" ints: 19\n",
" type: INTS\n",
" }\n",
" attribute {\n",
" name: \"nodes_truenodeids\"\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 0\n",
" ints: 11\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" ints: 1\n",
" ints: 2\n",
" ints: 3\n",
" ints: 0\n",
" ints: 0\n",
" ints: 6\n",
" ints: 0\n",
" ints: 0\n",
" ints: 9\n",
" ints: 10\n",
" ints: 0\n",
" ints: 0\n",
" ints: 13\n",
" ints: 0\n",
" ints: 0\n",
" type: INTS\n",
" }\n",
" attribute {\n",
" name: \"nodes_values\"\n",
" floats: 1.1182861328125\n",
" floats: -1.3719031810760498\n",
" floats: -2.1090924739837646\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.241755485534668\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.9427749514579773\n",
" floats: 1.5288629531860352\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -1.3675224781036377\n",
" floats: -0.8927118182182312\n",
" floats: -0.21457144618034363\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.7867044806480408\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.2305121421813965\n",
" floats: 1.6710405349731445\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -0.8172805905342102\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -1.2036471366882324\n",
" floats: -1.7993075847625732\n",
" floats: 0.8781049847602844\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.3500275611877441\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -1.6451278924942017\n",
" floats: -0.5695546865463257\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -1.6232118606567383\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.6870217323303223\n",
" floats: 1.7764960527420044\n",
" floats: -1.6051665544509888\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.5863405466079712\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.24405494332313538\n",
" floats: 0.8884506821632385\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.40468263626098633\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.5405465364456177\n",
" floats: 1.9696266651153564\n",
" floats: -1.4631149768829346\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -0.8355469703674316\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 2.1292388439178467\n",
" floats: 0.9737828969955444\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.3713876008987427\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.1777106523513794\n",
" floats: -1.4377695322036743\n",
" floats: -1.8967506885528564\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.174608588218689\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.5838276147842407\n",
" floats: 1.970431923866272\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -0.13263148069381714\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -1.241844654083252\n",
" floats: -1.9967256784439087\n",
" floats: 1.360923409461975\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -0.9973304271697998\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -1.2133694887161255\n",
" floats: -2.3099405765533447\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.1797614097595215\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.7727632522583008\n",
" floats: 1.2746026515960693\n",
" floats: -1.0022215843200684\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.9730355143547058\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -0.06560103595256805\n",
" floats: 1.2841181755065918\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.4811969995498657\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.7864787578582764\n",
" floats: -1.3264484405517578\n",
" floats: 0.46618494391441345\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -2.0729875564575195\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -0.7137046456336975\n",
" floats: 0.7200880646705627\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.03953571245074272\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.9837039709091187\n",
" floats: -0.8415152430534363\n",
" floats: -0.8158515691757202\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -2.2136144638061523\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 2.94576096534729\n",
" floats: -0.9809549450874329\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 3.2996342182159424\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.8343864679336548\n",
" floats: -0.8160838484764099\n",
" floats: 0.8729618787765503\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.086002230644226\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.7350786924362183\n",
" floats: 1.4942817687988281\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.426905870437622\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -0.9995100498199463\n",
" floats: 1.348296880722046\n",
" floats: -1.8170491456985474\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.9718493223190308\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -1.2474384307861328\n",
" floats: -2.241636276245117\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -2.1966915130615234\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.013443112373352\n",
" floats: -0.9712457656860352\n",
" floats: 0.8785918951034546\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -1.3159127235412598\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -0.3614882230758667\n",
" floats: 2.5244438648223877\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -2.8113813400268555\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -1.0979342460632324\n",
" floats: 0.24002350866794586\n",
" floats: 1.266314148902893\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.8714540600776672\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.9340922236442566\n",
" floats: 2.0280134677886963\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.5103381872177124\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -2.0748298168182373\n",
" floats: -2.5474061965942383\n",
" floats: 0.8210054039955139\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -0.6355097889900208\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 2.067108154296875\n",
" floats: 1.5035042762756348\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.9397212862968445\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.4935353994369507\n",
" floats: 1.466139793395996\n",
" floats: -0.6865246891975403\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.5931892395019531\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.5022554397583008\n",
" floats: 0.0\n",
" floats: -0.7568454146385193\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -2.5874974727630615\n",
" floats: -0.5558705925941467\n",
" floats: 0.04258430004119873\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -0.9594401121139526\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.9450512528419495\n",
" floats: -1.6250673532485962\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -1.1833525896072388\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 2.4091458320617676\n",
" floats: 0.8939422965049744\n",
" floats: -0.6773884892463684\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -0.51847904920578\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.3490673899650574\n",
" floats: -0.8481631875038147\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 2.47493839263916\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -1.8741395473480225\n",
" floats: -1.1256321668624878\n",
" floats: -1.2816407680511475\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -0.5114881992340088\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 1.597159504890442\n",
" floats: -2.1695749759674072\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.9196633696556091\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -1.6386154890060425\n",
" floats: -1.646723985671997\n",
" floats: 1.7138521671295166\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -0.3313988745212555\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: -1.8197225332260132\n",
" floats: -1.679202675819397\n",
" floats: 0.0\n",
" floats: 0.0\n",
" floats: 0.8993514180183411\n",
" floats: 0.0\n",
" floats: 0.0\n",
" type: FLOATS\n",
" }\n",
" attribute {\n",
" name: \"post_transform\"\n",
" s: \"LOGISTIC\"\n",
" type: STRING\n",
" }\n",
" domain: \"ai.onnx.ml\"\n",
" }\n",
" node {\n",
" input: \"label\"\n",
" output: \"output_label\"\n",
" name: \"Cast\"\n",
" op_type: \"Cast\"\n",
" attribute {\n",
" name: \"to\"\n",
" i: 7\n",
" type: INT\n",
" }\n",
" domain: \"\"\n",
" }\n",
" node {\n",
" input: \"probabilities\"\n",
" output: \"output_probability\"\n",
" name: \"ZipMap\"\n",
" op_type: \"ZipMap\"\n",
" attribute {\n",
" name: \"classlabels_int64s\"\n",
" ints: -1\n",
" ints: 1\n",
" type: INTS\n",
" }\n",
" domain: \"ai.onnx.ml\"\n",
" }\n",
" name: \"Hastie model\"\n",
" input {\n",
" name: \"float_input\"\n",
" type {\n",
" tensor_type {\n",
" elem_type: 1\n",
" shape {\n",
" dim {\n",
" }\n",
" dim {\n",
" dim_value: 10\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" output {\n",
" name: \"output_label\"\n",
" type {\n",
" tensor_type {\n",
" elem_type: 7\n",
" shape {\n",
" dim {\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" output {\n",
" name: \"output_probability\"\n",
" type {\n",
" sequence_type {\n",
" elem_type {\n",
" map_type {\n",
" key_type: 7\n",
" value_type {\n",
" tensor_type {\n",
" elem_type: 1\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
" }\n",
"}\n",
"opset_import {\n",
" domain: \"\"\n",
" version: 9\n",
"}\n",
"opset_import {\n",
" domain: \"ai.onnx.ml\"\n",
" version: 1\n",
"}"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"onnx_clf"
]
},
{
"cell_type": "markdown",
"id": "9b3a2d45",
"metadata": {},
"source": [
"### Explore the attributes"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "39d2e233",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Node name: TreeEnsembleClassifier\n",
"All attributes:\n",
"base_values\n",
"class_ids\n",
"class_nodeids\n",
"class_treeids\n",
"class_weights\n",
"classlabels_int64s\n",
"nodes_falsenodeids\n",
"nodes_featureids\n",
"nodes_hitrates\n",
"nodes_missing_value_tracks_true\n",
"nodes_modes\n",
"nodes_nodeids\n",
"nodes_treeids\n",
"nodes_truenodeids\n",
"nodes_values\n",
"post_transform\n"
]
}
],
"source": [
"node = onnx_clf.graph.node[0]\n",
"print(\"Node name: \" + node.name)\n",
"print(\"All attributes:\")\n",
"for attribute in node.attribute:\n",
" print(attribute.name)"
]
},
{
"cell_type": "markdown",
"id": "ac124c6b",
"metadata": {},
"source": [
"### Flat\n",
"The ONNX representation is even more 'flat' than the scikit-learn one. In the scikit-learn representation, there is an array of trees. In the ONNX one there is one array per attribute for the whole model, and the attribute `nodes_treeids` contains the index of the tree (flattened over trees)."
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "2fae3120",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"name: \"nodes_treeids\"\n",
"ints: 0\n",
"ints: 0\n",
"ints: 0\n",
"ints: 0\n",
"ints: 0\n",
"ints: 0\n",
"ints: 0\n",
"ints: 0\n",
"ints: 0\n",
"ints: 0\n",
"ints: 0\n",
"ints: 0\n",
"ints: 0\n",
"ints: 1\n",
"ints: 1\n",
"ints: 1\n",
"ints: 1\n",
"ints: 1\n",
"ints: 1\n",
"ints: 1\n",
"ints: 1\n",
"ints: 1\n",
"ints: 1\n",
"ints: 1\n",
"ints: 1\n",
"ints: 1\n",
"ints: 1\n",
"ints: 1\n",
"ints: 2\n",
"ints: 2\n",
"ints: 2\n",
"ints: 2\n",
"ints: 2\n",
"ints: 2\n",
"ints: 2\n",
"ints: 2\n",
"ints: 2\n",
"ints: 2\n",
"ints: 2\n",
"ints: 2\n",
"ints: 2\n",
"ints: 2\n",
"ints: 2\n",
"ints: 3\n",
"ints: 3\n",
"ints: 3\n",
"ints: 3\n",
"ints: 3\n",
"ints: 3\n",
"ints: 3\n",
"ints: 3\n",
"ints: 3\n",
"ints: 3\n",
"ints: 3\n",
"ints: 3\n",
"ints: 3\n",
"ints: 3\n",
"ints: 3\n",
"ints: 4\n",
"ints: 4\n",
"ints: 4\n",
"ints: 4\n",
"ints: 4\n",
"ints: 4\n",
"ints: 4\n",
"ints: 4\n",
"ints: 4\n",
"ints: 4\n",
"ints: 4\n",
"ints: 4\n",
"ints: 4\n",
"ints: 4\n",
"ints: 4\n",
"ints: 5\n",
"ints: 5\n",
"ints: 5\n",
"ints: 5\n",
"ints: 5\n",
"ints: 5\n",
"ints: 5\n",
"ints: 5\n",
"ints: 5\n",
"ints: 5\n",
"ints: 5\n",
"ints: 5\n",
"ints: 5\n",
"ints: 5\n",
"ints: 5\n",
"ints: 6\n",
"ints: 6\n",
"ints: 6\n",
"ints: 6\n",
"ints: 6\n",
"ints: 6\n",
"ints: 6\n",
"ints: 6\n",
"ints: 6\n",
"ints: 6\n",
"ints: 6\n",
"ints: 6\n",
"ints: 6\n",
"ints: 6\n",
"ints: 6\n",
"ints: 7\n",
"ints: 7\n",
"ints: 7\n",
"ints: 7\n",
"ints: 7\n",
"ints: 7\n",
"ints: 7\n",
"ints: 7\n",
"ints: 7\n",
"ints: 7\n",
"ints: 7\n",
"ints: 7\n",
"ints: 7\n",
"ints: 7\n",
"ints: 7\n",
"ints: 8\n",
"ints: 8\n",
"ints: 8\n",
"ints: 8\n",
"ints: 8\n",
"ints: 8\n",
"ints: 8\n",
"ints: 8\n",
"ints: 8\n",
"ints: 8\n",
"ints: 8\n",
"ints: 8\n",
"ints: 8\n",
"ints: 8\n",
"ints: 8\n",
"ints: 9\n",
"ints: 9\n",
"ints: 9\n",
"ints: 9\n",
"ints: 9\n",
"ints: 9\n",
"ints: 9\n",
"ints: 9\n",
"ints: 9\n",
"ints: 9\n",
"ints: 9\n",
"ints: 9\n",
"ints: 9\n",
"ints: 9\n",
"ints: 9\n",
"ints: 10\n",
"ints: 10\n",
"ints: 10\n",
"ints: 10\n",
"ints: 10\n",
"ints: 10\n",
"ints: 10\n",
"ints: 10\n",
"ints: 10\n",
"ints: 10\n",
"ints: 10\n",
"ints: 10\n",
"ints: 10\n",
"ints: 10\n",
"ints: 10\n",
"ints: 11\n",
"ints: 11\n",
"ints: 11\n",
"ints: 11\n",
"ints: 11\n",
"ints: 11\n",
"ints: 11\n",
"ints: 11\n",
"ints: 11\n",
"ints: 11\n",
"ints: 11\n",
"ints: 11\n",
"ints: 11\n",
"ints: 11\n",
"ints: 11\n",
"ints: 12\n",
"ints: 12\n",
"ints: 12\n",
"ints: 12\n",
"ints: 12\n",
"ints: 12\n",
"ints: 12\n",
"ints: 12\n",
"ints: 12\n",
"ints: 12\n",
"ints: 12\n",
"ints: 12\n",
"ints: 12\n",
"ints: 12\n",
"ints: 12\n",
"ints: 13\n",
"ints: 13\n",
"ints: 13\n",
"ints: 13\n",
"ints: 13\n",
"ints: 13\n",
"ints: 13\n",
"ints: 13\n",
"ints: 13\n",
"ints: 13\n",
"ints: 13\n",
"ints: 13\n",
"ints: 13\n",
"ints: 13\n",
"ints: 13\n",
"ints: 14\n",
"ints: 14\n",
"ints: 14\n",
"ints: 14\n",
"ints: 14\n",
"ints: 14\n",
"ints: 14\n",
"ints: 14\n",
"ints: 14\n",
"ints: 14\n",
"ints: 14\n",
"ints: 14\n",
"ints: 14\n",
"ints: 14\n",
"ints: 14\n",
"ints: 15\n",
"ints: 15\n",
"ints: 15\n",
"ints: 15\n",
"ints: 15\n",
"ints: 15\n",
"ints: 15\n",
"ints: 15\n",
"ints: 15\n",
"ints: 15\n",
"ints: 15\n",
"ints: 15\n",
"ints: 15\n",
"ints: 16\n",
"ints: 16\n",
"ints: 16\n",
"ints: 16\n",
"ints: 16\n",
"ints: 16\n",
"ints: 16\n",
"ints: 16\n",
"ints: 16\n",
"ints: 16\n",
"ints: 16\n",
"ints: 16\n",
"ints: 16\n",
"ints: 16\n",
"ints: 16\n",
"ints: 17\n",
"ints: 17\n",
"ints: 17\n",
"ints: 17\n",
"ints: 17\n",
"ints: 17\n",
"ints: 17\n",
"ints: 17\n",
"ints: 17\n",
"ints: 17\n",
"ints: 17\n",
"ints: 17\n",
"ints: 17\n",
"ints: 17\n",
"ints: 17\n",
"ints: 18\n",
"ints: 18\n",
"ints: 18\n",
"ints: 18\n",
"ints: 18\n",
"ints: 18\n",
"ints: 18\n",
"ints: 18\n",
"ints: 18\n",
"ints: 18\n",
"ints: 18\n",
"ints: 18\n",
"ints: 18\n",
"ints: 18\n",
"ints: 18\n",
"ints: 19\n",
"ints: 19\n",
"ints: 19\n",
"ints: 19\n",
"ints: 19\n",
"ints: 19\n",
"ints: 19\n",
"ints: 19\n",
"ints: 19\n",
"ints: 19\n",
"ints: 19\n",
"ints: 19\n",
"ints: 19\n",
"ints: 19\n",
"ints: 19\n",
"type: INTS\n",
"\n"
]
}
],
"source": [
"for attribute in node.attribute:\n",
" if attribute.name == 'nodes_treeids':\n",
" print(attribute)"
]
},
{
"cell_type": "markdown",
"id": "9446656e",
"metadata": {},
"source": [
"### Node type\n",
"Instead of using `-2` for the feature index to represent a leaf node, the ONNX model has an attribute `nodes_modes` which is `BRANCH_LEQ` for a node that compares a feature to a threshold, and `LEAF` for leaf nodes."
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "680e20db",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"name: \"nodes_modes\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"strings: \"BRANCH_LEQ\"\n",
"strings: \"LEAF\"\n",
"strings: \"LEAF\"\n",
"type: STRINGS\n",
"\n"
]
}
],
"source": [
"for attribute in node.attribute:\n",
" if attribute.name == 'nodes_modes':\n",
" print(attribute)"
]
},
{
"cell_type": "markdown",
"id": "04358391",
"metadata": {},
"source": [
"### Aim\n",
"When the onnx convert for conifer is implemented, we will be able to do this, but right now `conifer.converters.onnx` doesn't exist. "
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "4027e73d",
"metadata": {},
"outputs": [
{
"ename": "AttributeError",
"evalue": "module 'conifer.converters' has no attribute 'onnx'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-14-f3031fd3d85e>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Create and compile the model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m conifer_model_1 = conifer.model(onnx_clf, conifer.converters.onnx,\n\u001b[0m\u001b[1;32m 3\u001b[0m conifer.backends.xilinxhls, cfg)\n\u001b[1;32m 4\u001b[0m \u001b[0mconifer_model_1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0my_cnf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mconifer_model_1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdecision_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mAttributeError\u001b[0m: module 'conifer.converters' has no attribute 'onnx'"
]
}
],
"source": [
"# Create and compile the model\n",
"conifer_model_1 = conifer.model(onnx_clf, conifer.converters.onnx,\n",
" conifer.backends.xilinxhls, cfg)\n",
"conifer_model_1.compile()\n",
"y_cnf = conifer_model_1.decision_function(X_test)"
]
},
{
"cell_type": "markdown",
"id": "ca60375d",
"metadata": {},
"source": [
"## Summary\n",
"- Implement the `conifer.converters.onnx` module that can handle the ONNX model produced by the `onnxmltools` converter from `scikit-learn` above\n",
"- Check the conversion is correct using `conifer_model.decision_function` and comparing the output with the original model (scikit-learn & ONNX)\n",
"- Train some more simple GradientBoostingClassifier models with different `n_estimators` and `max_depth`, using other datasets from `sklearn.datasets`"
]
},
{
"cell_type": "markdown",
"id": "e3fc18da",
"metadata": {},
"source": [
"## Part 2\n",
"Still using `scikit-learn`, train a larger BDT on the hls4ml jet tagging dataset - which has 5 classes.\n",
"It can take a while to train, so if you are re-running the notebook, you can set `train=False` to load one you already trained. You can also change the number of estimators (trees) and their maximum depth."
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "9153ac79",
"metadata": {},
"outputs": [],
"source": [
"train=False # set this to False to load a BDT you already trained\n",
"n_est=100\n",
"max_depth=4\n",
"\n",
"# Fetch the hls4ml jet tagging dataset\n",
"X, y = fetch_openml('hls4ml_lhc_jets_hlf', return_X_y=True)\n",
"# Convert the labels to numerical\n",
"le = LabelEncoder()\n",
"y = le.fit_transform(y)\n",
"ss = StandardScaler().fit(X)\n",
"X = ss.transform(X)\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"\n",
"if train:\n",
" print(\"Training BDT\")\n",
" # Train a BDT\n",
" clf = GradientBoostingClassifier(n_estimators=n_est, learning_rate=1.0,\n",
" max_depth=max_depth, random_state=0, verbose=1).fit(X_train, y_train)\n",
" joblib.dump(clf, 'hls4ml_clf_{}_{}.joblib'.format(n_est, max_depth))\n",
"else:\n",
" clf = joblib.load('hls4ml_clf_{}_{}.joblib'.format(n_est, max_depth))"
]
},
{
"cell_type": "markdown",
"id": "b5dc7c37",
"metadata": {},
"source": [
"### Now convert to ONNX"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "1ba306d6",
"metadata": {},
"outputs": [],
"source": [
"onnx_clf = onnxmltools.convert_sklearn(clf, 'jet tagging model', initial_types=initial_type)\n",
"onnx.save(onnx_clf, 'hls4ml_clf_{}_{}.onnx'.format(n_est, max_depth))"
]
},
{
"cell_type": "markdown",
"id": "65b5d539",
"metadata": {},
"source": [
"### Structure\n",
"The ONNX graph has the same nodes and attributes as our last one. But how does it handle the multi-class nature of this model?"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "a12ae7b7",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Node name: TreeEnsembleClassifier\n",
"All attributes:\n",
"base_values\n",
"class_ids\n",
"class_nodeids\n",
"class_treeids\n",
"class_weights\n",
"classlabels_int64s\n",
"nodes_falsenodeids\n",
"nodes_featureids\n",
"nodes_hitrates\n",
"nodes_missing_value_tracks_true\n",
"nodes_modes\n",
"nodes_nodeids\n",
"nodes_treeids\n",
"nodes_truenodeids\n",
"nodes_values\n",
"post_transform\n"
]
}
],
"source": [
"node = onnx_clf.graph.node[0]\n",
"print(\"Node name: \" + node.name)\n",
"print(\"All attributes:\")\n",
"for attribute in node.attribute:\n",
" print(attribute.name)"
]
},
{
"cell_type": "markdown",
"id": "4e84ab41",
"metadata": {},
"source": [
"### Aim\n",
"When the onnx convert for conifer is implemented, we will be able to do this, but right now `conifer.converters.onnx` doesn't exist. "
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "ec3fc9f6",
"metadata": {},
"outputs": [
{
"ename": "AttributeError",
"evalue": "module 'conifer.converters' has no attribute 'onnx'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-18-445063a8e414>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Create and compile the model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m conifer_model_2 = conifer.model(onnx_clf, conifer.converters.onnx,\n\u001b[0m\u001b[1;32m 3\u001b[0m conifer.backends.xilinxhls, cfg)\n\u001b[1;32m 4\u001b[0m \u001b[0mconifer_model_2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0my_cnf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mconifer_model_2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdecision_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mAttributeError\u001b[0m: module 'conifer.converters' has no attribute 'onnx'"
]
}
],
"source": [
"# Create and compile the model\n",
"conifer_model_2 = conifer.model(onnx_clf, conifer.converters.onnx,\n",
" conifer.backends.xilinxhls, cfg)\n",
"conifer_model_2.compile()\n",
"y_cnf = conifer_model_2.decision_function(X_test)"
]
},
{
"cell_type": "markdown",
"id": "fc156bb9",
"metadata": {},
"source": [
"# Part 3 ...\n",
"Now train models with `lightGBM` and `catboost`, convert them to `ONNX` with `onnxmltools` and test the `conifer` converter with those... we don't have an existing `lightGBM` or `catboost` converter, so this will be a good development."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "795a00db",
"metadata": {},
"outputs": [],
"source": [
"# ..."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment