代码生成深度学习网络
这个例子展示了如何执行代码生成图像分类应用程序,使用深度学习。它使用codegen
命令来生成一个墨西哥人函数运行预测通过使用图像分类网络如MobileNet-v2 ResNet, GoogLeNet。
第三方的先决条件
要求
这个示例中生成CUDA墨西哥人,有以下第三方的要求。
CUDA®启用NVIDIA GPU®和兼容的驱动程序。
可选
等non-MEX构建静态、动态库或可执行文件,这个例子有以下额外的需求。
英伟达工具包。
英伟达cuDNN图书馆。
环境变量的编译器和库。有关更多信息,请参见第三方硬件和设置必备产品下载188bet金宝搏。
验证GPU环境
使用coder.checkGpuInstall
函数来确认所需的编译器和库运行这个例子是正确设置。
envCfg = coder.gpuEnvConfig (“主机”);envCfg。DeepLibTarget =“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);
mobilenetv2_predict
入口点函数
MobileNet-v2是一个卷积神经网络,训练图像从ImageNet数据库超过一百万。网络是155层深,可以分类图像到1000年对象类别,如键盘,鼠标,铅笔,和许多动物。的网络图像输入大小224 - 224。使用analyzeNetwork
(深度学习工具箱)函数显示深度学习网络的交互式可视化体系结构。
网= mobilenetv2 ();analyzeNetwork(净);
的mobilenetv2_predict.m
入口点函数接受一个图像输入和运行预测图像使用pretrained MobileNet-v2卷积神经网络。函数使用一个持久对象mynet加载系列网络对象和重用的持久对象预测在随后的电话。
类型(“mobilenetv2_predict.m”)
% 2017 - 2019版权MathWorks公司= mobilenetv2_predict函数()% # codegen持久mynet;如果isempty (mynet) mynet = coder.loadDeepLearningNetwork (“mobilenetv2”、“mobilenetv2”);结束%通过在输入= mynet.predict(的);
墨西哥人运行代码生成
生成CUDA代码mobilenetv2_predict
入口点函数,创建一个GPU代码配置对象为一个墨西哥人的目标和目标语言设置为c++。使用coder.DeepLearningConfig
函数创建一个CuDNN
深度学习配置对象,并将其分配给DeepLearningConfig
GPU代码配置对象的属性。运行codegen
命令并指定一个输入(224224 3)的大小。这个值对应的输入层大小MobileNet-v2网络。
cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig = coder.DeepLearningConfig (“cudnn”);codegen配置cfgmobilenetv2_predictarg游戏{1 (224224 3)}报告
代码生成成功:查看报告
生成的代码描述
系列网络生成c++类包含一个数组的155层类和函数,调用预测,清理网络。
类b_mobilenetv2_0{…。公众:b_mobilenetv2_0 ();无效的设置();无效的预测();无效的清理();~ b_mobilenetv2_0 ();};
的设置()
类的方法设置处理,为每一层的网络对象分配内存。的预测()
方法执行预测网络中为每个155层。
的入口点函数mobilenetv2_predict ()
在生成的代码文件中mobilenetv2_predict.cu
构造一个静态的对象b_mobilenetv2类类型并调用设置和预测网络对象。
静态b_mobilenetv2_0mynet;静态boolean_Tmynet_not_empty;
/ *函数定义* /无效mobilenetv2_predict (const real_T [150528], [1000] real32_T){如果(! mynet_not_empty) {DeepLearningNetwork_setup (&mynet);mynet_not_empty = true;}
/ *通过输入* / DeepLearningNetwork_predict (&mynet,,);}
二进制文件导出为层参数完全连接和卷积等在网络层。例如,文件cnn_mobilenetv2_conv * _w和cnn_mobilenetv2_conv * _b对应重量和偏见卷积网络层的参数。看到生成的文件的列表,使用:
dir (fullfile (pwd,“codegen”,墨西哥人的,“mobilenetv2_predict”))
运行生成的墨西哥人
加载一个输入图像。
我= imread (“peppers.png”);imshow (im);
调用mobilenetv2_predict_mex
在输入图像。
[224224]im = imresize (im);predict_scores = mobilenetv2_predict_mex(双(im));
五大预测分数和标签。
[分数,indx] =排序(predict_scores“下”);一会= net.Layers .ClassNames(结束);classNamesTop =一会(indx (1:5));h =图;h.Position (3) = 2 * h.Position (3);ax₁=情节(1、2、1);ax2 =情节(1、2、2);图像(ax₁, im);barh (ax2,分数(5:1:1))包含(ax2,“概率”)yticklabels (ax2 classNamesTop (5: 1:1)) ax2。YAxisLocation =“对”;sgtitle (“五大预测使用MobileNet-v2”)
清晰的静态网络对象在内存中加载。
清晰的墨西哥人;
通过使用ResNet-50网络分类的图像
您还可以使用DAG网络ResNet-50图像分类。一个pretrained ResNet-50 MATLAB模型中可用ResNet-50深度学习工具箱支持包。金宝app下载并安装包的支持,使用附加的探险家。金宝app更多地了解查找和安装附件,请参阅获取和管理插件。
网= resnet50;disp(净)
DAGNetwork属性:层:[177×1 nnet.cnn.layer.Layer]连接:[192×2表]InputNames: {“input_1”} OutputNames: {“ClassificationLayer_fc1000”}
墨西哥人运行代码生成
生成CUDA代码resnet_predict.m
入口点函数,创建一个GPU代码配置对象为一个墨西哥人的目标和目标语言设置为c++。这个入口点函数调用resnet50
函数加载网络和对输入图像进行预测。
cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig = coder.DeepLearningConfig (“cudnn”);codegen配置cfgresnet_predictarg游戏{1 (224224 3)}报告
代码生成成功:查看报告
调用resnet_predict_mex
在输入图像。
predict_scores = resnet_predict_mex(双(im));
五大预测分数和标签。
[分数,indx] =排序(predict_scores“下”);一会= net.Layers .ClassNames(结束);classNamesTop =一会(indx (1:5));h =图;h.Position (3) = 2 * h.Position (3);ax₁=情节(1、2、1);ax2 =情节(1、2、2);图像(ax₁, im);barh (ax2,分数(5:1:1))包含(ax2,“概率”)yticklabels (ax2 classNamesTop (5: 1:1)) ax2。YAxisLocation =“对”;sgtitle (“五大预测使用ResNet-50”)
清晰的静态网络对象在内存中加载。
清晰的墨西哥人;
分类的图像通过使用GoogLeNet(《盗梦空间》)网络
一个pretrained GoogLeNet MATLAB模型中可用GoogLeNet深度学习工具箱支持包。金宝app下载并安装包的支持,使用附加的探险家。金宝app更多地了解查找和安装附件,请参阅获取和管理插件。
网= googlenet;disp(净)
DAGNetwork属性:层:[144×1 nnet.cnn.layer.Layer]连接:[170×2表]InputNames:{“数据”}OutputNames:{“输出”}
墨西哥人运行代码生成
生成CUDA代码googlenet_predict.m
入口点函数。这个入口点函数调用googlenet
函数加载网络和对输入图像进行预测。生成代码入口点函数,为墨西哥人创建一个GPU配置对象的目标。
cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig = coder.DeepLearningConfig (“cudnn”);codegen配置cfggooglenet_predictarg游戏{1 (224224 3)}报告
代码生成成功:查看报告
调用googlenet_predict_mex
在输入图像。
[224224]im = imresize (im);predict_scores = googlenet_predict_mex(双(im));
五大预测分数和标签。
[分数,indx] =排序(predict_scores“下”);一会= net.Layers .ClassNames(结束);classNamesTop =一会(indx (1:5));h =图;h.Position (3) = 2 * h.Position (3);ax₁=情节(1、2、1);ax2 =情节(1、2、2);图像(ax₁, im);barh (ax2,分数(5:1:1))包含(ax2,“概率”)yticklabels (ax2 classNamesTop (5: 1:1)) ax2。YAxisLocation =“对”;sgtitle (“五大预测使用GoogLeNet”)
清晰的静态网络对象在内存中加载。
清晰的墨西哥人;
另请参阅
功能
coder.checkGpuInstall
|codegen
|coder.DeepLearningConfig
|coder.loadDeepLearningNetwork
|mobilenetv2
(深度学习工具箱)|resnet50
(深度学习工具箱)|googlenet
(深度学习工具箱)
对象
coder.gpuConfig
|coder.CodeConfig
|coder.EmbeddedCodeConfig
|coder.gpuEnvConfig
|coder.CuDNNConfig
|coder.TensorRTConfig