主要内容

使用深度学习的序列分类

这个例子展示了如何使用长短期记忆(LSTM)网络对序列数据进行分类。

要训练深度神经网络对序列数据进行分类,可以使用LSTM网络。LSTM网络使您能够将序列数据输入到网络中,并基于序列数据的单个时间步长进行预测。

本例使用[1]和[2]中描述的日语Vowels数据集。这个例子训练了一个LSTM网络来识别说话人给出的时间序列数据,表示连续说出两个日语元音。训练数据包含9位演讲者的时间序列数据。每个序列有12个特征,长度不同。数据集包含270个训练观测值和370个测试观测值。

加载顺序数据

加载日语元音训练数据。XTrain是包含270个不同长度的12维序列的单元格数组。Y是标签“1”,“2”,…,“9”,对应9个说话者。中的条目XTrain是有12行(每个特征一行)和不同列数(每个时间步一列)的矩阵。

[XTrain,YTrain] =日本evowelstraindata;XTrain (1:5)
ans =5×1单元格数组{12x20双}{12x26双}{12x22双}{12x20双}{12x21双}

把第一个时间序列想象成一个图形。每一行对应一个特征。

图(XTrain{1}')“时间步”)标题(“训练观察1”) numFeatures = size(XTrain{1},1);传奇(“特性”+字符串(1:numFeatures),位置=“northeastoutside”

图中包含一个轴对象。标题为Training Observation 1的坐标轴对象包含12个类型为line的对象。这些对象分别代表特征1、特征2、特征3、特征4、特征5、特征6、特征7、特征8、特征9、特征10、特征11、特征12。

为填充准备数据

在训练过程中,默认情况下,软件将训练数据分割为小批量,并填充序列,使它们具有相同的长度。过多的填充会对网络性能产生负面影响。

为了防止训练过程中添加过多的填充,您可以根据序列长度对训练数据进行排序,并选择一个迷你批量大小,以便迷你批量中的序列具有相似的长度。下图显示了数据排序前后填充序列的效果。

获取每个观察的序列长度。

numObservations = numel(XTrain);i=1:numObservations sequence = XTrain{i};sequenceLengths(i) = size(sequence,2);结束

按序列长度对数据进行排序。

[sequenceLengths,idx] = sort(sequenceLengths);XTrain = XTrain(idx);YTrain = YTrain(idx);

在条形图中查看排序的序列长度。

图bar(sequenceLengths) ylim([0 30]) xlabel(“序列”) ylabel (“长度”)标题(“排序数据”

图中包含一个轴对象。标题为Sorted Data的axes对象包含一个类型为bar的对象。

选择一个27的小批量大小来平均分配训练数据,并减少小批量中的填充量。下图说明了添加到序列中的填充。

miniBatchSize = 27;

定义LSTM网络体系结构

定义LSTM网络体系结构。指定输入大小为12(输入数据的维数)的序列。指定带有100个隐藏单元的双向LSTM层,并输出序列的最后一个元素。最后,指定9个类,包括大小为9的全连接层,然后是softmax层和分类层。

如果您在预测时可以访问完整的序列,那么您可以在网络中使用双向LSTM层。双向LSTM层在每个时间步从完整序列中学习。如果您在预测时无法访问完整的序列,例如,如果您正在预测值或每次预测一个时间步骤,则使用LSTM层代替。

inputSize = 12;numHiddenUnits = 100;numClasses = 9;层= [...sequenceInputLayer inputSize bilstmLayer (numHiddenUnits OutputMode =“最后一次”fullyConnectedLayer(numClasses) softmaxLayer classificationLayer
2”BiLSTM BiLSTM与100个隐藏单元3”全连接9全连接层4”Softmax Softmax 5”分类输出crossentropyex

现在,指定培训选项。指定要的求解器“亚当”,梯度阈值为1,最大epoch数为50。若要填充数据,使其具有与最长序列相同的长度,请指定为的序列长度“最长”.若要确保数据保持按序列长度排序,请指定永远不打乱数据。

由于mini-batch序列小,训练更适合CPU。设置ExecutionEnvironment选项“cpu”.若要在GPU上训练,如果可用,请设置ExecutionEnvironment选项“汽车”(这是默认值)。

选项= trainingOptions(“亚当”...ExecutionEnvironment =“cpu”...GradientThreshold = 1,...MaxEpochs = 50,...MiniBatchSize = MiniBatchSize,...SequenceLength =“最长”...洗牌=“从不”...Verbose = 0,...情节=“训练进步”);

训练LSTM网络

使用指定的训练选项对LSTM网络进行训练trainNetwork

net = trainNetwork(XTrain,YTrain,图层,选项);

{

测试LSTM网络

加载测试集并将序列分类到扬声器中。

加载日语元音测试数据。XTest是包含370个不同长度的12维序列的单元格数组。欧美是标签“1”,“2”,…“9”,对应9个说话者。

[XTest,YTest] =日本evowelstestdata;XTest (1:3)
ans =3×1单元格数组{12x19 double} {12x17 double} {12x19 double}

LSTM网络使用相似长度的小批量序列进行训练。确保测试数据以相同的方式组织。按序列长度对测试数据进行排序。

numObservationsTest = numel(XTest);i=1:numObservationsTest sequence = XTest{i};sequenceLengthsTest(i) = size(sequence,2);结束[sequenceLengthsTest,idx] = sort(sequenceLengthsTest);XTest = XTest(idx);YTest = YTest(idx);

分类测试数据。要减少分类过程引入的填充量,请指定用于训练的相同的迷你批大小。若要应用与训练数据相同的填充,请指定序列长度为“最长”

YPred = category (net,XTest,...MiniBatchSize = MiniBatchSize,...SequenceLength =“最长”);

计算预测的分类精度。

acc = sum(YPred == YTest)./ nummel (YTest)
Acc = 0.9757

参考文献

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

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

另请参阅

||||

相关的话题