主要内容

使用深度学习的序列到序列分类

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

要训练深度神经网络对序列数据的每个时间步进行分类,可以使用序列到序列LSTM网络.序列到序列LSTM网络使您能够对序列数据的每个单独的时间步进行不同的预测。

这个例子使用了从佩戴在身上的智能手机获得的传感器数据。该示例训练LSTM网络,在给定时间序列数据的情况下识别佩戴者的活动,这些数据表示加速度计在三个不同方向上的读数。训练数据包含7个人的时间序列数据。每个序列有三个特征,长度不同。数据集包含6个训练观测值和1个测试观测值。

负载顺序数据

加载人类活动识别数据。训练数据包含六个序列的传感器数据,这些数据来自佩戴在身上的智能手机。每个序列有三个特征,长度不同。这三个特征对应于加速度计在三个不同方向上的读数。

负载HumanActivityTrainXTrain
XTrain =6×1单元阵列{3×64480 double} {3×53696 double} {3×56416 double} {3×50688 double} {3×51888 double} {3×54256 double}

在一个图中想象一个训练序列。绘制第一个训练序列的第一个特征,并根据相应的活动给图上色。

X = XTrain{1}(1,:);class = categories(YTrain{1});数字J = 1:numel(classes) label = classes(J);idx = find(YTrain{1} == label);持有情节(idx X (idx))结束持有包含(“时间步”) ylabel (“加速”)标题(“训练序列1,特征1”)传说(类,“位置”“西北”

定义LSTM网络架构

定义LSTM网络体系结构。将输入指定为大小为3的序列(输入数据的特征数)。指定一个包含200个隐藏单元的LSTM层,并输出完整序列。最后,通过包括大小为5的完全连接层、softmax层和分类层来指定五个类。

numFeatures = 3;numHiddenUnits = 200;numClasses = 5;图层= [sequenceInputLayer numFeatures lstmLayer (numHiddenUnits,“OutputMode”“序列”) fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer];

指定培训选项。将求解器设置为“亚当”.训练60次。为了防止梯度爆炸,将梯度阈值设置为2。

options = trainingOptions(“亚当”“MaxEpochs”现年60岁的“GradientThreshold”2,“详细”0,“阴谋”“训练进步”);

使用指定的训练选项训练LSTM网络trainNetwork.每个小批包含整个训练集,因此每个epoch更新一次情节。序列非常长,所以可能需要一些时间来处理每个小批并更新情节。

net = trainNetwork(XTrain,YTrain,layers,options);

测试LSTM网络

加载测试数据,并在每个时间步骤对活动进行分类。

加载人类活动测试数据。XTest包含维度3的单个序列。欧美包含与每个时间步骤的活动相对应的分类标签序列。

负载HumanActivityTestfigure plot(XTest{1}') xlabel(“时间步”)传说(“特性”+ (1:numFeatures)) title(“测试数据”

对测试数据进行分类分类

YPred = class (net,XTest{1});

或者,您可以使用classifyAndUpdateState.当您有到达流中的时间步长的值时,这很有用。通常,与每次预测一个时间步相比,对整个序列进行预测更快。有关如何通过在单个时间步预测之间更新网络来预测未来时间步的示例,请参见使用深度学习的时间序列预测

计算预测的准确性。

acc = sum(YTest{1})./ nummel (YTest{1})
Acc = 0.9998

使用图表将预测结果与测试数据进行比较。

图绘制(YPred,“。”)举行情节(欧美{1})包含(“时间步”) ylabel (“活动”)标题(“预测活动”)传说([“预测”“测试数据”])

另请参阅

|||

相关的话题