def test_onnx_stats(self): iris = load_iris() X, y = iris.data, iris.target X_train, X_test, y_train, _ = train_test_split(X, y, random_state=11) clr = LogisticRegression() clr.fit(X_train, y_train) temp = get_temp_folder(__file__, "temp_onnx_stats") data = os.path.join(temp, "data.csv") pandas.DataFrame(X_test).to_csv(data, index=False) pkl = os.path.join(temp, "model.pkl") with open(pkl, "wb") as f: pickle.dump(clr, f) outonnx = os.path.join(temp, 'outolr.onnx') convert_validate(pkl=pkl, data=data, verbose=0, method="predict,predict_proba", outonnx=outonnx, name="output_label,output_probability") st = BufferedPrint() main(args=["onnx_stats", "--name", outonnx], fLOG=st.fprint) res = str(st) self.assertIn("ninits: 0", res)
def test_convert_validate(self): iris = load_iris() X, y = iris.data, iris.target X_train, X_test, y_train, _ = train_test_split(X, y, random_state=11) clr = LogisticRegression() clr.fit(X_train, y_train) temp = get_temp_folder(__file__, "temp_convert_validate") data = os.path.join(temp, "data.csv") pandas.DataFrame(X_test).to_csv(data, index=False) pkl = os.path.join(temp, "model.pkl") with open(pkl, "wb") as f: pickle.dump(clr, f) res = convert_validate(pkl=pkl, data=data, verbose=0, method="predict,predict_proba", name="output_label,output_probability") self.assertIsInstance(res, dict) self.assertLess(res['metrics'][0], 1e-5) self.assertLess(res['metrics'][1], 1e-5) self.assertRaise( lambda: convert_validate(pkl=pkl, data=data, verbose=0, method="predict,predict_proba", name="output_label"), ValueError) self.assertRaise( lambda: convert_validate(pkl=pkl, data=data, verbose=0, method="predict,predict_probas", name="output_label,output_probability"), AttributeError) self.assertRaise( lambda: convert_validate(pkl=pkl, data=data, verbose=0, method="predict,predict_proba", name="output_label,output_probabilities"), KeyError) res = convert_validate(pkl=pkl, data=data, verbose=0, method="predict,predict_proba", name="output_label,output_probability", noshape=True) self.assertIsInstance(res, dict) self.assertLess(res['metrics'][0], 1e-5) self.assertLess(res['metrics'][1], 1e-5)
def test_cli_convert_validater_switch(self): iris = load_iris() X, y = iris.data, iris.target X_train, X_test, y_train, _ = train_test_split(X, y, random_state=11) clr = LogisticRegression() clr.fit(X_train, y_train) temp = get_temp_folder(__file__, "temp_cli_convert_validate_switch") data = os.path.join(temp, "data.csv") pandas.DataFrame(X_test).to_csv(data, index=False) pkl = os.path.join(temp, "model.pkl") with open(pkl, "wb") as f: pickle.dump(clr, f) res = convert_validate(pkl=pkl, data=data, verbose=0, method="predict,predict_proba", name="output_label,output_probability") st = BufferedPrint() args = ["convert_validate", "--pkl", pkl, '--data', data, '--method', "predict,predict_proba", '--name', "output_label,output_probability", '--verbose', '1', '--use_double', 'switch'] main(args, fLOG=st.fprint) res = str(st) self.assertIn( "[convert_validate] compute predictions with method 'predict_proba'", res)
def test_cli_convert_validater_pkl_nodata(self): temp = get_temp_folder(__file__, "temp_cli_convert_validate_pkl_nodata") monx = os.path.join(temp, "gpr.onnx") pkl = os.path.join(temp, "booster.pickle") if not os.path.exists(pkl): return st = BufferedPrint() res = convert_validate(pkl=pkl, data=None, verbose=0, method="predict,predict_proba", name="output_label,output_probability", outonnx=monx, fLOG=st.fprint) res = str(st) self.assertNotIn("[convert_validate] compute predictions", res)
def test_cli_convert_validater_float64_gpr(self): iris = load_iris() X, y = iris.data, iris.target X_train, X_test, y_train, _ = train_test_split(X, y, random_state=11) clr = GaussianProcessRegressor() clr.fit(X_train, y_train) temp = get_temp_folder(__file__, "temp_cli_convert_validate_float64_gpr") monx = os.path.join(temp, "gpr.onnx") data = os.path.join(temp, "data.csv") pandas.DataFrame(X_test).to_csv(data, index=False) pkl = os.path.join(temp, "model.pkl") with open(pkl, "wb") as f: pickle.dump(clr, f) try: res = convert_validate( pkl=pkl, data=data, verbose=0, method="predict", name="GPmean", use_double='float64', options="{GaussianProcessRegressor:{'optim':'cdist'}}") except RuntimeError as e: if "requested version 10 < 11 schema version" in str(e): return raise e self.assertNotEmpty(res) st = BufferedPrint() args = [ "convert_validate", "--pkl", pkl, '--data', data, '--method', "predict", '--name', "GPmean", '--verbose', '1', '--use_double', 'float64', '--options', "{GaussianProcessRegressor:{'optim':'cdist'}}", '--outonnx', monx ] main(args, fLOG=st.fprint) res = str(st) self.assertExists(monx) with open(monx, 'rb') as f: model = onnx.load(f) self.assertIn('CDist', str(model))