主要内容

딥러닝을사용한序列对序列분류

이예제에서는장단기기억(LSTM)신경망을사용하여시퀀스데이터의각시간스텝을분류하는방법을보여줍니다。

시퀀스데이터의각시간스텝을분류하도록심층신경망을훈련시키기위해序列对序列LSTM신경망을사용할수있습니다。sequence-to-sequence LSTM신경망을사용하면시퀀스데이터의개별시간스텝에대해각각서로다른예측을수행할수있습니다。

이예제에서는신체에착용한스마트폰으로부터얻은센서데이터를사용합니다。이예제에서는서로다른세방향의가속도계측정값을나타내는시계열데이터를주고착용자의활동을인식하도록LSTM신경망을훈련시킵니다。훈련데이터는착용자7명의시계열데이터를포함합니다。각시퀀스는3개의특징을가지며길이가서로다릅니다。데이터세트는6개의훈련관측값과1개의테스트관측값을포함합니다。

시퀀스데이터불러오기

사람의동작에대한식데이터를불러옵니다。이훈련데이터는신체에착용한스마트폰으로부터얻은센서데이터로구성된6개의시퀀스를포함합니다。각시퀀스는3개의특징을가지며길이가서로다릅니다。3개의특징은서로다른세방향의가속도계측정값에대응됩니다。

负载HumanActivityTrainXTrain
XTrain =6×1单元格数组{3×64480 double} {3×53696 double} {3×56416 double} {3×50688 double} {3×51888 double} {3×54256 double}

훈련시퀀스1개를플롯으로시각화합니다。첫번째훈련시퀀스의첫번째특징을플로팅하고대응하는동작에따라플롯에색을입힙니다。

X = XTrain{1}(1,:);classes = categories(YTrain{1});数字J = 1:编号(类)标签=类(J);idx = find(YTrain{1} == label);持有情节(idx X (idx))结束持有包含(“时间步”) ylabel (“加速”)标题(“训练序列1,特征1”)传说(类,“位置”“西北”

LSTM신경망아키텍처정의하기

LSTM신경망아키텍처를정의합니다。입력값이크기가3(입력데이터의특징개수)rm시퀀스가되도록지정합니다。은닉유닛200개를갖는LSTM계층을지정하고전체시퀀스를출력합니다。마지막으로,크기가인5완전연결계층을포함하여5개의클래스를지정하고,이어서소프트맥스계층과분류계층을지정합니다。

numFeatures = 3;numHiddenUnits = 200;numClasses = 5;层= [...sequenceInputLayer numFeatures lstmLayer (numHiddenUnits,“OutputMode”“序列”) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];

훈련옵션을지정합니다。솔버를“亚当”으로설정합니다。훈련을纪元60회수행합니다。기울기가한없이가하지않도록하려면기울기임계값을2로설정하십시오。

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

trainNetwork를사용하여지정된훈련옵션으로LSTM신경망을훈련시킵니다。각미니배치는전체훈련세트를포함하므로时代당한번씩플롯이업데이트됩니다。시퀀스가매우길기때문에각미니배치를처리하고플롯을업데이트하는데시간이걸릴수있습니다。

net = trainNetwork(XTrain,YTrain,图层,选项);

LSTM신경망테스트하기

테스트데이터를불러오고각시간스텝마다동작을분류합니다。

사람의동작에대한테스트데이터를불러옵니다。XTest는차원이3 rm단일시퀀스를포함합니다。欧美는각시간스텝에서의동작에대응하는直言형레이블로구성된시퀀스를포함합니다。

负载HumanActivityTest图(XTest{1}')“时间步”)传说(“特性”+ (1:numFeatures))“测试数据”

分类를사용하여테스트데이터를분류합니다。

YPred = category (net,XTest{1});

또는classifyAndUpdateState를사용하여한번에시간스텝하나씩예측을수행할수도있습니다。이방법은시간스텝의값이스트림으로수신되는경우에유용합니다。일반적으로한번에시간스텝하나씩예측을수행하는것보다전체시퀀스에대해예측을수행하는것이빠릅니다。단일시간스텝예측들사이에서신경망을업데이트하여미래의시간스텝을전망하는방법에대한예제는딥러닝을사용한시계열전망항목을참조하십시오。

예측의정확도를계산합니다。

acc = sum(YPred == YTest{1})./ nummel (YTest{1})
Acc = 0.9998

플롯을사용하여예측을테스트데이터와비교합니다。

图绘制(YPred,“。”)举行情节(欧美{1})包含(“时间步”) ylabel (“活动”)标题(“预测活动”)传说([“预测”“测试数据”])

참고 항목

|||

관련 항목