分类

使用经过训练的深度学习神经网络对数据进行分类

描述

你可以使用经过训练的神经网络在CPU或GPU上进行深度学习进行预测。使用GPU需要并行计算工具箱™和CUDA®使英伟达®计算能力3.0或更高的GPU。方法指定硬件需求ExecutionEnvironment名称-值对的论点。

对于具有多个输出的网络,请使用预测并设置“ReturnCategorial”选项真正的

(YPred,分数)=分类(,洛桑国际管理发展学院)中图像数据的类标签洛桑国际管理发展学院使用训练过的网络,

(YPred,分数)=分类(,ds)预测数据中的类标签ds使用训练过的网络,。对于具有多个输入的网络,请将此语法与组合或转换后的数据存储对象一起使用。

例子

(YPred,分数)=分类(,X)中图像数据的类标签X使用训练过的网络,

例子

(YPred,分数)=分类(,序列)预测时间序列或序列数据的类标签序列使用经过训练的LSTM网络,

(YPred,分数)=分类(,资源描述)预测数据中的类标签资源描述使用训练过的网络,

例子

(YPred,分数)=分类(___,名称,值)预测带有由一个或多个名称-值对参数指定的附加选项的类标签。

提示

当使用不同长度的序列进行预测时,迷你批大小会影响输入数据中填充的数量,从而导致不同的预测值。尝试使用不同的值来查看哪种方法最适合您的网络。若要指定小批处理大小和填充选项,请使用“MiniBatchSize”“SequenceLength”选项。

例子

全部折叠

加载示例数据。

[XTrain, YTrain] = digitTrain4DArrayData;

digitTrain4DArrayData将数字训练集加载为4-D数组数据。XTrain是一个28×28×1×5000的数组,其中28是图像的高度,28是图像的宽度。1为通道数,5000为手写数字合成图像数。YTrain是一个包含每个观察的标签的分类向量。

构建卷积神经网络体系结构。

层= [...imageInputLayer([28281]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,“步”(10)软maxlayer classificationLayer];

将选项设置为具有动量的随机梯度下降的默认设置。

选择= trainingOptions (“个”);

培训网络。

rng (“默认”net = trainNetwork(XTrain,YTrain,layers,options);
单CPU训练。初始化输入数据规范化。| = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | | |时代迭代时间| Mini-batch | Mini-batch |基地学习| | | | (hh: mm: ss) | | |损失精度率| | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | 1 | 1 |就是10.16% | | 2.3195 | 0.0100 | | 2 | 50 | 00:00:03 | 50.78% | 1.7102 | 0.0100 | | 3 | 100 | 00:00:06 | 63.28% | 1.1632 | 0.0100 | | 150 | | 00:00:10 | | 1.0859 | 0.0100 60.16%| | 6 | 200 | 00:00:13 | 68.75% | 0.8996 | 0.0100 | | 250 | | 00:00:17 | 76.56% | 0.7920 | 0.0100 | | 300 | | 00:00:20 | 73.44% | 0.8411 | 0.0100 | | 350 | | 00:00:24 | 81.25% | 0.5508 | 0.0100 | | 400 | | 00:00:27 | 90.62% | 0.4744 | 0.0100 | | 450 | | 00:00:30 | 92.19% | 0.3614 | 0.0100 | | 500 | | 00:00:34 | 94.53% | 0.3160 | 0.0100 | | 550 | | 00:00:37 | 96.09% | 0.2544 | 0.0100 | | 16 | 600 | 00:00:40 | 92.19% | 0.2765 | 0.0100 | | 650 | | 00:00:43 | 95.31% | 0.2460 |0.0100 | | 700 | | 00:00:46 | 99.22% | 0.1418 | 0.0100 | | 750 | | 00:00:49 | 98.44% | 0.1000 | 0.0100 | | 21 | 800 | 00:00:53 | 98.44% | 0.1449 | 0.0100 | | 22 | 850 | 00:00:56 | 98.44% | 0.0989 | 0.0100 | | 24 | 900 | 00:01:00 | 96.88% | 0.1315 | 0.0100 | | 25 | 950 | 00:01:05 | 100.00% | 0.0859 | 0.0100 | | 26 | 1000 | 00:01:10 | 100.00% | 0.0701 | 0.0100 | | 1050 | | 27 00:01:15 | 100.00% | 0.0759 | 0.0100 | | 1100 | | 29日00:01:20 | 99.22% | 0.0663 | 0.0100 | | 1150 | | 00:01:23 |98.44% | 0.0776 | 0.0100 | | 1170 | | 00:01:25 | 99.22% | 0.0732 | 0.0100 | | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |

在测试集中运行训练好的网络。

[XTest,欧美]= digitTest4DArrayData;YPred =分类(净,XTest);

显示测试数据中的前10幅图像,并与来自的分类进行比较分类

[欧美(1:10,:)YPred (1:10,:))
ans =10 x2分类0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

的结果分类匹配前10张图像的真实数字。

计算所有测试数据的准确性。

精度= sum(YPred == YTest)/numel(YTest)
精度= 0.9820

负载pretrained网络。JapaneseVowelsNet是一个预先训练的LSTM网络,它针对[1]和[2]中描述的日语元音数据集进行训练。对按序列长度排序的序列进行训练,最小批大小为27。

负载JapaneseVowelsNet

查看网络架构。

net.Layers
ans x1 = 5层阵列层:1“sequenceinput”序列输入序列输入12维度2的lstm lstm lstm 100隐藏单位3 fc的完全连接9完全连接层4的softmax softmax softmax 5 classoutput的分类输出crossentropyex ' 1 ', 8其他类

加载测试数据。

[XTest,欧美]= japaneseVowelsTestData;

对测试数据进行分类。

YPred =分类(净,XTest);

查看前10个序列的标签及其预测标签。

[欧美(1:10)YPred (1:10)]
ans =10 x2分类1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

计算预测的分类精度。

精度= sum(YPred == YTest)/numel(YTest)
精度= 0.8595

输入参数

全部折叠

训练好的网络,指定为aSeriesNetwork或者一个DAGNetwork对象。您可以通过导入一个预训练的网络(例如,通过使用googlenet或通过训练你自己的网络使用trainNetwork

图像数据存储,指定为ImageDatastore对象。

ImageDatastore允许批量读取JPG或PNG图像文件使用预抓取。如果使用自定义函数读取图像,则ImageDatastore不预取。

提示

使用augmentedImageDatastore对图像进行有效的预处理,用于深度学习,包括图像大小调整。

不要使用readFcn选择imageDatastore因为这个选项通常要慢得多。

输入数据的数据存储。

对于单输入的网络,ds可以返回:

  • 单个图像或序列

  • 图像或序列的单元数组

  • 一个表,其中第一列包含图像或序列

对于具有多个图像输入层的网络,ds必须是返回单元格数组的组合或转换后的数据存储numInputs包含输入数据的列,其中numInputs为网络输入的个数。的单元数组的第一个元素对应于输入net.InputNames(我)

有关更多信息,请参见用于深度学习的数据存储

图像数据,指定为数字数组。数组的大小取决于图像输入的类型:

输入 描述
二维图像 一个h——- - - - - -w——- - - - - -c——- - - - - -N数字数组,h,w,c分别为图像的高度、宽度和通道数,和N是图像的数量。
三维图像 一个h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -N数字数组,h,w,d,c分别为图像的高度、宽度、深度和通道数,和N是图像的数量。

如果数组包含,然后它们通过网络传播。

序列或时间序列数据,指定为N-1个单元格数组的数字数组,其中N是观测值、表示单个序列的数字数组或数据存储的数目。

对于单元格数组或数字数组输入,包含序列的数字数组的大小取决于数据的类型。

输入 描述
向量序列 c——- - - - - -年代矩阵,c序列的特征数是多少年代为序列长度。
二维图像序列 h——- - - - - -w——- - - - - -c——- - - - - -年代数组,h,w,c分别对应图像的高度、宽度和通道数年代为序列长度。
三维图像序列 h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -年代,在那里h,w,d,c分别对应于三维图像的高度、宽度、深度和通道数年代为序列长度。

对于数据存储输入,数据存储必须以序列的单元数组或其第一列包含序列的表的形式返回数据。序列数据的维数必须与上面的表相对应。

包含第一列输入数据的图像表。表中的每一行都对应一个观察值。该表包含图像的绝对或相对文件路径,指定为字符向量或指定为数字数组的图像。

数据类型:表格

名称-值对的观点

例子:‘MiniBatchSize’,‘256’将迷你批大小指定为256。

指定可选的逗号分隔对名称,值论点。的名字参数名和价值是对应的值。的名字必须出现在单引号内(' ')。

用于预测的小批量的大小,指定为正整数。更大的迷你批处理大小需要更多的内存,但是会导致更快的预测。

当使用不同长度的序列进行预测时,迷你批大小会影响输入数据中填充的数量,从而导致不同的预测值。尝试使用不同的值来查看哪种方法最适合您的网络。若要指定小批处理大小和填充选项,请使用“MiniBatchSize”“SequenceLength”选项。

例子:“MiniBatchSize”, 256年

性能优化,指定由逗号分隔的对组成“加速”及下列其中一项:

  • “汽车”-自动适用于输入网络和硬件资源的一些优化。

  • 墨西哥人的-编译和执行一个MEX函数。当只使用GPU时,该选项是可用的。使用GPU需要并行计算工具箱和CUDA支持的NVIDIA GPU与计算能力3.0或更高。如果并行计算工具箱或合适的GPU不可用,则软件返回一个错误。

  • “没有”-禁用所有加速度。

默认选项是“汽车”。如果“汽车”MATLAB是指定的,®将应用许多兼容优化。如果你使用“汽车”选项,MATLAB从不生成MEX函数。

使用“加速”选项“汽车”墨西哥人的可以提供性能优势,但以增加初始运行时间为代价。具有兼容参数的后续调用速度更快。当您计划使用新的输入数据多次调用函数时,请使用性能优化。

墨西哥人的选项根据函数调用中使用的网络和参数生成并执行MEX函数。您可以同时将多个MEX函数与单个网络关联。清除网络变量也清除与该网络相关的任何MEX函数。

墨西哥人的选项只在使用GPU时可用。您必须安装一个C/ c++编译器和用于深度学习库支持包的GPU编码器™接口。万博1manbetx使用MATLAB中的加载万博1manbetx项资源管理器安装支持包。有关安装说明,请参阅墨西哥人设置(GPU编码器)。不需要GPU编码器。

墨西哥人的选项不支持所有层。万博1manbetx有关受支持的层的列表,请参见万博1manbetx万博1manbetx支持层(GPU编码器)。包含a的递归神经网络(RNNs)sequenceInputLayer不受支持。万博1manbetx

你不能使用MATLAB编译器™要部署您的网络时使用墨西哥人的选择。

例子:“加速”、“墨西哥人的

硬件资源,指定为由逗号分隔的对组成“ExecutionEnvironment”及下列其中一项:

  • “汽车”-使用GPU,如果有可用的;否则,使用CPU。

  • “图形”-使用GPU。使用GPU需要并行计算工具箱和CUDA支持的NVIDIA GPU与计算能力3.0或更高。如果并行计算工具箱或合适的GPU不可用,则软件返回一个错误。

  • “cpu”-使用中央处理器。

例子:“ExecutionEnvironment”、“cpu的

选项来填充,截断,或分割输入序列,指定为下列之一:

  • “最长”-每个小批中的Pad序列与最长的序列具有相同的长度。这个选项不会丢弃任何数据,尽管填充会给网络带来噪声。

  • “最短”-截断每个小批中的序列,使其具有与最短序列相同的长度。此选项确保不添加填充,代价是丢弃数据。

  • 正整数-对于每个小批处理,将序列填充到指定长度的最近倍数,该倍数大于小批处理中最长的序列长度,然后将序列分割成指定长度的较小序列。如果发生分裂,则软件创建额外的小批。如果整个序列在内存中不合适,请使用此选项。或者,尝试通过设置“MiniBatchSize”选择较低的值。

要了解有关填充、截断和分割输入序列的效果的更多信息,请参见序列填充、截断和分割

例子:“SequenceLength”、“最短的

填充或截断的方向,规定如下:

  • “对”-右侧的Pad或truncate序列。序列开始于同一时间步长,软件截断或添加填充到序列的末尾。

  • “左”-左侧的Pad或truncate序列。该软件截断或添加填充到序列的开始,使序列在同一时间步长结束。

因为LSTM层每次处理一个时间步进的序列数据,当层OutputMode属性是“最后一次”,最后时间步中的任何填充都会对层输出产生负面影响。若要在左侧填充或截断序列数据,请设置“SequencePaddingDirection”选项“左”

对于序列到序列的网络(当OutputMode属性是“序列”对于每个LSTM层),第一个时间步中的任何填充都可能对前面的时间步的预测产生负面影响。若要在右侧填充或截断序列数据,请设置“SequencePaddingDirection”选项“对”

要了解有关填充、截断和分割输入序列的效果的更多信息,请参见序列填充、截断和分割

填充输入序列的值,指定为标量。该选项仅在以下情况下有效SequenceLength“最长”或者一个正整数。不垫序列与,因为这样做会在整个网络中传播错误。

例子:“SequencePaddingValue”, 1

输出参数

全部折叠

预测类标签,作为分类向量或分类向量的单元数组返回。的格式YPred取决于问题的类型。

下表描述了分类问题的格式。

任务 格式
图像分类 N-by-1标签分类向量,其中N为观测值个数。
Sequence-to-label分类
Sequence-to-sequence分类

N-1个标签分类序列的单元数组,其中N为观测值个数。方法后,每个序列与相应的输入序列具有相同的时间步长SequenceLength选择每个小批量独立。

对于一个观测值的序列到序列的分类问题,序列可以是一个矩阵。在这种情况下,YPred是标签的分类序列。

预测分数或响应,以矩阵或矩阵的单元数组形式返回。的格式分数取决于问题的类型。

下表描述了的格式分数

任务 格式
图像分类 N——- - - - - -K矩阵,N为观测次数,K是班数吗
Sequence-to-label分类
Sequence-to-sequence分类

N-1个矩阵的单元数组,其中N为观测值个数。这些序列是矩阵K行,K是类的数量。方法后,每个序列与相应的输入序列具有相同的时间步长SequenceLength选择每个小批量独立。

对于一个观测值的序列到序列的分类问题,序列可以是一个矩阵。在这种情况下,分数是预测的班级分数的矩阵。

有关探索分类分数的示例,请参见使用深度学习对网络摄像头图像进行分类

算法

深度学习工具箱™中用于深度学习培训、预测和验证的所有功能都使用单精度浮点算法进行计算。深度学习的功能包括trainNetwork,预测,分类,激活。当使用cpu和gpu训练网络时,该软件使用单精度算法。

选择

对于具有多个输出的网络,请使用预测并设置“ReturnCategorial”选项真正的

您可以使用一个经过训练的网络来计算预测的分数预测

您还可以使用以下命令从网络层计算激活激活

对于序列到标签和序列到序列分类网络,您可以使用以下命令进行预测和更新网络状态classifyAndUpdateStatepredictAndUpdateState

参考文献

[1] M. Kudo, J. Toyama,和M. Shimbo。“使用穿越区域的多维曲线分类”。模式识别的字母。第20卷,第11-13期,第1103-1111页。

[2]UCI机器学习知识库:日语元音数据集。https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

扩展功能

介绍了R2016a