主要内容

基于MATLAB函数块的深度学习网络GPU代码生成

使用GPU编码器™,您可以为Simulink生成优化的代码万博1manbetx®包含各种培训的深度学习网络的模型。您可以使用Simulink实现深度学习功能万博1manbetxMATLAB函数的块或使用深层神经网络图书馆。在实施时MATLAB函数块,用coder.loadDeepLearningNetwork函数加载经过训练的深度学习网络,使用网络对象的目标函数来获得期望的响应。您可以配置代码生成器以利用NVIDIA®CUDA®用于NVIDIA gpu的深度神经网络库(cuDNN)和TensorRT™高性能推理库。生成的代码通过使用您在网络对象中指定的架构、层和参数来实现深度卷积神经网络(CNN)。

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

GoogLeNet已经训练了超过100万张图片,并可以将图片分类为1000个对象类别(如键盘、咖啡杯、铅笔和动物)。该网络以一幅图像作为输入,然后输出图像中对象的标签以及每个对象类别的概率。这个例子向您展示了如何执行模拟和生成CUDA代码的预训练googlenet深度卷积神经网络并分类图像。

  1. 加载预制googlenet网络。您可以选择加载不同的预制网络以进行图像分类。如果未安装所需的支持软件包,请根据提供的说明安装软件。万博1manbetx

    net = googlenet;

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

    分析(网);

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

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

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

创建GoogLeNet模型

  1. 创建Simulin万博1manbetxk模型并插入一个MATLAB函数块的用户定义函数图书馆。

  2. 添加一个图像文件块的计算机视觉工具箱™库,并设置文件名称参数到peppers.png

  3. 添加一个调整块的计算机视觉的工具箱图书馆到模型。设定指定参数的调整块到输出行数和列数并进入(224 224)作为输出行数和列数.这个块将输入图像调整为网络输入层的图像。

    万博1manbetx使用googlenet包含用于对图像进行分类的模拟模型。

  4. 双击MATLAB函数块。将显示默认函数签名MATLAB函数块编辑器。

  5. 定义一个调用的函数googlenet_predict,实现了预测入口点功能。函数头文件声明作为一个论点googlenet_predict函数,得分indxtop.作为返回值。

    功能[得分,indxtop] = googlenet_predict(in)%#codegen.持续的mynet;如果isempty(mynet)mynet = coder.loaddeeplearningnetwork(“googlenet”);结束输入通过率predict_scores = predict(mynet,In);[得分,Indx] =排序(预测_coves,“下降”);indxTop = indx (1:5);

    一个持久化对象yeNet.加载Dagnetwork.对象。在第一次调用到入门点函数时,构建并设置持久对象。在对函数的后续调用中,重用相同的对象来调用预测在输入时,避免重构和重新加载网络对象。

    你也可以使用激活(深度学习工具箱)方法来对特定层进行网络激活。例如,下面的代码行返回中指定的层的网络激活daysidx.

    出=激活(mynet layerIdx,“OutputAs”,“渠道”);

    你也可以使用分类(深度学习工具箱)方法来预测中的图像数据的类标签使用培训的网络yeNet.

    [出来,得分] =分类(MyNet,IN);

    对于LSTM网络,可以使用predictandanddatestate.(深度学习工具箱)resetState(深度学习工具箱)方法。对于使用说明和这些方法的限制,请参阅万博1manbetx支持的功能

  6. 打开块参数MATLAB函数块。在这一点代码生成选项卡上,选择可重复使用的功能功能包装

  7. 连接这些块,如图所示。保存模型googlenetModel

    万博1manbetx显示块之间连接的Simulink模型。

配置GPU加速模型

模型配置参数确定模拟过程中使用的加速度方法。

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

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

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

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

  3. 选择GPU加速

    特定于GPU编码器的选项现在可以在仿真目标> GPU加速度窗格。对于此示例,您可以使用特定于GPU的参数的默认值。

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

  4. 在这一点模拟目标窗格中,设置目标库参数在深度学习小组到cuDNN

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

    您也可以选择张力针对NVIDIA gpu的TensorRT高性能推理库。

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

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

    set_param (“googlenetModel”'gpuacceleration'“上”);

构建GPU加速模型

  1. 要构建和模拟GPU加速模型,请选择模拟选项卡或使用MATLAB命令:

    出= SIM(“googlenetModel”);

    该软件首先检查以查看CUDA / C ++代码是否已为您的模型编译。如果以前创建的代码,则该软件运行模型。如果先前未构建代码,则软件首先生成并编译CUDA / C ++代码,然后运行模型。代码生成工具将生成的代码放在调用的工作文件夹的子文件夹中slprj / _slprj / googlenetModel

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

    我= imread (“peppers.png”);ClassNamestop = ClassNames(out.yout {2} .values.data(:,:,1))h =图;H.Position(3)= 2 * H.Position(3);AX1 =子图(1,2,1);AX2 =子图(1,2,2);图像(AX1,IM);Barh(Ax2,Out.Yout {1} .values.data(1,5:-1:1,1))XLabel(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

    您也可以选择张力针对NVIDIA gpu的TensorRT高性能推理库。

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

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

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

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

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

为模型生成CUDA代码

  1. 在Simuli万博1manbetxnk编辑器中,打开万博1manbetx仿真软件编码器应用程序。

  2. 生成的代码。

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

限制

  • 在Simulink中不支持基于自定义层的深度学习网络的代码生成。万博1manbetx万博1manbetx

  • 图形处理器代码生成MATLAB函数eventflow中的块®不支持图表。万博1manbetx

  • GPU加速已启用,代码生成器不支持万博1manbetx导入自定义代码导入定制的CUDA源文件(*.cu)。相反,使用编码器.CEVAL.在 - 的里面MATLAB函数块。

  • MATLAB函数块不支持来自MATLAB语言的万博1manbetx所有数据类型。对于支持万博1manbetx的数据类型,请参阅块文档。

  • 要部署生成的代码,建议使用它生成一个示例主程序选择生成的选项ert_main.cu.模块。此选项需要嵌入的编码器许可证。

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

    静态googlenetmodelmodelclass :: deeplearning_googlenetmodel_t googlenetmodel_deeplearning;静态googlenetmodelmodelclass googlenetmodel_obj {&googlenetmodel_deeplearning};

另请参阅

功能

相关话题