Saving Models to ONNX Format: A Comprehensive Guide (Python)

Introduction

ONNX (Open Neural Network Exchange) is an open format to represent machine learning models. Converting your models to ONNX allows you to use our web app for making inferences. This guide will walk you through the process of saving both scikit-learn and PyTorch models to ONNX format.

Know strictly that this guide is for python users, if you are using different programming languages like C++, Julia etc visit the Official ONNX Runtime Website for detailed guide on model conversion to .onnx

1. Saving scikit-learn Models to ONNX

1.1 Prerequisites

Before you begin, make sure you have the necessary packages installed:

pip install scikit-learn skl2onnx onnxruntime numpy

1.2 Step-by-Step Guide

  1. Import required modules
  2. Define initial types for your model's input
  3. Convert the model to ONNX format
  4. Save the ONNX model to a file

1.3 Code Example with Detailed Explanations

# Import necessary modules
  from skl2onnx import convert_sklearn
  from skl2onnx.common.data_types import FloatTensorType
  import onnxruntime as rt
  import numpy as np
  
  # Define the initial types based on your model's input features
  initial_type = [('float_input', FloatTensorType([None, 2]))]
  
  # Convert the model to ONNX format
  options = {type(model): {'zipmap': False}}
  onx = convert_sklearn(model, initial_types=initial_type, options=options)
  
  # Save the ONNX model to a file
  with open("model.onnx", "wb") as f:
      f.write(onx.SerializeToString())

1.4 Parameter Explanations

  • initial_type: Defines the input shape and type for your model.
    • None: Allows for variable batch size
    • 2: Number of features (adjust this to match your model's input)
  • options: Additional conversion options
    • 'zipmap': False: Disables creation of a ZipMap operator, which can improve performance
  • model: Your trained scikit-learn model

2. Saving PyTorch Models to ONNX

2.1 Prerequisites

Ensure you have the following packages installed:

pip install torch torchvision onnx

2.2 Step-by-Step Guide

  1. Import required modules
  2. Load your PyTorch model
  3. Create a dummy input tensor
  4. Export the model to ONNX format

2.3 Code Example with Detailed Explanations

import torch
  import torch.onnx
  
  # Load your PyTorch model
  model = YourPyTorchModel()
  model.load_state_dict(torch.load('model.pth'))
  model.eval()
  
  # Create dummy input tensor
  dummy_input = torch.randn(1, input_size)
  
  # Export the model
  torch.onnx.export(model,               # model being run
                    dummy_input,         # model input (or a tuple for multiple inputs)
                    "model.onnx",        # where to save the model
                    export_params=True,  # store the trained parameter weights inside the model file
                    opset_version=10,    # the ONNX version to export the model to
                    do_constant_folding=True,  # whether to execute constant folding for optimization
                    input_names = ['input'],   # the model's input names
                    output_names = ['output'], # the model's output names
                    dynamic_axes={'input' : {0 : 'batch_size'},    # variable length axes
                                  'output' : {0 : 'batch_size'}})

2.4 Parameter Explanations

  • model: Your PyTorch model class
  • dummy_input: A tensor with the same shape as your model's input
  • export_params=True: Stores the model's trained parameters in the ONNX file
  • opset_version=10: The ONNX version to use (adjust if needed)
  • do_constant_folding=True: Optimizes the model by folding constants
  • input_names, output_names: Names for input and output nodes
  • dynamic_axes: Specifies which dimensions can have variable sizes (like batch size)
Ready to start running
your ML models in production?
PlutofFloww,
2025 All Rights Reserved.
Follow Us
LinkedIn
Twitters