
How do I solve this IndexError in ONNX Model Predict block?
5 次查看(过去 30 天)
显示 更早的评论
I want to run the simulation with my simple ONNX model that I created with Pytorch.

Also I set Input and output tab of the block parameter like the below images.
Input tab

Output tab

then I run the simulation however I got this error.
Despite the same count of Input to ONNX model, this happens...
Does this ring a bell? I could figure out where I am missing...
I'd appreciate it if you could give me your advice. How do I solve?
MATLAB System block 'untitled/ONNX Model Predict/ONNX Model Block' error when calling 'getOutputSizeImpl' method of
'nnet.pycoexblks.
Call to the Python model predict() function 'py.ONNXModelBlock.predict(...)' failed.
The Python error message is: == START OF PYTHON ERROR MESSAGE ==
Python error: IndexError: list index out of range
== END OF PYTHON ERROR MESSAGE ==.
Terminal width or dimension error.
' Output Terminal 1' in 'untitled/ONNX Model Predict/In7' is a 1-dimensional vector with 1 element.
My python code to create simple onnx model (Pytorch)
This is how I created my ONNX model. I just first wanted to try with easy way.
import torch
import torch.nn as nn
class EmptyModel(nn.Module):
def __init__(self):
super(EmptyModel, self).__init__()
# No trainable parameters, but add a linear layer to match Simulink requirements
self.linear = nn.Linear(7, 2, bias=False)
with torch.no_grad():
self.linear.weight.fill_(0.0)
def forward(self, x):
# Returns the first two elements of the input as is, without any computation
return x[:, :2]
model = EmptyModel()
dummy_input = torch.randn(1, 7, dtype=torch.float32)
torch.onnx.export(
model,
dummy_input,
"empty_model.onnx",
export_params=True,
opset_version=11,
do_constant_folding=True,
input_names=["input"],
output_names=["output"],
dynamic_axes={
"input": {0: "batch_size"},
"output": {0: "batch_size"},
},
)
Sorry that Japansene is included in my attached images...
I look forward to your answer.
Best,
0 个评论
回答(2 个)
Don Mathis
2025-1-21
编辑:Don Mathis
2025-1-21
Your PyTorch model (and ONNX model) actually takes only 1 input of shape [N,7], not 7 separate scalar inputs. The Simulink block passes your 7 inputs as 7 separate inputs to the ONNX model. To fix this, you could either concatenate your 7 inputs into a vector, or make a PyTorch model that takes 7 separate inputs.

2 个评论
Don Mathis
2025-1-22
The best you can do to speed up the ONNX block is to make sure your Python installation runs as fast as possible:
- In MATLAB, use pyenv("ExecutionMode","InProcess").
- If you have a GPU,
- make sure your python environment has onnxruntime-gpu installed,
- make sure it supports CUDAExecutionProvider,
- make sure in python (outside MATLAB), you see a speedup when using GPU vs CPU
You could also try using the PyTorch Model Predict block directly, instead of converting to ONNX. There may not be a speed difference, but it may be easier to get GPU working in PyTorch.
Don Mathis
2025-1-22
Did you get a warning message before the error message that said something like this?
"Warning: Number of inputs specified on the Inputs tab must match the number of inputs specified in the Python model file. "
3 个评论
Don Mathis
2025-1-24
I expected the software to warn you that your Simulink model was passing too many inputs to your ONNX block.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Deep Learning with Simulink 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!