这个例子展示了如何使用长短期记忆(LSTM)网络对序列数据的每个时间步进行分类。
要培训深度神经网络,每次序列数据进行分类,可以使用asequence-to-sequence LSTM网络.序列到序列的LSTM网络使您能够对序列数据的每个时间步长进行不同的预测。
此示例使用从身体上佩戴的智能手机获得的传感器数据。该示例列举了LSTM网络以识别给定时间序列数据的佩戴者的活动,表示在三个不同方向上的加速度计读数。培训数据包含七个人的时间序列数据。每个序列具有三个特征,长度变化。数据集包含六个培训观察和一个测试观察。
加载人类活动识别数据。数据包含从身体上佩戴的智能手机获得的七个时间序列。每个序列具有三个特征,长度变化。三个特征对应于三个不同方向的加速度计读数。
加载人类术争XTrain.
XTrain =6×1个单元阵列{3×64480 double} {3×53696 double} {3×56416 double} {3×50688 double} {3×51888 double} {3×54256双}
在一个情节中想象一个训练序列。绘制第一个训练序列的第一个特征,并根据相应的活动为其上色。
x = xtrain {1}(1,:);Classes =类别(Ytrain {1});数字为了j = 1:numel(类)标签=类(j);idx = find(ytrain {1} ==标签);抓住在绘图(idx,x(idx))结尾抓住离开包含(“时间步骤”) ylabel (“加速”) 标题(“训练序列1,特征1”)传奇(课程,“位置”那'西北')
定义LSTM网络体系结构。将输入指定为大小为3的序列(输入数据的特征数)。指定一个包含200个隐藏单元的LSTM层,并输出整个序列。最后,通过包含一个大小为5的完全连接层,然后是一个softmax层和一个分类层来指定五个类。
numfeatures = 3;numhidendunits = 200;numclasses = 5;层= [......sequenceInputlayer(numfeatures)lstmlayer(numhidentunits,'OutputMode'那'顺序')全连接列(numclasses)softmaxlayer分类层];
指定培训选项。将求解器设置为'亚当'
.火车60时代。为防止渐变爆炸,将梯度阈值设置为2。
选择= trainingOptions ('亚当'那......'maxepochs'60,......'gradientthreshold'2,......'verbose',0,......'plots'那'培训 - 进步');
使用指定的培训选项列车使用指定的培训选项列车Trainnetwork.
.每个迷你批处理包含整个训练集,因此每个时代更新绘图。序列很长,因此可能需要一些时间来处理每个迷你批处理并更新绘图。
网= trainNetwork (XTrain、YTrain层,选择);
加载测试数据并在每次步骤中对活动进行分类。
加载人类活动测试数据。XTest
包含维度3的单个序列。欧美
包含对应于每次步骤的活动的分类标签序列。
加载HumanActivityTest图绘制(xtest {1}')xlabel(“时间步骤”) 传奇(“特征 ”+(1:numfeatures))标题(“测试数据”)
使用测试数据进行分类分类
.
ypred =分类(net,xtest {1});
或者,您可以通过使用来一次一步地进行预测classifyandupdateState.
.当时间步长值以流的形式到达时,这很有用。通常,对全序列进行预测要比一次只做一步预测快得多。有关如何通过更新单个时间步长预测之间的网络来预测未来时间步长的示例,请参见基于深度学习的时间序列预测.
计算预测的准确性。
acc = sum(YPred == YTest{1})./numel(YTest{1})
ACC = 0.9998.
通过使用绘图将预测与测试数据进行比较。
图绘图(Ypred,'.-')举行在情节(欧美{1})离开包含(“时间步骤”) ylabel (“活动”) 标题(“预测活动”)传说([“预测”“测试数据”])
lstmlayer.
|sequenceInputlayer.
|trainingOptions
|Trainnetwork.