coder.loadDeepLearningNetwork

Load deep learning network model

Description

net = coder.loadDeepLearningNetwork(filename) loads a pretrained deep learning SeriesNetwork or DAGNetwork object saved in the filename MAT-file. filename must be a valid MAT-file existing on the MATLAB® path containing a single SeriesNetwork or DAGNetwork object.

example

net = coder.loadDeepLearningNetwork(functionname) calls a function that returns a pretrained deep learning SeriesNetwork or DAGNetwork object. functionname must be the name of a function existing on the MATLAB path that returns a SeriesNetwork or DAGNetwork object.

example

net = coder.loadDeepLearningNetwork(___,network_name) is the same as net = coder.loadDeepLearningNetwork(filename) with the option to name the C++ class generated from the network. network_name is a descriptive name for the network object saved in the MAT-file or pointed to by the function. The network name must be a char type that is a valid identifier in C++.

Use this function when generating code from a network object inference. This function generates a C++ class from this network. The class name is derived from the MAT-file name or the function name.

Examples

collapse all

Use of the coder.loadDeepLearningNetwork function to load an VGG-16 series network and generate C++ code for this network.

Get the MAT-file containing the pretrained VGG-16 network.

url = 'https://www.mathworks.com/supportfiles/gpucoder/cnn_models/VGG/vgg16.mat';
websave('vgg16.mat',url);

Create an entry-point function myVGG16 that uses the coder.loadDeepLearningNetwork function to load the vgg16.mat into the persistent mynet SeriesNetwork object.

function out = myVGG16(in)

persistent mynet;
if isempty(mynet)
    mynet = coder.loadDeepLearningNetwork('vgg16.mat', 'myVGGnet');
end

out = predict(mynet,in);

The persistent object avoids reconstructing and reloading the network object during subsequent calls to the function to invoke the predict method on the input.

The input layer of the pretrained VGG-16 network accepts images of size 224x224x3. Use the following lines of code to read an input image from a graphics file and resize it to 224x224.

in = imread('peppers.png');
in = imresize(in,[224,224]);

Create a coder.config configuration object for MEX code generation and set the target language to C++. On the configuration object, set DeepLearningConfig with targetlib as 'mkldnn'. The codegen function must determine the size, class, and complexity of MATLAB function inputs. Use the -args option to specify the size of the input to the entry-point function. Use the -config option to pass the code configuration object.

cfg = coder.config('mex');
cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn'); 
codegen -args {ones(224,224,3,'uint8')} -config cfg myVGG16 -report;

The codegen command places all the generated files in the codegen folder. The folder contains the C++ code for the entry-point function myVGG16.cpp, header and source files containing the C++ class definitions for the convoluted neural network (CNN), weight, and bias files.

Call VGG-16 predict on the input image and display the top five predicted labels.

predict_scores = myVGG16_mex(in);
[scores,indx] = sort(predict_scores, 'descend');
net = coder.loadDeepLearningNetwork('vgg16.mat');
classNames = net.Layers(end).Classes;
disp(classNames(indx(1:5)));
     bell pepper 
     cucumber 
     grocery store 
     acorn squash 
     butternut squash 

Use of the coder.loadDeepLearningNetwork function to load an resnet50 series network and generate CUDA® code for this network.

Create an entry-point function resnetFun that uses the coder.loadDeepLearningNetwork function to call the Deep Learning Toolbox™ toolbox function resnet50. This function returns a pretrained ResNet-50 network.

function out = resnetFun(in)

persistent mynet;
if isempty(mynet)
    mynet = coder.loadDeepLearningNetwork('resnet50', 'myresnet');
end

out = predict(mynet,in);

The persistent object avoids reconstructing and reloading the network object during subsequent calls to the function to invoke the predict method on the input.

The input layer of the pretrained ResNet-50 network accepts images of size 224x224x3. To read an input image from a graphics file and resize it to 224x224, use the following lines of code:

in = imread('peppers.png');
in = imresize(in,[224,224]);

Create a coder.gpuConfig configuration object for MEX code generation and set the target language to C++. The codegen function must determine the size, class, and complexity of MATLAB function inputs. Use the -args option to specify the size of the input to the entry-point function and the -config option to pass the code configuration object.

cfg = coder.gpuConfig('mex');
cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn'); 
codegen -args {ones(224,224,3,'uint8')} -config cfg resnetFun -report;

The codegen command places all the generated files in the codegen folder. It contains the CUDA code for the entry-point function resnetFun.cu, header, and source files containing the C++ class definitions for the convoluted neural network (CNN), weight, and bias files.

Input Arguments

collapse all

Specifies the name of the MAT-file containing the pretrained SeriesNetwork or DAGNetwork object.

Data Types: string

Specifies the name of the function that returns a pretrained SeriesNetwork or DAGNetwork object.

Data Types: string

Descriptive name for the SeriesNetwork object saved in the MAT-file. It must be a char type that is a valid identifier in C++.

Data Types: char

Output Arguments

collapse all

Network inference, returned as a SeriesNetwork object or a DAGNetwork object.

Limitations

  • coder.loadDeepLearningNetwork does not support loading MAT-files with multiple networks. The MAT-file must contain only the network to be loaded.

Introduced in R2017b