使用深度学习的序列分类

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

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

本例使用了日本元音数据集如[1]和[2]中描述。这个例子训练的LSTM网络识别代表相继发言两名日本元音扬声器给定的时间序列数据。训练数据包含9个扬声器的时间序列数据。每个序列具有12个特征和长度而变化。该数据集包含270次训练的观测和370个试验观测。

加载序列数据

加载日本元音训练数据。XTrain是含有不同长度的尺寸12的270个序列的单元阵列。Y是标签“1”、“2”、……的分类向量。,即“9”,对应九个说话者。的条目XTrain是具有12行(每一行对应一个功能)和不同数量的列(对于每个时间步长的一列)的矩阵。

[XTrain,YTrain] = japaneseVowelsTrainData;XTrain(1:5)
ANS =5×1单元阵列{12x20双}{12x26双}{12x22双}{12x20双}{12x21双}

在可视化的曲线在第一时间系列。每一行对应一个功能。

图图(XTrain {1}')xlabel(“时间步”)标题(“培训观察1”)numFeatures =尺寸(XTrain {1},1);传说(“功能”+字符串(1:numFeatures),'位置',“northeastoutside”)

准备数据进行填充

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

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

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

numObservations =元素个数(XTrain);I = 1:numObservations序列= XTrain {I};sequenceLengths(ⅰ)=尺寸(序列,2);结束

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

[sequenceLengths, idx] = (sequenceLengths)进行排序;XTrain = XTrain (idx);YTrain = YTrain (idx);

查看排序序列长度的条形图英寸

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

选择27个小批量,对训练数据进行均匀划分,减少小批量中的填充量。下图演示了添加到序列中的填充。

miniBatchSize = 27个;

定义LSTM网络架构

定义LSTM网络架构。指定输入大小为尺寸12(输入数据的维数)的序列。指定与100个隐藏单元的双向LSTM层,并输出该序列的最后一个元素。最后,通过包括大小9的完全连接层,接着是SOFTMAX层和分类层指定9个班。

如果你在预测时间访问完整的序列,那么你就可以在网络中使用的双向LSTM层。双向LSTM层从在每个时间步骤中的全序列获悉。如果你没有在预测时间访问完整的序列,例如,如果你的预测值或预测一次在一个时间步,然后使用LSTM层代替。

inputSize = 12;numHiddenUnits = 100;numClasses = 9;层= [sequenceInputLayer inputSize bilstmLayer (numHiddenUnits,“OutputMode”,“最后一次”) fullyConnectedLayer(numClasses)
Layer = 5x1 Layer array with layers: 1”Sequence Input序列Input with 12 dimensions 2”BiLSTM BiLSTM with 100 hidden units 3”full Connected 9 full Connected Layer 4”Softmax Softmax 5”分类输出crossentropyex

现在,指定培训选项。指定求解器为“亚当”时,梯度阈值为1,最大epoch数为100。为了减少小批量中的填充量,选择27的小批量大小。若要填充数据使其具有与最长序列相同的长度,请指定序列长度为'最长'。为了确保数据的遗体由排序序列长度,指定从不洗牌的数据。

由于迷你批是小的和短的序列,训练更适合CPU。指定“ExecutionEnvironment”“cpu”。要在GPU训练,如果有的话,集“ExecutionEnvironment”“汽车”(这是默认值)。

maxEpochs = 100;miniBatchSize = 27个;选择= trainingOptions (“亚当”,“ExecutionEnvironment”,“cpu”,'GradientThreshold'1,“MaxEpochs”maxEpochs,“MiniBatchSize”,miniBatchSize,'SequenceLength','最长',“洗牌”,“永远”,“放牧”,0,“阴谋”,“训练进步”);

火车LSTM网络

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

净= trainNetwork(XTrain,YTrain,层,选项);

测试LSTM网络

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

加载日本元音的测试数据。XTEST是一个单元格数组,包含370个12维的可变长度序列。YTest是标签“1”、“2”、“…”的分类向量。9”,相当于九位发言者。

[XTEST,YTest] = japaneseVowelsTestData;XTEST(1:3)
ANS =3×1单元阵列{12x19双} {12x17双} {12x19双}

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

numObservationsTest = numel(XTEST);I = 1:numObservationsTest序列= XTEST {I};sequenceLengthsTest(ⅰ)=尺寸(序列,2);结束[sequenceLengthsTest,IDX] =排序(sequenceLengthsTest);XTEST = XTEST(IDX);YTest = YTest(IDX);

分类测试数据。为了减少填充的由分类过程中引入的量,小批量大小设置为27到应用相同的填充作为训练数据,指定序列长度为'最长'

miniBatchSize = 27个;YPred =分类(净,XTEST,“MiniBatchSize”,miniBatchSize,'SequenceLength','最长');

计算预测的分类精度。

ACC =总和(YPred == YTest)./ numel(YTest)
ACC = 0.9730

参考

[1] M。工藤,J.富山,和M. Shimbo。“多维曲线分类中穿出的地区。”模式识别的字母。卷。20,第11-13页1103-1111。

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

另请参阅

||||

相关话题