使用GPU编码器™,您可以为Simulink生成优化的代码金宝app®包含各种训练过的深度学习网络的模型。您可以通过使用Simulink来实现深度学习功能金宝appMATLAB函数块或使用深层神经网络图书馆。在实现与MATLAB函数块,使用coder.loadDeepLearningNetwork
函数加载经过训练的深度学习网络,使用网络对象的目标函数来获得期望的响应。您可以配置代码生成器以利用NVIDIA®库达®深度神经网络库(cuDNN)和TensorRT™ 用于NVIDIA GPU的高性能推理库。生成的代码通过使用在网络对象中指定的体系结构、层和参数来实现深度卷积神经网络(CNN)。
GoogLeNet接受过超过一百万张图像的训练,可以将图像分为1000个对象类别(如键盘、咖啡杯、铅笔和动物)。该网络将图像作为输入,然后输出图像中对象的标签以及每个对象类别的概率。此示例向您展示了如何为预训练的对象执行模拟和生成CUDA代码googlenet
深度卷积神经网络和分类图像。
加载预先训练好的GoogLeNet网络。您可以选择加载一个不同的预先训练的网络来进行图像分类。如果您没有安装所需的支持包,请按照提供的说明安装软件。金宝app
网= googlenet;
的对象净
包含了DAGNetwork
对象。使用analyzeNetwork
显示网络架构的交互式可视化,检测网络中的错误和问题,并显示关于网络层的详细信息。层信息包括层激活和可学习参数的大小,可学习参数的总数,循环层的状态参数的大小。
analyzeNetwork(净);
要分类的图像的大小必须与网络的输入大小相同。对于GoogLeNet来说imageInputLayer
是224 - 224 - 3。这个类
输出的属性classificationLayer
包含网络所学习的类的名称。从1000个随机类名中查看10个。
classNames=net.Layers(end).Classes;numClasses=numel(类名);disp(类名(randperm(numclass,10)))
“快艇”“屏风”“等足动物”“木勺”“口红”“德雷克”“鬣狗”“哑铃”“草莓”“奶油冻苹果”
创建一个Simul金宝appink模型并插入一个MATLAB函数挡用户定义函数图书馆。
添加文件中的图像挡计算机视觉工具箱™库并设置文件名称
参数peppers.png
.
添加一个调整大小挡计算机视觉工具箱库到模型。设置指定参数调整大小块输出行数和列数
并输入[224 224]
作为输出行数和列数.这个块将输入图像调整为网络输入层的图像。
双击MATLAB函数块。函数的默认签名出现在MATLAB函数块编辑器。
定义一个名为古格伦
,实现了预测入口点功能。函数头文件声明在里面
作为对古格伦
功能,带有分数
和indxTop
作为返回值。
函数[分数,indxTop] = googlenet_predict(中)% # codegen持久的mynet;如果isempty(mynet) mynet = code . loaddeeplearningnetwork (“谷歌网”);终止%传入输入predict_scores =预测(mynet);[分数,indx] =排序(predict_scores“下”);indxTop = indx (1:5);
持久对象mynet
加载DAGNetwork
对象。在第一次调用入口点函数时,构造并建立持久对象。在对该函数的后续调用中,将重用相同的对象来调用预测
在输入上,避免重建和重新加载网络对象。
你也可以用the激活
(深度学习工具箱)方法来对特定层进行网络激活。例如,下面的代码行返回中指定的层的网络激活layerIdx
.
out=激活(mynet、in、layerIdx、'OutputAs'、'Channels');
你也可以用the分类
(深度学习工具箱)用于预测中图像数据的类标签的方法在里面
使用经过训练的网络mynet
.
[,分数]=分类(mynet,);
对于LSTM网络,可以使用predictAndUpdateState
(深度学习工具箱)和resetState
(深度学习工具箱)方法。有关这些方法的使用说明和限制,请参阅金宝app支持功能.
的块参数MATLAB函数块。在代码生成选项卡,选择可重用的功能
对于函数包装.
如图所示连接这些块。将模型保存为googlenetModel
.
模型配置参数决定了仿真过程中使用的加速度方法。
打开“配置参数”对话框。打开解算器窗格。要编译你的模型加速和生成CUDA代码,配置模型使用固定步长求解器。该表显示了本示例的求解器配置。
参数 | 设置 | 对生成代码的影响 |
---|---|---|
类型 | 固定步长 |
保持代码生成所需的恒定(固定)步长 |
解算器 | 离散(无连续状态) |
应用固定步长积分技术计算模型的状态导数 |
固定的大小 | 汽车 |
金宝appSimulink选择步长 |
选择模拟目标窗格。设置语言来C++
.
选择GPU加速.
特定于GPU编码器的选项现在可以在模拟目标> GPU加速窗格。对于本例,您可以为这些特定于gpu的参数使用默认值。
在模拟目标窗格中,设置目标库参数深度学习集团cuDNN
.
你也可以选择TensorRT
针对NVIDIA GPU的TensorRT高性能推理库。
点击好吧保存并关闭“配置参数”对话框。
你可以用设置参数
在MATLAB中以编程方式配置模型参数®命令窗口。
set_param (“googlenetModel”,“GPUAcceleration”,“开”);
要构建和模拟GPU加速模型,请选择运行上模拟tab或使用MATLAB命令:
= sim卡(“googlenetModel”);
软件首先检查CUDA/ c++代码之前是否为你的模型编译过。如果代码是先前创建的,则软件运行模型。如果之前没有构建代码,软件首先生成并编译CUDA/ c++代码,然后运行模型。代码生成工具将生成的代码放在名为slprj/_slprj/googlenetModel
.
将前五个预测标签及其相关概率显示为直方图。由于网络将图像分类为如此多的对象类别,并且许多类别是相似的,所以在评估网络时通常考虑前五的精度。网络以高概率将图像分类为甜椒。
im=imread(“peppers.png”);classNamesTop = classNames(out.yout{2}.Values.Data(:,: 1)) h = figure;h.Position (3) = 2 * h.Position (3);ax₁=情节(1、2、1);ax2 =情节(1、2、2);图像(ax₁,im);barh (ax2 out.yout {1} .Values.Data(1、5:1:1,1)包含(ax2,“概率”) yticklabels (ax2 classNamesTop (5: 1:1)) ax2。YAxisLocation =“对”;sgtitle (“使用谷歌网预测的前五名”)
模型配置参数为代码生成和构建过程提供了许多选项。
选择代码生成窗格。设置系统目标文件来grt.tlc
.
您也可以使用嵌入式编码器®目标文件,ert.tlc
.
设置语言来C++
.
选择生成GPU的代码.
选择仅生成代码.
选择工具链. 对于Linux®平台,选择NVIDIA CUDA | gmake(64位Linux)
.对于Windows®系统,选择NVIDIA CUDA (w/Microsoft Visual c++ 20XX) | nmake(64位windows)
.
在代码生成>报告窗格中,选择创建代码生成报告和自动打开报表.
在代码生成>接口窗格中,设置目标库在深度学习集团cuDNN
.
你也可以选择TensorRT
针对NVIDIA GPU的TensorRT高性能推理库。
当生成GPU的代码参数启用时,特定于GPU编码器的选项在代码生成> GPU代码窗格。在本例中,可以使用默认值的gpu相关参数代码生成> GPU代码窗格。
点击好吧保存并关闭“配置参数”对话框。
你也可以用设置参数
函数,在MATLAB命令窗口以编程方式配置模型参数。
set_param (“googlenetModel”,“GenerateGPUCode”,CUDA的);
在Simuli金宝appnk编辑器中,打开金宝app仿真软件编码器应用程序。
生成的代码。
消息将出现在诊断查看器中。代码生成器生成CUDA源文件和头文件,以及HTML代码生成报告。代码生成器将文件放在生成文件夹,子文件夹名为googlenetModel_grt_rtw
在当前工作文件夹下。
在Simulink中不支持基于自定义层的深度学习网络的代码生成。金宝app金宝app
图形处理器的代码生成MATLAB函数块Stateflow®不支持图表。金宝app
当GPU加速启用时,代码生成器不支持金宝app导入自定义代码用于导入自定义编写的CUDA源文件(*.cu)。相反,使用coder.ceval
在MATLAB函数块。
这个MATLAB函数块不支持来自MATLAB语言的金宝app所有数据类型。有关受支金宝app持的数据类型,请参阅块文档。
为了部署生成的代码,建议使用生成一个示例主程序选项来生成ert_main.cu
模块。此选项需要Embedded Coder许可证。
你也可以用thert_cppclass_main.cpp
MathWorks提供的静态主模块®.但是,必须修改静态主文件,使模型类构造函数指向深度学习对象。例如,
静态googlenetModelModelClass: DeepLearning_googlenetModel_T googlenetModel_DeepLearning;静态googlenetModelModelClass googlenetModel_Obj{&googlenetModel_DeepLearning};
开放式系统
(金宝appSimulink)|加载系统
(金宝appSimulink)|保存系统
(金宝appSimulink)|close_system
(金宝appSimulink)|bdclose
(金宝appSimulink)|get_param
(金宝appSimulink)|设置参数
(金宝appSimulink)|模拟
(金宝appSimulink)|slbuild
(金宝appSimulink)