主要内容

代码生成使用英特尔MKL-DNN LSTM网络

这个例子展示了如何生成代码pretrained长短期记忆(LSTM)网络使用英特尔数学内核库深层神经网络(MKL-DNN)。这个示例中生成一个墨西哥人的函数,使得每一步预测输入timeseries。这个例子演示了两种方法。第一种方法使用一个标准的LSTM网络。第二种方法利用相同的有状态的行为LSTM网络。这个示例使用的文本描述工厂的事件可以分为这四个类别之一:电子故障,泄漏,机械故障、软件故障。这个例子使用一个pretrained LSTM网络。训练一个网络上的更多信息,请参阅使用深度学习分类文本数据(文本分析工具箱)

第三方的先决条件

这个例子是支持Mac®、Linu金宝appx®和Windows®平台和不支持在线MATLAB。

准备输入

加载wordEncodingMAT-file。这个MAT-file存储编码为数值指标。这种编码在网络的训练了。有关更多信息,请参见使用深度学习分类文本数据(文本分析工具箱)

负载(“wordEncoding.mat”);

创建一个字符串数组,其中包含新报告对事件类型进行分类。

reportsNew = [“冷却池下面分选机。”“在启动分选机把保险丝烧断了。”“有一些非常响亮的哒哒声来自汇编程序。”“有时机械安排软件冻结”。“混频器输出是卡住了。”];

通过使用标记输入字符串preprocessText函数。

documentsNew = preprocessText (reportsNew);

使用doc2sequence(文本分析工具箱)函数来将文档转换为序列。

documentsNew XNew = doc2sequence (enc);标签=分类({“电子失败”,“泄漏”,“机械故障”,软件故障的});

lstm_predict入口点函数

一个sequence-to-sequence LSTM网络使您能够做出不同的预测数据序列的每个时间步。的lstm_predict.m入口点函数接受一个输入序列并将其传递到一个训练有素的LSTM网络预测。具体地说,函数使用LSTM网络训练的例子使用深度学习分类文本数据(文本分析工具箱)。加载的网络对象的函数textClassifierNetwork.mat文件到一个持久变量然后进行预测。在随后的调用中,功能重用持久对象。

类型(“lstm_predict.m”)
函数= lstm_predict () % # codegen %版权2020年MathWorks公司持久mynet;如果isempty (mynet) mynet = coder.loadDeepLearningNetwork (“textClassifierNetwork.mat”);结束了=预测(mynet);结束

显示一个交互式可视化的网络体系结构和网络层的信息,使用analyzeNetwork函数。

生成墨西哥人

代码来生成代码,创建一个配置对象为一个墨西哥人的目标和目标语言设置为c++。使用coder.DeepLearningConfig函数创建一个MKL-DNN深度学习配置对象。分配到DeepLearningConfig代码配置对象的属性。

cfg = coder.config (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig = coder.DeepLearningConfig (“mkldnn”);

使用coder.typeof(MATLAB编码器)函数来指定的类型和大小的入口点函数的输入参数。在本例中,输入是双功能维度值的数据类型1和一个变量序列长度。

matrixInput = coder.typeof(双(0),[1正],[假真]);

生成一个墨西哥人通过运行功能codegen(MATLAB编码器)命令。

codegen配置cfglstm_predictarg游戏{matrixInput}报告
代码生成成功:查看报告

运行生成的墨西哥人

调用lstm_predict_mex在第一次观察。

YPred1 = lstm_predict_mex (XNew {1});

YPred1包含四个类的概率。找到预测类通过计算最大概率指数。

[~,maxIndex] = max (YPred1);

副最大概率的指标对应的标签。显示分类。从结果可以看到,网络预测第一个事件是一个泄漏。

predictedLabels1 =标签(maxIndex);disp (predictedLabels1)
泄漏

生成接受多个观测的墨西哥人

如果你想执行预测在许多观察一次,你可以观察分组单元阵列,通过预测单元阵列。单元阵列必须列单元阵列,每个细胞必须包含一个观察。输入的序列长度可能有所不同。在这个例子中,XNew包含五个观察。生成一个墨西哥人函数可以接受XNew作为输入,指定输入类型是5-by-1单元阵列。指定每个单元是相同类型的matrixInput

matrixInput = coder.typeof(双(0),[1正],[假真]);cellInput =编码器。typeof ({matrixInput} 1 [5]);codegen配置cfglstm_predictarg游戏{cellInput}报告
代码生成成功:查看报告

运行生成的墨西哥人功能XNew作为输入。

YPred2 = lstm_predict_mex (XNew);

YPred2是5-by-4细胞数组。找到具有最大概率指标的5个输入和分类。

[~,maxIndex] = max (YPred2 [], 2);predictedLabels2 =标签(maxIndex);disp (predictedLabels2)
泄漏机械故障软件失败电子机械故障

生成与状态LSTM墨西哥人

而不是通过整个timeseries预测在一个步骤中,您可以运行预测一个输入流的一个步伐和使用功能predictAndUpdateState。这个函数接受一个输入,产生一个输出预测和更新网络的内部状态,以便未来预测考虑初始输入。

的入口点函数lstm_predict_and_update.m接受single-timestep输入和过程输入使用predictAndUpdateState函数。的predictAndUpdateState函数返回一个预测输入步伐和更新网络,以便后续的输入被视为后续步伐相同的样本。后传入所有的步伐,一次,得到的输出相同的步伐都是通过一个输入。

类型(“lstm_predict_and_update.m”)
函数= lstm_predict_and_update () % # codegen %版权2020年MathWorks公司持久mynet;如果isempty (mynet) mynet = coder.loadDeepLearningNetwork (“textClassifierNetwork.mat”);结束[mynet,] = predictAndUpdateState (mynet,);结束

生成的代码lstm_predict_and_update。因为在每次调用这个函数接受一个步伐,指定matrixInput有一个固定的序列维度1而不是一个变量序列长度。

matrixInput = coder.typeof(双(0),[1]);codegen配置cfglstm_predict_and_updatearg游戏{matrixInput}报告
代码生成成功:查看报告

运行生成的墨西哥人在第一次观察。

sequenceLength =大小(XNew {1}, 2);i = 1: sequenceLength inTimeStep = XNew{1}(:,我);YPred3 = lstm_predict_and_update_mex (inTimeStep);结束清晰的墨西哥人;

找到的概率最高的指数和映射标签。

[~,maxIndex] = max (YPred3);predictedLabels3 =标签(maxIndex);disp (predictedLabels3)
泄漏

另请参阅

(MATLAB编码器)|(文本分析工具箱)|(MATLAB编码器)|(MATLAB编码器)

相关的话题