主要内容

分类

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

描述

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

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

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

YPred=分类(ds)预测数据存储中数据的类标签ds

例子

YPred=分类(X)预测数字数组指定的图像或特征数据的类标签X

YPred=分类(, X1,…,XN)预测数值数组中数据的类标签X1、……XN对于多输入网络.输入西对应于网络输入net.InputNames(我)

例子

YPred=分类(序列)中时间序列或序列数据的类标签序列循环网络(例如LSTM或GRU网络)

例子

YPred=分类(资源描述)预测表中数据的类标签资源描述

例子

YPred=分类(___名称,值)使用任何先前的语法,用一个或多个名称-值对参数指定的附加选项预测类标签。

YPred分数分类;分类;___)还返回使用前面任何语法的类标签对应的分类分数。

提示

当使用不同长度的序列进行预测时,小批量大小可能会影响添加到输入数据中的填充量,从而导致不同的预测值。尝试使用不同的值,看看哪个最适合你的网络。要指定小批处理大小和填充选项,请使用“MiniBatchSize”而且“SequenceLength”选项,分别。

例子

全部折叠

加载样例数据。

[XTrain,YTrain] = digitTrain4DArrayData;

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

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

层= [...imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,“步”,2) fullyConnectedLayer(10) softmaxLayer classificationLayer];

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

选项= trainingOptions(“个”);

培训网络。

rng (“默认”) net = trainNetwork(XTrain,YTrain,图层,选项);
单CPU训练。初始化输入数据规范化。|========================================================================================| | 时代| |迭代时间| Mini-batch | Mini-batch |基地学习  | | | | ( hh: mm: ss) | | |丧失准确性  | |========================================================================================| | 1 | 1 |就是10.16% | | 2.3195 | 0.0100 | | 2 | 50 | 00:00:04 | 50.78% | 1.7102 | 0.0100 | | 3 | 100 | 00:00:08 | 63.28% | 1.1632 | 0.0100 | | 150 | | 00:00:14 | | 1.0859 | 0.0100 60.16%| | 6 | 200 | 00:00:19 | 68.75% | 0.8996 | 0.0100 | | 250 | | 00:00:24 | 76.56% | 0.7920 | 0.0100 | | 300 | | 00:00:29 | 73.44% | 0.8411 | 0.0100 | | 350 | | 00:00:33 | 81.25% | 0.5508 | 0.0100 | | 400 | | 00:00:39 | 90.62% | 0.4744 | 0.0100 | | 450 | | 00:00:44 | 92.19% | 0.3614 | 0.0100 | | 500 | | 00:00:48 | 94.53% | 0.3160 | 0.0100 | | 550 | | 00:00:53 | 96.09% | 0.2544 | 0.0100 | | 16 | 600 | 00:00:57 | 92.19% | 0.2765 | 0.0100 | | 650 | | 00:01:00 | 95.31% | 0.2460 |0.0100 | | 700 | | 00:01:04 | 99.22% | 0.1418 | 0.0100 | | 750 | | 00:01:08 | 98.44% | 0.1000 | 0.0100 | | 21 | 800 | 00:01:12 | 98.44% | 0.1449 | 0.0100 | | 22 | 850 | 00:01:16 | 98.44% | 0.0989 | 0.0100 | | 24 | 900 | 00:01:20 | 96.88% | 0.1315 | 0.0100 | | 25 | 950 | 00:01:24 | 100.00% | 0.0859 | 0.0100 | | 26 | 1000 | 00:01:29 | 100.00% | 0.0701 | 0.0100 | | 1050 | | 27 00:01:34 | 100.00% | 0.0759 | 0.0100 | | 1100 | | 29日00:01:39 | 99.22% | 0.0663 | 0.0100 | | 1150 | | 00:01:43 |98.44% | 0.0776 | 0.0100 | | 1170 | | 00:01:45 | | 0.0732 | 0.0100 99.22%  | |========================================================================================|

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

[XTest,欧美]= digitTest4DArrayData;YPred = category (net,XTest);

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

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

结果来自分类匹配前十张图片的真实数字。

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

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

加载预训练网络。JapaneseVowelsNet是在日语Vowels数据集上训练的预训练LSTM网络,如[1]和[2]所述。它在按序列长度排序的序列上训练,迷你批量大小为27。

负载JapaneseVowelsNet

查看网络结构。

网层
ans = 5x1层数组与层:1' sequenceinput'序列输入序列输入与12维2 'lstm' lstm lstm与100个隐藏单元3 'fc'全连接9全连接层4 'softmax' softmax softmax 5 'classoutput'分类输出crossentropyex与'1'和8个其他类

加载测试数据。

[XTest,YTest] =日本evowelstestdata;

分类测试数据。

YPred = category (net,XTest);

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

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

计算预测的分类精度。

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

加载预训练的网络TransmissionCasingNet.该网络将给定的数字传感器读数、统计数据和分类输入混合在一起,对传动系统的齿轮齿状态进行分类。

负载TransmissionCasingNet.mat

查看网络结构。

网层
ans = 7x1层阵列:1' input'特征输入22个特征与'zscore'归一化2' fc_1'全连接50全连接层3 'batchnorm'批量归一化批量归一化50通道4 'relu' relu relu 5 'fc_2'全连接2全连接层6 'softmax' softmax softmax 7 'classoutput'分类输出crossentropyex类'No Tooth Fault'和'Tooth Fault'

从CSV文件中读取传输套管数据“transmissionCasingData.csv”

文件名=“transmissionCasingData.csv”;TBL =可读(文件名,“TextType”“字符串”);

属性将预测标签转换为分类标签convertvars函数。

labelName =“GearToothCondition”;tbl = convertvars(tbl,labelName,“分类”);

要使用分类特征进行预测,必须首先将分类特征转换为数字。方法将类别预测符转换为类别预测符convertvars通过指定包含所有类别输入变量名称的字符串数组来实现。在这个数据集中,有两个带有名称的分类特征“SensorCondition”而且“ShaftCondition”

categoricalInputNames = [“SensorCondition”“ShaftCondition”];tbl = convertvars(tbl,categoricalInputNames,“分类”);

遍历分类输入变量。对于每个变量:

  • 类将类别值转换为单热编码向量onehotencode函数。

  • 函数将单热向量添加到表中addvars函数。指定将向量插入到包含相应类别数据的列之后。

  • 删除包含类别数据的相应列。

i = 1:numel(categoricalInputNames) name = categoricalInputNames(i);Oh = onehotencode(tbl(:,name));TBL = addvars(TBL,哦,“后”、名称);Tbl (:,name) = [];结束

方法将向量拆分为单独的列splitvars函数。

TBL =分裂(TBL);

查看表的前几行。

头(台)
ans =表8×23SigMean SigMedian SigRMS SigVar SigPeak SigPeak2Peak SigSkewness SigKurtosis SigCrestFactor SigMAD SigRangeCumSum SigCorrDimension SigApproxEntropy SigLyapExponent PeakFreq HighFreqPower EnvPower PeakSpecKurtosis没有传感器漂移传感器漂移没有轴穿轴穿GearToothCondition  ________ _________ ______ _______ _______ ____________ ___________ ___________ ______________ _______ ______________ ________________ ________________ _______________ ________ _____________ ________________________ _______________ ____________ _____________ __________ __________________ -0.94876 -0.9722 1.3726 0.98387 0.81571 3.6314 -0.041525 2.2666 2.0514 0.8081 28562 1.1429 0.031581 79.931 0 6.75e-06 3.23e-07 162.13 01 10无齿故障-0.97537 -0.98958 1.3937 0.99105 0.81571 3.6314 -0.023777 2.2598 2.0203 0.81017 29418 1.1362 0.037835 70.325 0 5.08e-08 9.16e-08 226.12 01 10无齿故障1.0502 1.0267 1.4449 0.98491 3.6314 -0.04162 2.2658 1.9487 0.80853 31710 1.14790.031565 - 125.19 6.74 2.85 e-06 e-07 162.13 0 1 0 1没有牙齿错1.0227 1.0045 1.4288 0.99553 2.8157 3.6314 -0.016356 2.2483 1.9707 0.81324 30984 1.1472 0.032088 112.5 4.99 e-06 2.4 e-07 162.13 0 1 0 1没有牙齿错1.0123 1.0024 1.4202 0.99233 2.8157 3.6314 -0.014701 2.2542 1.9826 0.81156 30661 1.1469 0.03287 108.86 3.62 e-06 2.28 e-07 230.39 0 1 0 1没有牙齿错1.0275 1.0102 1.4338 1.0001 2.8157 3.6314 -0.02659 2.2439 1.9638 1.65 0.81589 1.0985 0.033427 64.576 31102 0 2.55 e-06 e-07 230.3901 01牙号故障1.0464 1.0275 1.4477 1.0011 2.8157 3.6314 -0.042849 2.2455 1.9449 0.81595 31665 1.1417 0.034159 98.838 0 1.73e-06 1.55e-07 230.39 01 01牙号故障1.0459 1.0257 1.4402 0.98047 2.8157 3.6314 -0.035405 2.2757 1.955 0.80583 31554 1.1345 0.0353 44.223 0 1.11e-06 1.39e-07 230.39 01 011牙号故障

利用训练好的网络预测测试数据的标签,并计算准确率。指定用于训练的相同的小批大小。

YPred =分类(net,tbl(:,1:end-1));

计算分类精度。准确率是指网络正确预测的标签的比例。

YTest = tbl{:,labelName};精度= sum(YPred == YTest)/numel(YTest)
准确度= 0.9952

输入参数

全部折叠

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

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

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

提示

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

请勿使用readFcn选择imageDatastore用于预处理或调整大小,因为此选项通常显着较慢。

内存不足数据和预处理的数据存储。数据存储必须返回表或单元格数组中的数据。数据存储输出的格式取决于网络架构。

网络体系结构 数据存储输出 示例输出
单输入

表或单元格数组,其中第一列指定预测器。

表元素必须是标量、行向量或包含数字数组的1乘1单元格数组。

自定义数据存储必须输出表。

数据=读取(ds)
data = 4×1 table Predictors __________________ {224×224×3 double} {224×224×3 double} {224×224×3 double} {224×224×3 double}
数据=读取(ds)
Data = 4×1 cell array {224×224×3 double} {224×224×3 double} {224×224×3 double} {224×224×3 double}
多个输入

单元格数组至少numInputs列,numInputs是网络输入的数量。

第一个numInputs列指定每个输入的预测器。

输入的顺序由InputNames网络属性。

数据=读取(ds)
Data = 4×2 cell array {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3 double}

预测器的格式取决于数据的类型。

数据 预测词的格式
二维图像

h——- - - - - -w——- - - - - -c数字数组,其中hw,c分别是图像的高度、宽度和通道数。

三维图像

h——- - - - - -w——- - - - - -d——- - - - - -c数字数组,其中hwd,c分别是图像的高度、宽度、深度和通道数。

向量序列

c——- - - - - -年代矩阵,c序列的特征数和年代是序列长度。

二维图像序列

h——- - - - - -w——- - - - - -c——- - - - - -年代数组,hw,c分别对应图像的高度、宽度和通道数,和年代是序列长度。

小批中的每个序列必须具有相同的序列长度。

三维图像序列

h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -年代数组,hwd,c分别对应图像的高度、宽度、深度和通道数,和年代是序列长度。

小批中的每个序列必须具有相同的序列长度。

特性

c-by-1列向量,其中c是特征的数量。

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

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

输入 描述
二维图像 一个h——- - - - - -w——- - - - - -c——- - - - - -N数字数组,其中hw,c图像的高度、宽度和通道数分别是和N是图像的数量。
三维图像 一个h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -N数字数组,其中hwd,c图像的高度、宽度、深度和通道数分别为和N是图像的数量。
特性 一个N——- - - - - -numFeatures数字数组,其中N观察的次数和numFeatures输入数据的特征数。

如果数组包含S,然后它们在网络中传播。

对于有多个输入的网络,可以指定多个数组X1、……XN,在那里N网络输入和输入的数量是多少西对应于网络输入net.InputNames(我)

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

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

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

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

图像或特征数据表。表中的每一行都对应一个观察值。

表列中预测器的排列取决于输入数据的类型。

输入 预测
图像数据
  • 图像的绝对或相对文件路径,指定为单列中的字符向量

  • 指定为3-D数字数组的图像

在单个列中指定预测器。

特性数据

数字标量。

numFeatures表的列,其中numFeatures输入数据的特征数。

此参数只支持单输入网络。万博1manbetx

数据类型:表格

名称-值对参数

例子:‘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 Coder™深度学习库接口支持包。万博1manbetx使用MATLAB中的Ad万博1manbetxd-On资源管理器安装支持包。有关设置说明,请参见墨西哥人设置(GPU编码器).GPU Coder不需要。

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

墨西哥人的选项不支持具有多个输入层或多个输万博1manbetx出层的网络。

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

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

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

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

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

  • “cpu”—使用CPU。

例子:“ExecutionEnvironment”、“cpu的

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

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

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

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

有关填充、截断和分隔输入序列的效果的详细信息,请参见序列填充,截断和分割

例子:“SequenceLength”、“最短的

填充或截断方向,指定为下列之一:

  • “对”-填充或截断右边的序列。序列在同一时间步开始,软件截断或增加填充序列的结束。

  • “左”-填充或截断左边的序列。该软件截断或添加填充到序列的开始,以便序列在同一时间步结束。

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

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

有关填充、截断和分隔输入序列的效果的详细信息,请参见序列填充,截断和分割

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

例子:“SequencePaddingValue”,1

输出参数

全部折叠

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

分类任务的格式如下表所示。

任务 格式
图像或特征分类 N-by-1的标签分类向量,其中N是观测的数量。
Sequence-to-label分类
Sequence-to-sequence分类

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

对于单次观测的序列到序列分类任务,序列可以是矩阵。在这种情况下,YPred是标签的分类序列。

预测分数或反应,以矩阵或矩阵单元格数组的形式返回。的格式分数这取决于任务的类型。

的格式说明如下表所示分数

任务 格式
图像分类 N——- - - - - -K矩阵,N是观察数,和K是课程的数量吗
Sequence-to-label分类
功能分类
Sequence-to-sequence分类

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

对于单次观测的序列到序列分类任务,序列可以是矩阵。在这种情况下,分数是预测班级分数的矩阵。

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

算法

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

选择

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

您可以从训练好的网络中使用预测

您还可以使用。从网络层计算激活激活

对于序列到标签和序列到序列分类网络,可以使用预测和更新网络状态classifyAndUpdateState而且predictAndUpdateState

参考文献

[1]工藤M.,富山J.,辛波M.。“使用穿过区域的多维曲线分类”模式识别信.第20卷,11-13号,第1103-1111页。

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

扩展功能

在R2016a中引入