ONNX-Export eines k-Means

ONNX-Export eines k-Means 1:

Download Python Samples

Ein Zip-Archiv mit allen Samples finden Sie hier: Beispiele zum ONNX-Export

k-Means with Scikit-learn

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType

# Generate data for clustering: num of samples, dimensions, num of clusters
X, y, centers = make_blobs(n_samples=50, n_features=3, centers=5, cluster_std=0.5, shuffle=True, random_state=42,  return_centers=True)
num_features = X.shape[1]
num_clusters = centers.shape[0]

# Define and train K-Means model
km = KMeans(n_clusters=num_clusters, init='k-means++', n_init=10, max_iter=500, tol=1e-04, random_state=42)
km.fit(X)

y_km = km.predict(X)

# Export model as ONNX
out_onnx = "kmeans.onnx"

initial_type = [('float_input', FloatTensorType([None, num_features]))]
onnx_model = convert_sklearn(km, initial_types=initial_type)

# for k-means models this meta info is mandatory. Otherwise convert process to TwinCAT-specific format will fail!
meta =  onnx_model.metadata_props.add()
meta.key = "sklearn_model"
meta.value = "KMeans"

with open(out_onnx, "wb") as f:
    f.write( onnx_model.SerializeToString())

Nach unserem Kenntnisstand ist aktuell nur Scikit-learn mit skl2onnx in der Lage, einen k-Means in ONNX zu konvertieren. Aus diesem Grund beschränkt sich die Beschreibung darauf.

ONNX-Export eines k-Means 2:

ONNX Custom Attribute notwendig

Die Angabe des Custom Attributes „sklearn_model“ und „KMeans“ ist für k-means Modelle notwendig, damit der Konvertierungsschritt in Beckhoff XML und Beckhoff BML funktioniert.

ONNX-Export eines k-Means 3: