Latest commit 5c255f2 Nov 14, 2016 @andremoeller andremoeller committed with piiswrong spelling/typo fixes (#3815)

MATLAB binding for mxnet

How to use

The only requirment is build mxnet to get lib/ Sample usage

  • Load model and data:

    img = single(imresize(imread('cat.png'), [224 224])) - 120;
    model = mxnet.model;
    model.load('model/Inception_BN', 39);
  • Get prediction:

    pred = model.forward(img);
  • Do feature extraction on GPU 0:

    feas = model.forward(img, 'gpu', 0, {'max_pool_5b_pool', 'global_pool', 'fc'});
  • See demo.m for more examples

Note on Implementation

We use loadlibrary to load mxnet library directly into Matlab and calllib to call MXNet functions. Note that Matlab uses the column-major to store N-dim arraies while and MXNet uses the row-major. So assume we create an array in matlab with

X = zeros([2,3,4,5]);

If we pass the memory of X into MXNet, then the correct shape will be [5,4,3,2] in MXNet. When processing images, MXNet assumes the data layout is

example x channel x width x height

while in matlab we often store images by

width x height x channel x example

So we should permute the dimensions by X = permute(X, [2, 1, 3, 4]) before passing X into MXNet.


  1. You may get the error GLIBCXX_x.x.xx is not found. Such as on Ubuntu 14.04:
> In loadlibrary (line 359)
Error using loadlibrary (line 447)
There was an error loading the library "/home/muli/work/mxnet/lib/"
version `GLIBCXX_3.4.18' not found (required by

Caused by:
    Error using loaddefinedlibrary
    version `GLIBCXX_3.4.18' not found (required by

One way to fix it is to link MATLAB_ROOT/sys/os/glnxa64/ to your system's libstdc++. For example

muli@ghc:/usr/local/MATLAB/R2015a/sys/os/glnxa64$ sudo rm -r
muli@ghc:/usr/local/MATLAB/R2015a/sys/os/glnxa64$ sudo ln -s /usr/lib/x86_64-linux-gnu/