此示例显示如何使用长短期内存(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网络架构。指定输入为尺寸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,图层,选项);
加载测试数据并在每个时间步骤对活动进行分类。
加载人工活动测试数据。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(“活动”)标题(“预测活动”) 传奇([“预料到的”“测试数据”])
lstmLayer
|sequenceInputLayer
|培训选项
|trainNetwork