GPU代码生成深度学习网络使用MATLAB函数块
与GPU编码器™,您可以生成模型的优化代码万博1manbetx®模型包含各种各样的训练有素的深度学习网络。您可以实现仿真软件使用的深度学习功能万博1manbetxMATLAB函数阻塞或使用的深层神经网络图书馆。在实现与MATLAB函数块,用coder.loadDeepLearningNetwork
函数加载一个训练有素的深入学习网络和网络对象的使用对象函数来获得所需的响应。您可以配置代码生成器NVIDIA的利用®CUDA®深层神经网络库(cuDNN)和TensorRT™高性能NVIDIA gpu的推理库。生成的代码实现了深卷积神经网络(CNN)通过使用体系结构中,您指定在网络层,参数对象。
例如:通过使用GoogLeNet分类图像
GoogLeNet已经在超过一百万个图像和训练可以分类图像到1000年对象类别(如键盘、咖啡杯、铅笔和动物)。网络需要一个图像作为输入,然后输出图像中对象的标签一起为每个对象的类别的概率。这个例子向您展示了如何执行模拟和生成pretrained CUDA代码googlenet
深卷积神经网络和图像进行分类。
加载pretrained GoogLeNet网络。你可以选择加载不同pretrained网络图像分类。如果你没有安装所需的支持包,根据提供的指令安装软件。万博1manbetx
网= googlenet;
的对象
净
包含了DAGNetwork
对象。使用analyzeNetwork
函数显示一个交互式可视化的网络架构,来检测网络中的错误和问题,并显示详细信息网络层。层信息包括层激活的大小和可学的参数,可学的参数的总数,复发性层的状态参数的大小。analyzeNetwork(净);
你要分类的图像必须有相同的大小作为输入网络的大小。GoogLeNet的大小
imageInputLayer
是224 - 224 - 3。的类
输出的属性classificationLayer
包含类的名称由网络学习。10个随机类名的共有1000人。一会= net.Layers . class(结束);numClasses =元素个数(类名);disp(类名(randperm (numClasses 10)))
“快艇”“纱窗”“等足类动物”“木匙”“口红”“德雷克”“土狼”“哑铃”“草莓”“奶油苹果”
创建GoogLeNet模型
创建一个仿真软件模万博1manbetx型和插入MATLAB函数块的用户定义函数图书馆。
添加一个图像文件块的计算机视觉工具箱™图书馆和设置
文件名称
参数peppers.png
。添加一个调整块的计算机视觉的工具箱对模型库。设置指定参数的调整块
输出行和列的数量
并输入(224 224)
的价值输出行和列的数量。这一杯啤酒会自动输入图像网络的输入层。双击MATLAB函数块。一个默认的函数签名出现在MATLAB函数块编辑器。
定义一个函数调用
googlenet_predict
入口点函数,实现了预测。函数头声明在
作为一个参数googlenet_predict
函数,分数
和indxTop
的返回值。函数[分数,indxTop] = googlenet_predict(中)% # codegen持续的mynet;如果isempty (mynet) mynet = coder.loadDeepLearningNetwork (“googlenet”);结束%通过输入predict_scores =预测(mynet);[分数,indx] =排序(predict_scores“下”);indxTop = indx (1:5);
一个持久化对象
mynet
加载DAGNetwork
对象。在第一次调用的入口点函数,构造持久对象和设置。在随后的调用函数,要调用相同的对象被重复使用预测
在输入,避免重建并重新加载网络对象。您还可以使用
激活
(深度学习工具箱)网络激活特定层的方法。例如,下面的代码行返回指定的层的网络激活layerIdx
。出=激活(mynet layerIdx,“OutputAs”,“渠道”);
您还可以使用
分类
(深度学习工具箱)图像数据的方法来预测类标签在
使用训练网络mynet
。[,分数]=分类(mynet,);
LSTM网络,你可以使用
predictAndUpdateState
(深度学习工具箱)和resetState
(深度学习工具箱)方法。使用笔记和这些方法的局限性,看到万博1manbetx支持功能。开放的块参数MATLAB函数块。在代码生成选项卡上,选择
可重用的功能
为函数包装。连接这些块如图表所示。保存模型
googlenetModel
。
为GPU加速配置模型
模型配置参数决定加速度方法在模拟。
打开配置参数对话框。打开解算器窗格。编制加速度模型并生成CUDA代码,配置模型使用一个固定的解决者。此表显示了这个示例的解算器配置。
参数 设置 影响生成的代码 类型 固定步
保持一个常数(固定)步长,所需的代码生成 解算器 离散(没有连续状态)
适用于固定的集成技术,计算模型的状态导数 固定的大小 汽车
万博1manbetx模型选择步长 选择模拟目标窗格。设置语言来
c++
。选择GPU加速。
选择特定的GPU编码器现在可见的模拟目标> GPU加速窗格。对于这个示例,您可以使用这些GPU-specific参数的默认值。
在模拟目标窗格中,设置目标库参数深度学习集团
cuDNN
。您也可以选择
TensorRT
针对TensorRT高性能NVIDIA gpu的推理库。点击好吧保存并关闭配置参数对话框。
您可以使用
set_param
在MATLAB编程配置模型参数®命令窗口。set_param (“googlenetModel”,“GPUAcceleration”,“上”);
构建GPU加速的模型
构建和模拟GPU加速模型,选择运行在模拟选项卡或使用MATLAB命令:
= sim卡(“googlenetModel”);
软件首先检查是否CUDA / c++代码以前编译您的模型。如果以前创建的代码,运行的软件模型。如果代码没有之前构建,首先生成和编译的软件CUDA / c++代码,然后运行模型。代码生成工具生成的代码在一个地方工作文件夹的子文件夹
slprj / _slprj / googlenetModel
。显示五大标签及其相关预测概率直方图。因为网络将图像分为很多对象类别,和许多类别相似,通常考虑五大精度在评估网络。网络分类甜椒和高概率的形象。
我= imread (“peppers.png”);classNamesTop =一会(out.yout {2} .Values.Data (:,: 1) h =图;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 (“五大预测使用GoogLeNet”)
为代码生成配置模型
模型配置参数提供许多选项的代码生成和构建过程。
选择代码生成窗格。设置系统目标文件来
grt.tlc
。您还可以使用嵌入式编码器®目标文件
ert.tlc
或一个自定义的系统目标文件。GPU代码生成,必须基于自定义目标文件
grt.tlc
或ert.tlc
。开发一个定制的目标文件的更多信息,请参阅定制系统的目标文件(万博1manbetx仿真软件编码器)。设置语言来
c++
。选择生成GPU的代码。
选择只生成代码。
选择工具链。Linux®平台,选择
NVIDIA CUDA | gmake(64位Linux)
。对于Windows®系统,选择NVIDIA CUDA (w / Microsoft Visual c++ 20 xx) | nmake(64位windows)
。当使用一个自定义目标文件系统,您必须设置构建工具链的控制方法。更多地了解工具链的方法定制目标,明白了万博1manbetx支持工具链方法使用自定义的目标(万博1manbetx仿真软件编码器)。
在代码生成报告>窗格中,选择创建代码生成报告和自动打开报告。
在代码生成>界面窗格中,设置目标库在深度学习集团
cuDNN
。您也可以选择
TensorRT
针对TensorRT高性能NVIDIA gpu的推理库。当生成GPU的代码启用参数,选择特定的GPU编码器是可见的代码生成> GPU的代码窗格。对于这个示例,您可以使用GPU-specific参数的默认值代码生成> GPU的代码窗格。
点击好吧保存并关闭配置参数对话框。
您还可以使用
set_param
功能配置模型参数以编程方式在MATLAB命令窗口。set_param (“googlenetModel”,“GenerateGPUCode”,CUDA的);
生成CUDA的代码模型
在模型编辑器中万博1manbetx打开万博1manbetx仿真软件编码器应用程序。
生成的代码。
消息出现在诊断查看器。代码生成器产生源CUDA和头文件,和一个HTML代码生成报告。代码生成器的文件在一个地方建立文件夹,一个子文件夹命名googlenetModel_grt_rtw
在你当前的工作目录。
限制
代码生成的
averagePooling2dLayer
(深度学习工具箱)不支持零填充时针对万博1manbetx第三方库。使用仿真万博1manbetx软件模型,实现深度学习功能MATLAB函数块,模拟错误如果网络包含平均池层与非零填充的值。在这种情况下,使用的块深层神经网络图书馆,而不是MATLAB函数实现深度学习的功能。
GPU的代码生成MATLAB函数块Stateflow®不支持图表。万博1manbetx
当GPU加速启用,代码生成器不支持万博1manbetx导入自定义代码对进口自定义编写CUDA源文件(* .cu)。相反,使用
coder.ceval
在MATLAB函数块。的MATLAB函数阻止不支持的所有数据类型的MA万博1manbetxTLAB语言。支持的数万博1manbetx据类型,参考文档。
GPU代码生成,必须基于自定义目标文件
grt.tlc
或ert.tlc
。部署生成的代码,建议使用主程序生成一个例子选项来生成
ert_main.cu
模块。这个选项需要嵌入式编码器许可证。您还可以使用
rt_cppclass_main.cpp
静态MathWorks提供的主模块®。然而,静态主文件必须修改,这样的模型类构造函数指向深层学习对象。例如,静态googlenetModelModelClass: DeepLearning_googlenetModel_T googlenetModel_DeepLearning;静态googlenetModelModelClass googlenetModel_Obj {&googlenetModel_DeepLearning};
另请参阅
功能
open_system
(万博1manbetx模型)|load_system
(万博1manbetx模型)|save_system
(万博1manbetx模型)|close_system
(万博1manbetx模型)|bdclose
(万博1manbetx模型)|get_param
(万博1manbetx模型)|set_param
(万博1manbetx模型)|sim卡
(万博1manbetx模型)|slbuild
(万博1manbetx模型)