Skip to content

Commit

Permalink
Investigate issue 1102
Browse files Browse the repository at this point in the history
Signed-off-by: Xavier Dupre <[email protected]>
  • Loading branch information
xadupre committed Jun 10, 2024
1 parent 4dad29e commit c462f4b
Showing 1 changed file with 70 additions and 0 deletions.
70 changes: 70 additions & 0 deletions tests/test_issues_2024.py
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,76 @@ def Classifier(features: list[str]) -> base.BaseEstimator:
)
assert modelengine is not None

@unittest.skipIf(
pv.Version(ort_version) < pv.Version("1.17.3"),
reason="opset 19 not implemented",
)
@ignore_warnings(category=(ConvergenceWarning, FutureWarning))
def test_issue_1102(self):
from typing import Any
from sklearn.datasets import make_regression
import lightgbm
import numpy
import onnxruntime
import skl2onnx
from onnx.reference import ReferenceEvaluator
from onnxmltools.convert.lightgbm.operator_converters.LightGbm import (
convert_lightgbm,
)
from skl2onnx import update_registered_converter, to_onnx
from skl2onnx.common import shape_calculator
from sklearn import base, multioutput, pipeline, preprocessing

def Normalizer() -> list[tuple[str, Any]]:
return [
("cast64", skl2onnx.sklapi.CastTransformer(dtype=numpy.float64)),
("scaler", preprocessing.StandardScaler()),
("cast32", skl2onnx.sklapi.CastTransformer(dtype=numpy.float32)),
]

def Embedder(**kwargs: dict[str, Any]) -> list[tuple[str, Any]]:
return [("basemodel", lightgbm.LGBMRegressor(**kwargs))]

def BoL2EmotionV2(
backbone_kwargs: dict[str, Any] | None = None,
) -> base.BaseEstimator:
backbone = Embedder(**(backbone_kwargs or {}))
normalizer = Normalizer()
model = pipeline.Pipeline([*normalizer, *backbone])
return multioutput.MultiOutputRegressor(model)

model = BoL2EmotionV2()
X, y = make_regression(100, n_features=4, n_targets=2)
model.fit(X, y)

update_registered_converter(
lightgbm.LGBMRegressor,
"LightGbmLGBMRegressor",
shape_calculator.calculate_linear_regressor_output_shapes,
convert_lightgbm,
options={"split": None},
)

sample = X.astype(numpy.float32)

exported = to_onnx(
model,
X=sample,
name="BoL2emotion",
target_opset={"": 19, "ai.onnx.ml": 2},
)
expected = model.predict(sample)

ref = ReferenceEvaluator(exported)
got = ref.run(None, dict(X=sample))[0]
numpy.testing.assert_allclose(expected, got, 1e-4)

sess = onnxruntime.InferenceSession(
exported.SerializeToString(), providers=["CPUExecutionProvider"]
)
got = sess.run(None, dict(X=sample))[0]
numpy.testing.assert_allclose(expected, got, 1e-4)


if __name__ == "__main__":
unittest.main(verbosity=2)

0 comments on commit c462f4b

Please sign in to comment.