主要内容

利用深度学习进行序列分类

这个例子展示了如何使用长短期记忆(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} {12x21 double}

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

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

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

准备填充数据

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

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

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

numObservations =元素个数(XTrain);i=1:numObservations sequence = XTrain{i};sequenceLengths (i) =(序列,2)大小;结束

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

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

在柱状图中查看已排序的序列长度。

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

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

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

miniBatchSize = 27个;

定义LSTM网络架构

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

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

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

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

由于小批次的序列较短,训练更适合于CPU。设置ExecutionEnvironment选项“cpu”.如果需要在GPU上进行训练,请设置ExecutionEnvironment选项“汽车”(这是默认值)。

选择= trainingOptions (“亚当”...ExecutionEnvironment =“cpu”...GradientThreshold = 1,...MaxEpochs = 50,...MiniBatchSize = MiniBatchSize,...SequenceLength =“最长”...洗牌=“从不”...Verbose = 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 sequence = XTest{i};sequenceLengthsTest (i) =(序列,2)大小;结束[sequenceLengthsTest, idx] = (sequenceLengthsTest)进行排序;XTest = XTest (idx);欧美=欧美(idx);

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

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

计算预测的分类精度。

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

参考文献

[1]工藤先生,富山先生,Shimbo先生。“利用穿过区域的多维曲线分类”。模式识别的字母.第20卷第11-13期,第1103-1111页。

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

另请参阅

||||

相关的话题

Baidu
map