.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/plot_common_errors.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_plot_common_errors.py: .. _l-example-common-error: Common errors with onnxruntime ============================== This example looks into several common situations in which *onnxruntime* does not return the model prediction but raises an exception instead. It starts by loading the model trained in example :ref:`l-logreg-example` which produced a logistic regression trained on *Iris* datasets. The model takes a vector of dimension 2 and returns a class among three. .. GENERATED FROM PYTHON SOURCE LINES 18-29 .. code-block:: default import onnxruntime as rt from onnxruntime.capi.onnxruntime_pybind11_state import InvalidArgument import numpy from onnxruntime.datasets import get_example example2 = get_example("logreg_iris.onnx") sess = rt.InferenceSession(example2, providers=rt.get_available_providers()) input_name = sess.get_inputs()[0].name output_name = sess.get_outputs()[0].name .. GENERATED FROM PYTHON SOURCE LINES 30-33 The first example fails due to *bad types*. *onnxruntime* only expects single floats (4 bytes) and cannot handle any other kind of floats. .. GENERATED FROM PYTHON SOURCE LINES 33-41 .. code-block:: default try: x = numpy.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]], dtype=numpy.float64) sess.run([output_name], {input_name: x}) except Exception as e: print("Unexpected type") print("{0}: {1}".format(type(e), e)) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Unexpected type : [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Unexpected input data type. Actual: (tensor(double)) , expected: (tensor(float)) .. GENERATED FROM PYTHON SOURCE LINES 42-44 The model fails to return an output if the name is misspelled. .. GENERATED FROM PYTHON SOURCE LINES 44-52 .. code-block:: default try: x = numpy.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]], dtype=numpy.float32) sess.run(["misspelled"], {input_name: x}) except Exception as e: print("Misspelled output name") print("{0}: {1}".format(type(e), e)) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Misspelled output name : [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Invalid Output Name:misspelled .. GENERATED FROM PYTHON SOURCE LINES 53-55 The output name is optional, it can be replaced by *None* and *onnxruntime* will then return all the outputs. .. GENERATED FROM PYTHON SOURCE LINES 55-64 .. code-block:: default x = numpy.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]], dtype=numpy.float32) try: res = sess.run(None, {input_name: x}) print("All outputs") print(res) except (RuntimeError, InvalidArgument) as e: print(e) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none All outputs [array([0, 0, 0], dtype=int64), [{0: 0.9505997896194458, 1: 0.027834143489599228, 2: 0.021566055715084076}, {0: 0.9974970817565918, 1: 5.6270167988259345e-05, 2: 0.0024466365575790405}, {0: 0.9997311234474182, 1: 1.787709464906584e-07, 2: 0.0002686927327886224}]] .. GENERATED FROM PYTHON SOURCE LINES 65-66 The same goes if the input name is misspelled. .. GENERATED FROM PYTHON SOURCE LINES 66-74 .. code-block:: default try: x = numpy.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]], dtype=numpy.float32) sess.run([output_name], {"misspelled": x}) except Exception as e: print("Misspelled input name") print("{0}: {1}".format(type(e), e)) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Misspelled input name : [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Invalid Feed Input Name:misspelled .. GENERATED FROM PYTHON SOURCE LINES 75-77 *onnxruntime* does not necessarily fail if the input dimension is a multiple of the expected input dimension. .. GENERATED FROM PYTHON SOURCE LINES 77-104 .. code-block:: default for x in [ numpy.array([1.0, 2.0, 3.0, 4.0], dtype=numpy.float32), numpy.array([[1.0, 2.0, 3.0, 4.0]], dtype=numpy.float32), numpy.array([[1.0, 2.0], [3.0, 4.0]], dtype=numpy.float32), numpy.array([1.0, 2.0, 3.0], dtype=numpy.float32), numpy.array([[1.0, 2.0, 3.0]], dtype=numpy.float32), ]: try: r = sess.run([output_name], {input_name: x}) print("Shape={0} and predicted labels={1}".format(x.shape, r)) except (RuntimeError, InvalidArgument) as e: print("ERROR with Shape={0} - {1}".format(x.shape, e)) for x in [ numpy.array([1.0, 2.0, 3.0, 4.0], dtype=numpy.float32), numpy.array([[1.0, 2.0, 3.0, 4.0]], dtype=numpy.float32), numpy.array([[1.0, 2.0], [3.0, 4.0]], dtype=numpy.float32), numpy.array([1.0, 2.0, 3.0], dtype=numpy.float32), numpy.array([[1.0, 2.0, 3.0]], dtype=numpy.float32), ]: try: r = sess.run(None, {input_name: x}) print("Shape={0} and predicted probabilities={1}".format(x.shape, r[1])) except (RuntimeError, InvalidArgument) as e: print("ERROR with Shape={0} - {1}".format(x.shape, e)) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none ERROR with Shape=(4,) - [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Invalid rank for input: float_input Got: 1 Expected: 2 Please fix either the inputs or the model. ERROR with Shape=(1, 4) - [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Got invalid dimensions for input: float_input for the following indices index: 0 Got: 1 Expected: 3 index: 1 Got: 4 Expected: 2 Please fix either the inputs or the model. ERROR with Shape=(2, 2) - [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Got invalid dimensions for input: float_input for the following indices index: 0 Got: 2 Expected: 3 Please fix either the inputs or the model. ERROR with Shape=(3,) - [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Invalid rank for input: float_input Got: 1 Expected: 2 Please fix either the inputs or the model. ERROR with Shape=(1, 3) - [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Got invalid dimensions for input: float_input for the following indices index: 0 Got: 1 Expected: 3 index: 1 Got: 3 Expected: 2 Please fix either the inputs or the model. ERROR with Shape=(4,) - [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Invalid rank for input: float_input Got: 1 Expected: 2 Please fix either the inputs or the model. ERROR with Shape=(1, 4) - [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Got invalid dimensions for input: float_input for the following indices index: 0 Got: 1 Expected: 3 index: 1 Got: 4 Expected: 2 Please fix either the inputs or the model. ERROR with Shape=(2, 2) - [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Got invalid dimensions for input: float_input for the following indices index: 0 Got: 2 Expected: 3 Please fix either the inputs or the model. ERROR with Shape=(3,) - [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Invalid rank for input: float_input Got: 1 Expected: 2 Please fix either the inputs or the model. ERROR with Shape=(1, 3) - [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Got invalid dimensions for input: float_input for the following indices index: 0 Got: 1 Expected: 3 index: 1 Got: 3 Expected: 2 Please fix either the inputs or the model. .. GENERATED FROM PYTHON SOURCE LINES 105-107 It does not fail either if the number of dimension is higher than expects but produces a warning. .. GENERATED FROM PYTHON SOURCE LINES 107-118 .. code-block:: default for x in [ numpy.array([[[1.0, 2.0], [3.0, 4.0]]], dtype=numpy.float32), numpy.array([[[1.0, 2.0, 3.0]]], dtype=numpy.float32), numpy.array([[[1.0, 2.0]], [[3.0, 4.0]]], dtype=numpy.float32), ]: try: r = sess.run([output_name], {input_name: x}) print("Shape={0} and predicted labels={1}".format(x.shape, r)) except (RuntimeError, InvalidArgument) as e: print("ERROR with Shape={0} - {1}".format(x.shape, e)) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none ERROR with Shape=(1, 2, 2) - [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Invalid rank for input: float_input Got: 3 Expected: 2 Please fix either the inputs or the model. ERROR with Shape=(1, 1, 3) - [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Invalid rank for input: float_input Got: 3 Expected: 2 Please fix either the inputs or the model. ERROR with Shape=(2, 1, 2) - [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Invalid rank for input: float_input Got: 3 Expected: 2 Please fix either the inputs or the model. .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.010 seconds) .. _sphx_glr_download_auto_examples_plot_common_errors.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_common_errors.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_common_errors.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_