主要内容

深度神经网络库中块的GPU代码生成

使用GPU编码器™,您可以为Simulink生成优化的代码金宝app®包含各种训练过的深度学习网络的模型。您可以通过使用Simulink实现深度学习功能金宝appMATLAB函数的块或使用深层神经网络图书馆。的深层神经网络块库包括:

您可以配置代码生成器以利用NVIDIA®CUDA®用于NVIDIA gpu的深度神经网络库(cuDNN)和TensorRT™高性能推理库。生成的代码通过使用您在网络对象中指定的架构、层和参数来实现深度卷积神经网络(CNN)。

示例:使用GoogLeNet对图像进行分类

GoogLeNet已经训练了超过100万张图片,并可以将图片分类为1000个对象类别(如键盘、咖啡杯、铅笔和动物)。该网络以一幅图像作为输入,然后输出图像中对象的标签,其中包含每个对象类别的概率。这个例子展示了如何执行仿真和生成CUDA代码的预训练googlenet深度卷积神经网络和分类图像。预先训练的网络可作为支持包从深度学习工具箱™获得。金宝app

  1. 加载预先训练好的GoogLeNet网络。

    网= googlenet;

  2. 的对象包含了DAGNetwork对象。使用analyzeNetwork显示网络架构的交互式可视化,检测网络中的错误和问题,并显示关于网络层的详细信息。层信息包括层激活和可学习参数的大小,可学习参数的总数,循环层的状态参数的大小。

    analyzeNetwork(净);

    分析显示GoogLeNet网络分析的网络应用。

  3. 您想要分类的图像必须与网络的输入大小相同。对于GoogLeNet来说,它的大小imageInputLayer是224 - 224 - 3。的输出属性classificationLayer包含网络所学习的类的名称。从1000个随机类名中查看10个。

    一会= net.Layers . class(结束);numClasses =元素个数(类名);disp(类名(randperm (numClasses 10)))
    “快艇”“纱窗”“等足动物”“木勺”“口红”“德雷克”“鬣狗”“哑铃”“草莓”“奶油苹果”

创建GoogLeNet模型

  1. 创建一个Simul金宝appink模型并插入一个预测块的深层神经网络图书馆。

  2. 添加一个图像文件块的计算机视觉工具箱™库,并设置文件名称参数peppers.png.添加一个调整块的计算机视觉的工具箱库到模型。设置指定参数的调整输出行数和列数并输入(224 224)作为输出行数和列数.resize块将输入图像调整为网络输入层的图像。添加一个到工作空间,并将变量名更改为yPred

    金宝appSimulink模型包含使用GoogLeNet对图像进行分类的块。

  3. 打开块参数(子系统)预测块。选择网络从MATLAB函数网络googlenetMATLAB函数

  4. 如图所示连接这些块。将模型保存为googlenetModel.slx

    金宝app显示块之间连接的Simulink模型。

配置GPU加速的型号

模型配置参数决定了仿真过程中使用的加速度方法。

  1. 打开“配置参数”对话框。打开解算器窗格。要编译你的模型加速和生成CUDA代码,配置模型使用固定步长求解器。该表显示了本示例的求解器配置。

    参数 设置 对生成代码的影响
    类型 固定步 维护一个常量(固定的)步长,这是代码生成所需要的
    解算器 离散(无连续状态) 应用定步积分技术计算模型的状态导数
    固定的大小 汽车 金宝appSimulink选择步长

    配置参数对话框的快照显示模拟求解器选项。

  2. 选择模拟目标窗格。设置语言c++

  3. 选择GPU加速.特定于GPU编码器的选项现在可以在模拟目标> GPU加速窗格。对于本例,可以使用这些参数的默认值。

    在模型配置参数对话框的“GPU加速”窗格中。

  4. 模拟目标窗格中,设置目标库深度学习集团cuDNN.你也可以选择TensorRT

    配置参数对话框的快照,显示模拟加速的深度学习选项。

  5. 点击好吧保存并关闭“配置参数”对话框。

    您可以使用set_param在MATLAB命令窗口中以编程方式配置模型参数。

    set_param (“googlenetModel”“GPUAcceleration”“上”);

构建GPU加速模型

  1. 要构建和模拟GPU加速模型,请选择运行模拟TAB或使用命令:

    = sim卡(“googlenetModel”);

    软件首先检查CUDA/ c++代码之前是否为你的模型编译过。如果代码是先前创建的,则软件运行模型。如果之前没有构建代码,软件首先生成并编译CUDA/ c++代码,然后运行模型。代码生成工具将生成的代码放在名为slprj / _slprj / googlenetModel

  2. 以直方图的形式显示前5个预测标签及其相关的概率。由于网络将图像分类为如此多的对象类别,而且许多类别是相似的,因此在评估网络时,通常会考虑前五名的精度。该网络将图像分类为一个高概率的甜椒。

    我= imread (“peppers.png”);predict_scores = out.yPred.Data (:: 1);[分数,indx] =排序(predict_scores“下”);topScores =分数(1:5);h = index (index, index, index, index, index, index);h.Position (3) = 2 * h.Position (3);ax₁=情节(1、2、1);ax2 =情节(1、2、2);图像(ax₁,im);barh (ax2 topScores)包含(ax2,“概率”) yticklabels (ax2 classNamesTop (5: 1:1)) ax2。YAxisLocation =“对”;sgtitle (“使用GoogLeNet的5大预测”

为代码生成配置模型

模型配置参数为代码生成和构建过程提供了许多选项。

  1. 在“配置参数”对话框中,选择代码生成窗格。设置系统目标文件grt.tlc

    您也可以使用嵌入式编码器®目标文件ert.tlc

  2. 设置语言c++

  3. 选择生成GPU的代码

  4. 选择只生成代码

  5. 选择工具链.Linux®平台,选择NVIDIA CUDA | gmake(64位Linux).对于Windows®系统,选择NVIDIA CUDA (w/Microsoft Visual c++ 20XX) | nmake(64位windows)

  6. 代码生成>报告窗格中,选择创建代码生成报告自动打开报告

  7. 代码生成>接口窗格中,设置目标库深度学习集团cuDNN.你也可以选择TensorRT

  8. 特定于GPU编码器的选项在代码生成> GPU代码窗格。在本例中,可以使用默认值的gpu相关参数代码生成> GPU代码窗格。

    在模型配置参数对话框的“GPU代码”窗格中。

  9. 点击好吧保存并关闭“配置参数”对话框。

    你也可以用set_param在MATLAB命令窗口中以编程方式配置模型参数。

    set_param (“googlenetModel”“GenerateGPUCode”CUDA的);

为模型生成CUDA代码

  1. 在Simuli金宝appnk编辑器中,打开金宝app仿真软件编码器应用程序。

  2. 生成的代码。

消息将出现在诊断查看器中。代码生成器生成CUDA源文件和头文件,以及HTML代码生成报告。代码生成器将文件放在建立文件夹,子文件夹名为googlenetModel_grt_rtw在当前工作文件夹下。

限制

  • 在Simulink中不支持基于自定义层的深度学习网络的代码生成。金宝app金宝app

  • 图形处理器代码生成MATLAB函数块Stateflow®不支持图表。金宝app

  • 代码生成器不支持来自MATLAB语言的所有数据类型。金宝app有关受支金宝app持的数据类型,请参阅块文档。

  • 为了部署生成的代码,建议使用生成一个示例主程序选项来生成ert_main.cu模块。此选项需要Embedded Coder许可证。

    你也可以用thert_cppclass_main.cppMathWorks提供的静态主模块®.但是,必须修改静态主文件,使模型类构造函数指向深度学习对象。例如,

    静态googlenetModelModelClass: DeepLearning_googlenetModel_T googlenetModel_DeepLearning;静态googlenetModelModelClass googlenetModel_Obj{&googlenetModel_DeepLearning};

另请参阅

功能

相关的话题