/// <summary> /// Constructs an InferenceSession from a model file, with some additional session options /// </summary> /// <param name="modelPath"></param> /// <param name="options"></param> public InferenceSession(string modelPath, SessionOptions options) { var envHandle = OnnxRuntime.Handle; _nativeHandle = IntPtr.Zero; try { NativeApiStatus.VerifySuccess(NativeMethods.ONNXRuntimeCreateInferenceSession(envHandle, modelPath, options.NativeHandle, out _nativeHandle)); // Initialize input/output metadata _inputMetadata = new Dictionary <string, NodeMetadata>(); _outputMetadata = new Dictionary <string, NodeMetadata>(); // get input count ulong inputCount = 0; NativeApiStatus.VerifySuccess(NativeMethods.ONNXRuntimeInferenceSessionGetInputCount(_nativeHandle, out inputCount)); // get all the output names for (ulong i = 0; i < inputCount; i++) { _inputMetadata[GetInputName(i)] = GetInputMetadata(i); } // get output count ulong outputCount = 0; NativeApiStatus.VerifySuccess(NativeMethods.ONNXRuntimeInferenceSessionGetOutputCount(_nativeHandle, out outputCount)); // get all the output names for (ulong i = 0; i < outputCount; i++) { _outputMetadata[GetOutputName(i)] = GetOutputMetadata(i); } } catch (OnnxRuntimeException e) { if (_nativeHandle != IntPtr.Zero) { NativeMethods.ReleaseONNXSession(_nativeHandle); _nativeHandle = IntPtr.Zero; } throw e; } }