主要内容

基于深度学习的序列分类

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

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

此示例使用如[1]和[2]中所述的日语元音数据集。该示例列举了LSTM网络,以识别给定的时间序列数据代表连续使用的两个日本元音。培训数据包含九个扬声器的时间序列数据。每个序列具有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}')XLabel(“时间步”) 标题(“培训观察1”)numfeatures = size(xtrain {1},1);传奇(“特征 ”+字符串(1:numFeatures),'地点'“northeastoutside”

图中包含一个轴对象。具有标题培训观察1的轴对象包含12个类型的线。这些对象表示功能1,功能2,功能3,功能4,功能5,功能6,功能7,功能8,功能9,功能10,功能11,功能11,功能11,功能11,功能11,功能11,功能11。

准备填充数据

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

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

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

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

按序列长度对数据排序。

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

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

图栏(Sequencelength)Ylim([030])XLabel(“序列”)ylabel(“长度”) 标题(“排序数据”

图中包含一个轴对象。标题为“已排序数据”的axes对象包含一个bar类型的对象。

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

miniBatchSize = 27个;

定义LSTM网络架构

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

如果您可以在预测时间访问完整序列,则可以在网络中使用双向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”,小匹马,...'sequencelength''最长'...'洗牌'“永远”...'verbose',0,...“阴谋”“训练进步”);

火车LSTM网络

使用指定的训练选项来训练LSTM网络Trainnetwork.

net = trainnetwork(xtrain,ytrain,图层,选项);

Figure Training Progress (01-Sep-2021 08:32:52)包含2个轴对象和另一个类型为uigridlayout的对象。axis对象1包含14个类型为patch, text, line的对象。axis对象2包含14个类型为patch, text, line的对象。

测试LSTM网络

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

加载日语元音测试数据。XTest.是包含不同长度的370尺寸12的细胞阵列。ytest.为标签“1”,“2”,…“9”,对应9个发言者。

[xtest,ytest] =日本韦沃尔斯特迪塔XTEST(1:3)
ans =.3×1单元阵列{12x19 double} {12x17 double} {12x19 double}

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

numobservationstest = numel(xtest);i=1:numObservationsTest序列= XTest{i};sequenceLengthsTest (i) =(序列,2)大小;结束[SequenceLengdentStest,IDX] =排序(SequenceLengdentStest);xtest = xtest(idx);ytest = ytest(idx);

分类测试数据。为减少分类过程引入的填充量,将迷你批量大小设置为27.要将与训练数据相同的填充,请指定序列长度'最长'

miniBatchSize = 27个;ypred =分类(net,xtest,...“MiniBatchSize”,小匹马,...'sequencelength''最长');

计算预测的分类精度。

ACC = SUM(YPRED == ytest)./ numel(ytest)
ACC = 0.9730.

参考

[1] M. Kudo,J. Toyama和M. Shimbo。“使用过度区域的多维曲线分类。”模式识别字母.卷。20,第11-13页,第1103-1111页。

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

另请参阅

||||

相关的话题