Main Content

coder.loadDeepLearningNetwork

加载深度学习网络模型

说明

net = coder.loadDeepLearningNetwork(filename) 加载保存在 filename MAT 文件中的预训练深度学习 dlnetwork (Deep Learning Toolbox)SeriesNetwork (Deep Learning Toolbox)DAGNetwork (Deep Learning Toolbox)yolov2ObjectDetector (Computer Vision Toolbox)ssdObjectDetector (Computer Vision Toolbox) 对象。filename 必须是存在于 MATLAB® 路径中的有效 MAT 文件,其中包含单个 dlnetworkSeriesNetworkDAGNetworkyolov2ObjectDetectorssdObjectDetector 对象。MAT 文件只能包含要加载的网络。

net = coder.loadDeepLearningNetwork(functionname) 调用返回预训练深度学习 dlnetwork (Deep Learning Toolbox)SeriesNetworkDAGNetworkyolov2ObjectDetectorssdObjectDetector 对象的函数。functionname 必须是存在于 MATLAB 路径中的函数的名称,该函数返回 dlnetworkSeriesNetworkDAGNetworkyolov2ObjectDetectorssdObjectDetector 对象。

示例

net = coder.loadDeepLearningNetwork(___,network_name)net = coder.loadDeepLearningNetwork(filename) 相同,只是可以选择命名从网络生成的 C++ 类。network_name 是保存在 MAT 文件中或由函数指向的网络对象的描述性名称。网络名称必须为 char 类型,这是 C++ 中的有效标识符。

从网络对象推断生成代码时使用此函数。此函数从这个网络生成 C++ 类。类名称派生自 MAT 文件名或函数名称。

注意

coder.loadDeepLearningNetwork 的输入参量必须为编译时常量。

示例

示例

全部折叠

使用 coder.loadDeepLearningNetwork 函数加载 VGG-16 串行网络并为此网络生成 C++ 代码。

获取包含预训练的 VGG-16 网络的 MAT 文件。

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

创建一个入口函数 myVGG16,该函数使用 coder.loadDeepLearningNetwork 函数将 vgg16.mat 加载到持久性 mynet SeriesNetwork 对象中。

function out = myVGG16(in)

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

out = predict(mynet,in);

该持久性对象可避免在后续调用函数以调用输入的 predict 方法时重新构造和重新加载网络对象。

预训练的 VGG-16 网络的输入层接受大小为 224x224x3 的图像。使用以下代码行从图形文件中读取一个输入图像,并将其大小调整为 224x224

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

为 MEX 代码生成创建一个 coder.config 配置对象,并将目标语言设置为 C++。在配置对象上,将 DeepLearningConfigtargetlib 设置为 'mkldnn'codegen 函数必须确定 MATLAB 函数输入的大小、类和复/实性。使用 -args 选项指定入口函数的输入大小。使用 -config 选项传递代码配置对象。

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

codegen 命令将所有生成的文件放在 codegen 文件夹中。该文件夹包含入口函数 myVGG16.cpp 的 C++ 代码、包含神经网络的 C++ 类定义的头文件和源文件、权重以及偏置文件。

对输入图像调用 VGG-16 predict 函数并显示前五个预测标签。

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 

使用 coder.loadDeepLearningNetwork 函数加载 resnet50 串行网络并为此网络生成 CUDA® 代码。

创建一个入口函数 resnetFun,该函数使用 coder.loadDeepLearningNetwork 函数调用 Deep Learning Toolbox™ 工具箱函数 resnet50。此函数返回一个预训练的 ResNet-50 网络。

function out = resnetFun(in)

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

out = predict(mynet,in);

该持久性对象可避免在后续调用函数以调用输入的 predict 方法时重新构造和重新加载网络对象。

预训练的 ResNet-50 网络的输入层接受大小为 224x224x3 的图像。要从图形文件中读取一个输入图像并将其大小调整为 224x224,请使用以下代码行:

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

为 MEX 代码生成创建一个 coder.gpuConfig 配置对象,并将目标语言设置为 C++。codegen 函数必须确定 MATLAB 函数输入的大小、类和复/实性。使用 -args 选项指定入口函数的输入大小,使用 -config 选项传递代码配置对象。

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

codegen 命令将所有生成的文件放在 codegen 文件夹中。该文件夹包含有关入口函数 resnetFun.cu 的 CUDA 代码、头文件、包含神经网络的 C++ 类定义的源文件、权重以及偏置文件。

输入参数

全部折叠

指定包含预训练的 dlnetworkSeriesNetworkDAGNetworkyolov2ObjectDetectorssdObjectDetector 对象的 MAT 文件的名称。

此输入参量必须为编译时常量。

数据类型: string

指定返回预训练的 dlnetworkSeriesNetworkDAGNetworkyolov2ObjectDetectorssdObjectDetector 对象的函数的名称。

此输入参量必须为编译时常量。

数据类型: string

保存在 MAT 文件中的网络对象的描述性名称。它必须为 char 类型,这是 C++ 中的有效标识符。

此输入参量必须为编译时常量。

数据类型: char

输出参量

全部折叠

网络推断,以 dlnetworkSeriesNetworkDAGNetworkyolov2ObjectDetectorssdObjectDetector 对象形式返回。

限制

  • coder.loadDeepLearningNetwork 不支持使用多个网络加载 MAT 文件。

  • MAT 文件只能包含要加载的网络。

  • 代码生成器表示由区域设置确定的 8 位 ASCII 代码集中的字符。因此,在文件、文件夹或网络名称中使用非 ASCII 字符可能导致错误。有关详细信息,请参阅代码生成中的字符编码

扩展功能

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

版本历史记录

在 R2017b 中推出