DJL currently supports symbolic model loading from MXNet. A gluon HybridBlock can be converted into a symbol for loading by doing as follows:
from mxnet import nd from mxnet.gluon import nn # create a simple HybridSequential block net = nn.HybridSequential() net.add(nn.Dense(256, activation='relu')) net.add(nn.Dense(10)) # initialize and hybridize the block net.initialize() net.hybridize() # create sample input and run forward once x = nd.random.uniform(shape=(2, 20)) net(x) # export your model net.export("sample_model")
After this is run, you will find
sample_model-symbol.json in your local path.
These can be loaded in DJL.
In real applications, you may want to create and train a HybridBlock before exporting it. The code block below shows how you can convert a GluonCV pretrained model:
import mxnet as mx from gluoncv import model_zoo # get the pretrained model from the gluon model zoo net = model_zoo.get_model('resnet18_v1', pretrained=True) net.hybridize() # create a sample input and run forward once (required for tracing) x = nd.random.uniform(shape=(1, 3, 224, 224)) net(x) # export your model net.export("sample_model")