这个例子展示了如何使用长短期记忆(LSTM)网络对序列数据的每个时间步骤进行分类。
要训练深度神经网络对序列数据的每个时间步长进行分类,可以使用sequence-to-sequence 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))结束持有从包含(“时间步”) ylabel (“加速”)标题(“训练序列1,特征1”)传说(类,“位置”,“西北”)
定义LSTM网络架构。指定输入为大小为3的序列(输入数据的特征数量)。指定一个包含200个隐藏单元的LSTM层,输出完整序列。最后,通过包含大小为5的完全连接层、softmax层和分类层来指定5个类。
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
.每个小批包含整个训练集,因此每个epoch更新一次图。序列非常长,所以可能需要花一些时间来处理每个小批和更新情节。
网= trainNetwork (XTrain、YTrain层,选择);
加载测试数据并在每个时间步骤对活动进行分类。
加载人工活动测试数据。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 (“活动”)标题(“预测活动”)传说([“预测”“测试数据”])
lstmLayer
|sequenceInputLayer
|trainingOptions
|trainNetwork