主要内容

引入张量流网络的Simulink图像分类

这个例子展示了如何在保存的模型格式中导入预先训练的TensorFlow™网络importTensorFlowNetwork,然后使用预测块对Simulink®中的图像序列进行分类。导入的网络包含不支持转换为内置MATLAB®层的层。importTensorFlowNetwork当您导入这些层时,自动生成自定义层。Predict块通过使用使用块参数指定的经过训练的网络来预测输入处数据的响应。

importTensorFlowNetwork需要TensorFlow模型的深度学习工具箱™转换器支持包。如果没有安装此支持包,则importTensorFlowNetwork提供下载链接。

加载图像数据

将数字示例数据加载为图像数据存储。imageDatastore根据文件夹名称自动标记图像,并将数据存储为ImageDatastore对象。

digitDatasetPath = fullfile (matlabroot,“工具箱”“nnet”“nndemos”...“nndatasets”“DigitDataset”);imd = imageDatastore (digitDatasetPath,...IncludeSubfolders = true, LabelSource =“foldernames”);

为了再现性,指定MATLAB随机数生成器的种子。从图像数据存储中随机选择8个图像,创建图像数组inputIms,并显示所选图像使用蒙太奇(图像处理工具箱)

rng (“默认”) randperm(10000,8);i = 1:8 inputIms(::,:,我)= imread (imds.Files{烫发(i)});结束蒙太奇(inputIms、大小=[1南]);

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

导入预训练的TensorFlow网络

指定包含预训练网络的模型文件夹digitsDAGnetwithnoise保存的模型格式。digitsDAGnetwithnoise能对数字图像进行分类。

如果~ (“digitsDAGnetwithnoise”“dir”)解压缩(“digitsDAGnetwithnoise.zip”结束modelFolder =”。/ digitsDAGnetwithnoise”

指定类名。

一会= {' 0 '' 1 '' 2 '“3”“4”“5”“6”“7”“8”“9”};

以保存的模型格式导入TensorFlow网络。默认情况下,importTensorFlowNetwork将网络导入为DAGNetwork对象。

网= importTensorFlowNetwork (modelFolder类=类名);
导入已保存的模型…翻译模型,这可能需要几分钟……完成翻译。装配网络……导入完成。

分析导入的网络。analyzeNetwork显示网络体系结构的交互式图和包含有关网络层信息的表。

analyzeNetwork(净)

analyzeNetwork.png

导入的网络包含不支持转换为内置MATLAB层的层。软件自动生成自定义层gaussian_noise_1而且gaussian_noise_2.这个函数importTensorFlowNetwork将每个生成的自定义层保存到单独的.m包中的文件+ digitsDAGnetwithnoise在当前文件夹中。有关这些生成的自定义层的更多信息,请参见导入TensorFlow网络与自动生成的自定义层

将导入的网络保存在MAT文件中。

文件名=“digitsNet.mat”;保存(文件名,“净”

创建模型模型

本示例提供了Simulink模型slexDigitsImportedNetworkPredictExample.slx.您可以打开Simulink模型(在本例中提供),或者按照本节中描述的步骤创建一个新模型。

打开Simulink模型slexDigitsImportedNetworkPredictExample.slx

SimMdlName =“slexDigitsImportedNetworkPredictExample”;open_system (SimMdlName)

SimulinkImportedNetwork.png

1.要创建一个新的Simulink模型,请打开空白模型模板,并从深度学习工具箱™库中添加Predict块。Predict块通过使用使用块参数指定的经过训练的网络来预测输入处数据的响应。块的输入可以是anh——- - - - - -w——- - - - - -c——- - - - - -N数字数组,hw,c图像的高度、宽度和通道数是否分别为N是图像的数量。

双击Predict块以打开块参数对话框。选择网络从MAT-file网络参数。点击浏览文件路径部分指定网络作为digitsNet.mat在当前文件夹中的网络。

ImportedNetworkPredictBlock.png

2.从“计算机视觉工具箱™”库中插入“来自工作区的视频”块。双击Video from Workspace块,打开“块参数”对话框。指定信号作为inputIms样品时间1,在最终值by后形成输出作为持有最终值

ImportedNetworkInputBlock.png

3.检查输入图像的大小是否与网络输入大小匹配。如果不匹配,则必须通过将“计算机视觉工具箱”库中的“调整大小”块添加到模型中来调整输入数据的大小。

显示图像的大小和网络的输入大小。

大小(inputIms)
ans =1×428 28 1 8
.InputSize netInputSize = net.Layers (1)
netInputSize =1×328日28日1

输入是8个大小为28 × 28像素的灰度(单通道)图像序列。图像大小与网络输入大小相匹配。

4.向模型添加To Workspace块,并将变量名更改为yPred.连接视频从工作空间块到预测块的输入,连接到工作空间块到预测块的输出。

5.打开“配置参数”对话框。在建模选项卡上,单击模型设置.下解算器的选择,设置类型固定步,并设置解算器离散(无连续状态)

利用Simulink模型进行预测

模拟模型并将模拟输出保存到modelOutput.这个领域modelOutput.yPred.Data包含分类结果。

modelOutput = sim (SimMdlName)
modelOutput =仿真软件。SimulationOutput: tout: [8x1 double] yPred: [1x1 timeseries] SimulationMetadata: [1x1 Simulink. txt]SimulationMetadata] ErrorMessage: [0x0 char]

显示图像序列和分类结果。

tiledlayout(1、12、TileSpacing =“没有”);i =1:size(inputIms,4) nexttile imshow(inputIms(:,:,:,i)) label = modelOutput.yPred.Data(:,:,i)==1;标题({标签}][类名,字形大小= 20)结束

图中包含8个轴对象。标题8的axis对象1包含一个image类型的对象。标题9的Axes对象2包含一个image类型的对象。标题为1的axis对象3包含一个image类型的对象。标题9的Axes对象4包含一个image类型的对象。标题6的axis对象5包含一个image类型的对象。标题为0的Axes对象6包含一个image类型的对象。标题2的Axes对象7包含一个image类型的对象。标题5的Axes对象8包含一个image类型的对象。

另请参阅

|||

相关的话题

Baidu
map