基于mml - dnn的深度学习网络代码生成
与MATLAB®编码器™,您可以从已经训练好的卷积神经网络(CNN)生成用于预测的代码,针对使用英特尔处理器的嵌入式平台®处理器。代码生成器利用了英特尔深度神经网络数学内核库(MKL-DNN)。生成的代码使用在输入中指定的体系结构、层和参数实现CNNSeriesNetwork
(深度学习工具箱)或DAGNetwork
(深度学习工具箱)网络对象。
使用以下方法之一生成代码:
标准的
codegen
命令用于从MATLAB代码生成C/ c++代码。的MATLAB编码器应用程序。
需求
在Windows上®,用于深度学习网络的代码生成
codegen
功能要求微软®Visual Studio®2015年或更晚。深度学习库的MATLAB编码器接口.要安装此支持包,请从MATLAB金宝app中选择它附加组件菜单。
Intel深度神经网络数学内核库(MKL-DNN)
深度学习工具箱™。
编译器和库的环境变量。有关更多信息,请参见用MATLAB编码器进行深度学习的先决条件.
使用代码生成codegen
在MATLAB中编写一个入口点函数:
使用
coder.loadDeepLearningNetwork
函数来构造和设置CNN网络对象。有关更多信息,请参见为代码生成加载预训练的网络.调用
预测
(深度学习工具箱)方法对网络的入口点函数进行输入。指定一个
MiniBatchSize
在预测
方法来管理对多个输入图像或观察结果进行预测的内存使用情况。
例如:
函数Out = googlenet_predict(in)% # codegen一个持久对象mynet用于加载系列网络对象。在第一次调用此函数时,将构造持久对象%设置。当该函数随后被调用时,将重用相同的对象的方法调用predict,从而避免重新构造和重新加载%网络对象。持续的mynet;如果mynet = code . loaddeeplearningnetwork (mynet)“googlenet”);结束输入合格率Out = predict(mynet,in, in,“MiniBatchSize”2);
为MEX或静态或动态链接库创建代码生成配置对象。若要指定mml - dnn的代码生成参数,请设置
DeepLearningConfig
属性。编码器。MklDNNConfig
用于创建的对象编码器。DeepLearningConfig
.CFG = code .config(“自由”);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“mkldnn”);
运行
codegen
命令。使用配置
选项指定配置对象。使用arg游戏
选项指定输入类型。输入大小对应于GoogLeNet网络的输入层大小16
不同的图像或观察。codegen配置cfggooglenet_predictarg游戏{(224224 3 16)的}报告
请注意
您可以为代码生成指定半精度输入。但是,代码生成器类型将输入强制转换为单精度。深度学习工具箱对MATLAB中的所有计算使用单精度浮点算法。
生成的代码
网络生成为包含层类数组的c++类。的设置()
方法设置句柄并为网络对象的每一层分配内存。的预测()
方法调用对网络中的每一层的预测。代码生成器生成函数googlenet_predict ()
在googlenet_predict.cpp
对应于MATLAB的入口点函数。该函数为网络构造静态对象,并调用setup和predict方法。
网络中有参数的层导出二进制文件,如全连接层和卷积层。例如,文件cnn_googlenet_conv * _w
而且cnn_googlenet_conv * _b
对应于网络中卷积层的权值和偏置参数。
默认情况下,生成的应用程序在codegen
文件夹中。如果要将生成的应用程序和权重文件重新定位到不同的位置,例如嵌入式板,则创建名为USER_DL_DATA_PATH
,它的值是重定位权重文件的位置。然后,生成的应用程序将在此位置查找权重文件。
代码生成使用MATLAB编码器应用程序
按照通常的步骤指定入口点函数和指定输入类型。看到使用MATLAB Coder App生成C代码.
在生成代码步骤:
集语言来c++.
点击更多的设置.在深度学习窗格中,设置目标库来
MKL-DNN
.
生成的代码。
另请参阅
codegen
|编码器。DeepLearningConfig
|编码器。MklDNNConfig
|coder.loadDeepLearningNetwork