基于深度学习的序列到序列分类
这个例子展示了如何使用长短期记忆(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(class) label = class (J);idx = find(YTrain{1} == label);持有在情节(idx X (idx))结束持有从包含(“时间步”) ylabel (“加速”)标题(训练序列1,特征1)传说(类,“位置”,“西北”)
定义LSTM网络架构
定义LSTM网络架构。将输入指定为大小为3的序列(输入数据的特征数量)。指定一个包含200个隐藏单元的LSTM层,输出完整序列。最后,通过包括大小为5的全连接层,然后是softmax层和分类层来指定5个类。
numFeatures = 3;numHiddenUnits = 200;numClasses = 5;层= [...sequenceInputLayer numFeatures lstmLayer (numHiddenUnits,“OutputMode”,“序列”) fullconnectedlayer (numClasses)软maxlayer分类层];
指定培训选项。将求解器设置为“亚当”
.为60个时代而训练。为了防止梯度爆炸,设置梯度阈值为2。
选择= trainingOptions (“亚当”,...“MaxEpochs”现年60岁的...“GradientThreshold”2,...“详细”0,...“阴谋”,“训练进步”);
使用指定的训练选项来训练LSTM网络trainNetwork
.每个小批处理包含整个训练集,因此图在每个epoch中更新一次。序列非常长,所以处理每个小批处理和更新情节可能需要一些时间。
网= trainNetwork (XTrain、YTrain层,选择);
测试LSTM网络
加载测试数据并在每个时间步骤对活动进行分类。
加载人类活动测试数据。XTest
包含维度3的单个序列。欧美
包含在每个时间步骤中对应于活动的分类标签序列。
负载HumanActivityTest图绘制(XTest{1}”)包含(“时间步”)传说(“特性”+ (1: numFeatures))标题(“测试数据”)
对试验数据进行分类分类
.
YPred =分类(网络,XTest {1});
或者,您可以使用以下命令一步一步地进行预测classifyAndUpdateState
.当您拥有到达流的时间步长的值时,这是非常有用的。通常,对完整序列进行预测要比一步一步地进行预测快得多。有关如何通过更新单个时间步长预测之间的网络来预测未来时间步长的示例,请参见利用深度学习进行时间序列预测.
计算预测的准确性。
/ etc /numel(YTest{1}) / etc /numel(YTest{1})
acc = 0.9998
用图表将预测结果与测试数据进行比较。
图绘制(YPred,“。”)举行在情节(欧美{1})从包含(“时间步”) ylabel (“活动”)标题(“预测活动”)传说([“预测”“测试数据”])
另请参阅
trainNetwork
|trainingOptions
|lstmLayer
|sequenceInputLayer