Пример #1
0
    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)
Пример #2
0
    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)
Пример #4
0
    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)
Пример #5
0
    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))