基于深度学习的序列分类

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

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

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

加载序列数据

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

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

想象情节中的第一个时间序列。每一行对应一个特征。

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

为填充准备数据

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

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

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

numObservations =元素个数(XTrain);i=1:numObservations序列= XTrain{i};sequenceLengths (i) =(序列,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”“最后一次”)软连接层(numClasses)
Layer = 5x1 Layer array with layers: 1”Sequence Input with Sequence Input with 12 dimensions 2”BiLSTM BiLSTM with 100 hidden units 3”Fully Connected 9 Fully Connected Layer 4”Softmax Softmax 5”Classification Output crossentropyex .全连接层

现在,指定培训选项。指定要使用的求解器“亚当”,梯度阈值为1,最大纪元数为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的可变序列的单元数组。欧美为标签“1”,“2”,…“9”,对应9个发言者。

[XTest,欧美]= japaneseVowelsTestData;XTest (1:3)
ans =3×1单元阵列{12x19 double} {12x17 double} {12x19 double}

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

numObservationsTest =元素个数(XTest);i=1:numObservationsTest序列= XTest{i};sequenceLengthsTest (i) =(序列,2)大小;结束[sequenceLengthsTest, idx] = (sequenceLengthsTest)进行排序;XTest = XTest (idx);欧美=欧美(idx);

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

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

计算预测的分类精度。

acc = sum(YPred == YTest)./numel(YTest)
acc = 0.9730

参考文献

工藤、富山、新保。“使用通过区域的多维曲线分类”。模式识别的字母.第20卷,第11-13期,第1103-1111页。

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

另请参阅

||||

相关的话题