主要内容

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

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

训练深度神经网络对序列数据的每一个时间步进行分类,可以使用sequence-to-sequence 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:);类=类别(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。

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

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

网= trainNetwork (XTrain、YTrain层,选择);

测试LSTM网络

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

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

负载HumanActivityTest图绘制(XTest{1}”)包含(“时间步”)传说(“特性”+ (1: numFeatures))标题(“测试数据”

对测试数据进行分类分类

YPred =分类(网络,XTest {1});

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

计算预测的准确性。

acc = sum(YPred == YTest{1})./numel(YTest{1})
acc = 0.9998

用曲线图将预测结果与试验数据进行比较。

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

另请参阅

|||

相关的话题

Baidu
map