AN 993: Using Custom Models with Intel® FPGA AI Suite

ID 777190
Date 5/01/2023
Public

4.2. Example 2: Customized Multilayer Perceptron (MLP) Model

This example adds layers to a simple Multilayer Perceptron (MLP) model as follows:
  • A ReLU layer was added after each linear transformation in the previous layer.
  • A Softmax layer was added at the end.

These additions are shown as an example only. The performance of this customized model has not been tested or optimized.

Model Information:
  • Model: Multilayer Perception (MLP)
  • Framework: PyTorch®/ONNX*
Figure 3. Original MLP Model Layers
import argparse import torch import numpy as np from torch import nn, onnx class MLP(nn.Module): def __init__(self): super(MLP, self).__init__() self.model = nn.Sequential( nn.Linear(10, 128), nn.Linear(128, 80), nn.Linear(80, 10), ) def forward(self, x): return self.model(x)
Figure 4. Modified MLP Model Layers
import argparse import torch import numpy as np from torch import nn, onnx import os class MLP(nn.Module): def __init__(self): super(MLP, self).__init__() self.model = nn.Sequential( nn.Linear(10, 128), nn.ReLU(), nn.Linear(128, 80), nn.ReLU(), nn.Linear(80, 10), nn.ReLU(), ) def forward(self, x): return self.model(x)
This model is created with the PyTorch® framework but must be converted to ONNX* to use the model with the OpenVINO™ Model Optimizer. The following Python code example illustrates how you can convert the PyTorch® model to ONNX*:
onnx.export(model, x, args.onnx_file, export_params=True)
For more information about converting PyTorch® to ONNX*, review the ONNX exporter documentation at the following URL:

https://pytorch.org/docs/stable/onnx.html#example-alexnet-from-pytorch-to-onnx

After the conversion is complete and the ONNX* model is saved, convert the model to OpenVINO™ IR with the following command:
mo --input_model <path to model>.onnx