如何部署深入学习网络半实物仿真(边境),例如,Speedgoat或dSPACE硬件系统从MATLAB R2018b开始吗?

34视图(30天)
我想生成纯代码keras深度学习神经网络,以避免所依赖的第三方库。我在MATLAB R2021a这样做。
之后,我想建立一个函数内使用一个模型在MATLAB R2017b部署在边境,在MATLAB R2017b设置。推荐的工作流程是什么?

接受的答案

MathWorks支万博1manbetx持团队
编辑:MathWorks支万博1manbetx持团队 2021年6月9日
在边境部署深度学习网络仿真的工作流包括三个步骤:
  1. 首先,根据你的目标硬件,你生成CUDA使用第三方库的代码(比如cuDNN)深入学习网络。另外,从R2021a开始,您可以生成通用的C / c++代码深入学习网络,不使用第三方库。通用代码生成是有用的,如果你通常的工作与深度学习网络使用第三方库,但要避免为你当前的工作流。
  2. 你为你的网络生成代码后,第二步是将生成的代码合并到你的主要模型,例如,通过使用一个功能。
  3. 最后,你对整个仿真软件模型生成代码并将其部署在边境。万博1manbetx
下面详细描述这些步骤。
(1)深入学习网络的生成代码:
生成c++ CUDA使用第三方库的代码:
从MATLAB R2018b开始,您可以生成c++ CUDA代码pre-trained深度学习网络,使用第三方库。要做到这一点,在MATLAB代码中,使用coder.loadDeepLearningConfig函数加载目标库。
仿真软件中直接生成c++ CUDA代码:万博1manbetx
从MATLAB R2020b开始,您可以为您的深度学习模型在仿真软件中直接生成代码通过使用MATLAB函数块或深层神经网络库。万博1manbetxGPU编码器生成优化的代码为深度学习网络仿真软件模型中通过使用这些模块实现。万博1manbetx
如果你使用MATLAB函数模块,编写MATLAB代码加载pre-trained深度学习网络通过使用编码器。loadDeepLearningNetwork函数。
另外,使用预测和图像分类器模块深层神经网络图书馆。
对于这两种类型的模块,您可以生成代码通过使用仿真软件编码器或嵌入式编码器。万博1manbetx
生成通用的C / c++代码,不使用第三方库:
从R2021a开始,您可以生成普通的C / c++代码,不使用第三方库为您深度学习网络。要做到这一点,DeepLearningConfig代码配置属性设置为:
cfg。DeepLearningConfig = coder.DeepLearningConfig (“TargetLibrary”,“没有”);
然而,如果你的目标是生成的代码插入的深度学习神经网络,是否CUDA或纯代码,MATLAB为仿真软件模型在老版本中,例如在MATLAB R2017b,建议从整个生成DLL深度学习网络而不是墨西哥人:万博1manbetx
% C生成一个独立的动态库作为嵌入式代码使用嵌入的编码器
cfg = coder.config (“dll”);
cfg。TargetLang =“C”;
cfg。DeepLearningConfig = coder.DeepLearningConfig (“没有”);%的“没有”,因为纯代码生成
(2)生成的代码合并到仿真软件模型:万博1manbetx
结合c++ CUDA使用第三方库的代码:正如上面提到的,您可以直接使用深度学习网络在R2020b模型开始。万博1manbetx如果你想使用CUDA代码算法除了深度学习网络,仿真软件目前不支持GPU代码块。万博1manbetx万博1manbetx然而,你可以把CUDA代码仿真软件通过生成一个动态链接库,仍然使用gpu的性万博1manbetx能和实现这个图书馆作为一个功能到仿真软件模型通过使用遗留代码的工具。看到将深度学习与GPU编码器到仿真软件万博1manbetx
结合通用的C / c++代码,不使用第三方库:如果你生成普通的C / c++代码,这个代码合并到你的主要仿真软件模型通过使用这些实用程序中的任何一个万博1manbetx
  • C调用块- C代码集成到模型通过导入你的C函数。万博1manbetx
  • C函数——集成和调用外部C代码块从一个仿真软件模型。万博1manbetx
  • 功能,使用特殊的语法被称为s函数API与仿真软件通信引擎。万博1manbetx它们允许您创建连续、离散和混合系统。
  • s函数生成器集成了C / c++代码的构建一个功能代码的规范供应。s函数构建器还为S-functions作为包装器生成的模型。
  • 遗留代码的工具,集成了C / c++函数,如查找表,为仿真软件模型和通用功能和接口。万博1manbetx
关于这些方法的更多信息,请参阅使用C / c++代码实现算法
您还可以将生成的代码为您的深层神经网络,CUDA还是纯C / c++,年长的MATLAB仿真软件模型版本,例如,在MATLAB R2017b。万博1manbetx
为此,建议使用遗留代码工具将生成的C函数的DLL(从上面的示例)。在以下部分中,描述了哪些步骤是创建相应的功能所必需的。这个工作流中记录C函数使用遗留代码工具集成:
在这里,重要的是要考虑“OutputFcnSpec”的正确定义为了获得一个可行的功能。这个属性需要签名的函数的头文件包含在生成DLL:
头文件内的签名:
浮动Predict_NN_MAT(双dki,双lki双tki,双nab,双实验室,双选项卡,双完成);
在这种情况下,签名包含“浮动”作为输出类型在上面引用的文档链接,您需要切换输出数据类型从“浮动”到“单身”。此外,这些变量应该是唯一的,就像u1, u2等. .这里有一个例子如何设置生成的功能:
def = legacy_code (“初始化”);
def.SFunctionName =“Predict_NN_MAT_SFcn”;
def.OutputFcnSpec ='单日元= Predict_NN_MAT(双u1, u2的两倍,双u3,双重的愉快,双u5,双u6,双得以)”;
def.HeaderFiles = {“FullyConnectedActivation.h”,“Predict_NN_MAT.h”,“Predict_NN_MAT_data.h”,“Predict_NN_MAT_initialize.h”,“Predict_NN_MAT_internal_types.h”,“Predict_NN_MAT_terminate.h”,“Predict_NN_MAT_types.h”,“predict.h”,“rtwtypes.h”};
def.SourceFiles = {“FullyConnectedActivation.c”,“Predict_NN_MAT.c”,“Predict_NN_MAT_data.c”,“Predict_NN_MAT_initialize.c”,“Predict_NN_MAT_terminate.c”,“predict.c”};
def.IncPaths = {“……\ dll \ Predict_NN_MAT”};
def.SrcPaths = {“……\ dll \ Predict_NN_MAT”};
def.LibPaths = {“……\ dll \ Predict_NN_MAT”};
def.Options。useTlcWithAccel = false;
legacy_code (“sfcn_cmex_generate”def);
(3)对整个模型生成代码在边境部署:
整合后的通用C / c++或者CUDA代码在你的Simulink仿真模型,使用嵌入式编码器生成代码为边境部署整个模型。万博1manbetx看到通过使用嵌入式程序员代码生成
为例,展示了如何从一个仿真软件模型,生成C代码万博1manbetx从模型生成C代码模型万博1manbetx

更多的答案(0)

类别

找到更多的在万博1manbetx仿真软件编码器帮助中心文件交换

标签

没有标签了。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的