基于深度学习的序列到序列分类

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

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

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

加载序列数据

加载人类活动识别数据。该数据包含从佩戴在身上的智能手机获得的7个时间序列传感器数据。每个序列有三个特征,长度不同。这三个特征对应于加速度计在三个不同方向的读数。

负载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 = class (J);idx = find(YTrain{1} == label);持有情节(idx X (idx))结束持有Xlabel(“时间步”)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。

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

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

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

测试LSTM网络

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

加载人工活动测试数据。XTest.包含单个尺寸3序列。ytest.包含与活动在每个时间步骤对应的分类标签序列。

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

对使用的测试数据进行分类分类

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

或者,您可以通过使用一次执行一次预测classifyAndUpdateState.当您具有到达流的时间步骤的值时,这很有用。通常,与一次进行预测相比,在完全序列上进行预测更快。有关示例,显示如何通过在单时间步骤预测之间更新网络来预测未来时间步骤,请参阅使用深度学习的时间序列预测

计算预测的准确性。

ACC = SUM(YPRED == YTEST {1})./ numel(ytest {1})
acc = 0.9998

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

图绘制(YPred,“。”) 抓住绘图(ytest {1})持有Xlabel(“时间步”)ylabel(“活动”)标题(“预测活动”) 传奇([“预料到的”“测试数据”])

另请参阅

|||

相关话题