matlab/matlab-import-external-ai-model
> Import PyTorch, ONNX, or Keras 3 / TensorFlow 2.16+ deep learning models into MATLAB as dlnetwork objects. Use when importing .pt2 exported programs, traced .pt files, .onnx models, or Keras 3 models via matlabsaver. Covers importNetworkFromPyTorch, importNetworkFromONNX, importNetworkFromKeras, importNetworkFromTensorFlow, torch.export.export, PyTorchInputSizes, InputDataFormats, matlabsaver, tf_keras downgrade, numeric validation against PyTorch or ONNX Runtime, and placeholder/custom layer implementation. Applies when user mentions any of these functions, file formats, or encounters import errors, unsupported operator warnings, 0 learnables, or uninitialized networks.
npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-import-external-ai-model
Import trained PyTorch, ONNX, or Keras 3 models into MATLAB as dlnetwork
objects and verify numerical correctness.
.pt2, .pt, .onnx, or .keras files to bring into MATLABimportNetworkFromPyTorch, importNetworkFromONNX, importNetworkFromKeras, or importNetworkFromTensorFlowtorch.export.export, torch.jit.trace, PyTorchInputSizes, InputDataFormats, or matlabsaverexportONNXNetwork / exportNetworkToPyTorch)/matlab-train-network/matlab-deploy-embedded-aiQ: What format is the source model?
|
+-- .pt2 (PyTorch exported program) ──────────> PYTORCH IMPORT below
+-- .pt (PyTorch traced model) ───────────────> PYTORCH IMPORT below
+-- .onnx ────────────────────────────────────> ONNX IMPORT below
+-- .keras / TensorFlow 2.16+ / matlabsaver ──> KERAS IMPORT below
+-- Unknown ("import my model") ──────────────> Ask: framework? file extension?
Full pipeline: export from PyTorch → import into MATLAB → validate numerics.
| User has | Action |
|----------|--------|
| PyTorch model (code or saved) | Export as .pt2 first → see references/pytorch-export-guidance.md |
| .pt2 file (exported program) | Import directly (below) |
| .pt file (traced model) | Import with input sizes (below) |
Always prefer .pt2 over .pt. If user has a traced model, recommend re-exporting
with torch.export.export first. Only use traced path if re-export is not feasible.
net = importNetworkFromPyTorch("model.pt2");
No input size argument needed — shape info is embedded in the .pt2 file.
net = importNetworkFromPyTorch("model.pt", ...
PyTorchInputSizes=[1 3 224 224]);
PyTorchInputSizes is mandatory for traced models. Specify sizes in PyTorch
dimension ordering. For multiple inputs use a cell array: {[1 3 256 256], [1 10]}.
| Argument | When to use |
|----------|-------------|
| PyTorchInputSizes | Required for traced models (.pt). Not needed for .pt2 |
| Namespace | Control where auto-generated custom layer files are stored |
| PreferredNestingType | Choose "networklayer" (default) or "customlayer" |
| Mistake | Correct Approach |
|---------|-----------------|
| Using InputShape NV argument | Does not exist — use PyTorchInputSizes for .pt, nothing for .pt2 |
| Using PackageName NV argument | Deprecated — use Namespace |
| Not calling model.to("cpu") before export | Always model.to("cpu") before export |
| Not checking PyTorch version before export | Assert torch.__version__ starts with "2.8" |
| Passing PyTorchInputSizes for .pt2 | Unnecessary — .pt2 embeds shape info, omit it |
| Guessing input size for unknown models | Always ask the user for exact input dimensions |
| Assuming net.InputNames matches forward() order | Importer may reorder — always check net.InputNames |
model.to("cpu") and model.eval() before exportNamespace not PackageName for custom layer storagetorch.export.export over torch.jit.tracereferences/pytorch-export-guidance.md — Full Python-side export procedurereferences/pytorch-import-guidance.md — Detailed MATLAB import for both formatsreferences/pytorch-numeric-validation.md — Dimension conversion and tolerance comparisonreferences/pytorch-placeholder-guidance.md — Implementing unsupported ops in custom layersscripts/validateImportedNetwork.m — Helper function for numeric validation against .npy reference dataImport ONNX models using importNetworkFromONNX, diagnose issues, verify numerics.
1. IMPORT → importNetworkFromONNX with appropriate NVPs
2. DIAGNOSE → Check initialization, custom layers, warnings
3. RESOLVE → Fix issues (InputDataFormats, placeholder functions)
4. VERIFY → Compare outputs against ONNX Runtime (if installed)
CRITICAL: Do NOT re-import after step 3. Re-importing regenerates +ops/ and overwrites all custom implementations.
net = importNetworkFromONNX("model.onnx");
If you know the input format:
net = importNetworkFromONNX("model.onnx", InputDataFormats="BCSS");
If net.Initialized is false, read the input shape and re-import with InputDataFormats:
net = importNetworkFromONNX("model.onnx");
if ~net.Initialized
inputLayer = net.Layers(1);
fprintf("NumDims: %d\n", inputLayer.NumDims);
end
Characters: B (batch), C (channel), S (spatial), T (time), U (unspecified).
| ONNX Input Shape | InputDataFormats |
|-----------------|------------------|
| [N, C, H, W] | "BCSS" |
| [N, C] | "BC" |
| [N, T, C] | "BTC" |
| [N, C, T] | "BCT" |
If onnxruntime is installed in the user's Python environment, compare outputs. If not installed, skip — do not ask the user to install it.
try
ort = py.importlib.import_module("onnxruntime");
ortAvailable = true;
catch
ortAvailable = false;
end
See references/onnx-validation-workflow.md for the full comparison procedure.
| Mistake | Correct Approach |
|---------|-----------------|
| Use importONNXNetwork or importONNXLayers | Legacy — always use importNetworkFromONNX |
| Re-import after implementing placeholders | Import once, then modify. Never re-import. |
| Guess InputDataFormats randomly | Read input shape from uninitialized network first |
| Skip numeric verification when ORT is available | Compare against ONNX Runtime if installed |
importNetworkFromONNX — never legacy APIsdlarray with explicit format strings: dlarray(data, "SSCB")references/onnx-validation-workflow.md — Full ORT comparison including multi-output modelsImport Keras 3 / TensorFlow 2.16+ models with full layer structure and learnables.
Q1: What MATLAB release is available?
+-- R2026a or newer ──> PATH 1 (matlabsaver + importNetworkFromKeras)
+-- R2025b or older ──> Q2
Q2: Does the model use Keras 3-specific features? (keras.ops, multi-backend)
+-- No (standard layers) ──> PATH 2 (tf_keras downgrade)
+-- Yes ────────────────────> PATH 3 (ONNX export fallback)
Python:
import matlabsaver
matlabsaver.save_for_matlab(model, "exportedModelFolder")
Apply the config.json patch for Keras 3.10+ compatibility (see references/keras-matlabsaver-workflow.md).
MATLAB:
net = importNetworkFromKeras("exportedModelFolder");
assert(numel(net.Learnables.Value) > 0, "Import failed: 0 learnables")
Python:
import os
os.environ["TF_USE_LEGACY_KERAS"] = "1" # MUST be before importing TensorFlow
import tf_keras as keras
model.save("savedModelFolder")
MATLAB:
net = importNetworkFromTensorFlow("savedModelFolder");
Requires tf2onnx in the Python environment: pip install tf2onnx
Python:
model.export("exportedModel.onnx", format="onnx")
MATLAB:
net = importNetworkFromONNX("exportedModel.onnx");
| Mistake | Correct Approach |
|---------|-----------------|
| importNetworkFromKeras fails with "Brace indexing..." | Keras 3.10+ changed config.json — apply the patch (see reference) |
| model.export("folder") then importNetworkFromTensorFlow | No keras_metadata.pb → 0 learnables. Use matlabsaver instead |
| TF_USE_LEGACY_KERAS=1 set after import tensorflow | Must be set before any TF import |
| Using deprecated importKerasNetwork | Use importNetworkFromKeras (R2026a+) or Path 2/3 |
references/keras-matlabsaver-workflow.md — Full matlabsaver procedure for R2026a+references/keras-tf-keras-downgrade.md — tf_keras setup for pre-R2026a| Function | Framework | Purpose |
|----------|-----------|---------|
| importNetworkFromPyTorch | PyTorch | Import .pt2 or .pt as dlnetwork |
| importNetworkFromONNX | ONNX | Import .onnx as dlnetwork |
| importNetworkFromKeras | Keras | Import Keras 3 folder as dlnetwork (R2026a+) |
| importNetworkFromTensorFlow | TF/Keras | Import TF SavedModel as dlnetwork |
| torch.export.export | PyTorch | Export model as .pt2 (Python) |
| matlabsaver.save_for_matlab | Keras | Export Keras 3 for MATLAB (Python) |
| predict | All | Run inference on imported dlnetwork |
| dlarray | All | Labeled multi-dimensional array for deep learning |
----
Copyright 2026 The MathWorks, Inc.
----
Take matlab/matlab-import-external-ai-model from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip.
Without those the skill loads but fails at the first command.