本主题解释如何使用长短期记忆(LSTM)网络处理序列和时间序列数据进行分类和回归任务。有关如何使用LSTM网络对序列数据进行分类的示例,请参见GydF4y2Ba基于深度学习的序列分类GydF4y2Ba.GydF4y2Ba
LSTM网络是一种递归神经网络(RNN),可以学习序列数据时间步长之间的长期依赖关系。GydF4y2Ba
LSTM网络的核心组件是序列输入层和LSTM层。A.GydF4y2Ba序列输入层GydF4y2Ba将序列或时间序列数据输入网络。一个GydF4y2BaLSTM层GydF4y2Ba学习序列数据的时间步长之间的长期相关性。GydF4y2Ba
此图说明了用于分类的简单LSTM网络的体系结构。该网络从序列输入层开始,然后是LSTM层。为了预测类别标签,该网络以完全连接层、softmax层和分类输出层结束。GydF4y2Ba
该图说明了用于回归的简单LSTM网络的体系结构。网络从序列输入层开始,后跟LSTM层。网络以完全连接的层和回归输出层结尾。GydF4y2Ba
这张图说明了视频分类网络的结构。要向网络输入图像序列,使用序列输入层。使用卷积层提取特征,即对视频的每一帧单独进行卷积操作,先使用序列折叠层,再使用卷积层,再使用序列展开层。要使用LSTM层从向量序列中学习,使用一个平坦层,然后是LSTM和输出层。GydF4y2Ba
为了创建用于序列到标签分类的LSTM网络,创建包含序列输入层,LSTM层,完全连接的层,软MAX层和分类输出层的层数组。GydF4y2Ba
将序列输入层的大小设置为输入数据的特征数。将完全连接层的大小设置为类数。无需指定序列长度。GydF4y2Ba
对于LSTM图层,指定隐藏单元的数量和输出模式GydF4y2Ba“最后”GydF4y2Ba
.GydF4y2Ba
numFeatures = 12;numhidendunits = 100;numclasses = 9;层= [GydF4y2Ba......GydF4y2BasequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits,GydF4y2Ba'OutputMode'GydF4y2Ba,GydF4y2Ba“最后”GydF4y2Ba)fullyConnectedLayer(numClasses)softmaxLayer classificationLayer];GydF4y2Ba
有关如何训练LSTM网络进行序列到标签分类和对新数据进行分类的示例,请参见GydF4y2Ba基于深度学习的序列分类GydF4y2Ba.GydF4y2Ba
要为序列到序列分类创建LSTM网络,请使用与序列到标签分类相同的架构,但将LSTM层的输出模式设置为GydF4y2Ba“顺序”GydF4y2Ba
.GydF4y2Ba
numFeatures = 12;numhidendunits = 100;numclasses = 9;层= [GydF4y2Ba......GydF4y2BasequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits,GydF4y2Ba'OutputMode'GydF4y2Ba,GydF4y2Ba“顺序”GydF4y2Ba)fullyConnectedLayer(numClasses)softmaxLayer classificationLayer];GydF4y2Ba
要为序列到一回归创建LSTM网络,请创建包含序列输入层、LSTM层、完全连接层和回归输出层的层阵列。GydF4y2Ba
将序列输入层的大小设置为输入数据的特征数。将完全连接层的大小设置为响应数。无需指定序列长度。GydF4y2Ba
对于LSTM图层,指定隐藏单元的数量和输出模式GydF4y2Ba“最后”GydF4y2Ba
.GydF4y2Ba
numFeatures = 12;numHiddenUnits = 125;numResponses = 1;层= [GydF4y2Ba......GydF4y2BasequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits,GydF4y2Ba'OutputMode'GydF4y2Ba,GydF4y2Ba“最后”GydF4y2Ba) fullyConnectedLayer (numResponses) regressionLayer];GydF4y2Ba
要为序列到序列回归创建LSTM网络,请使用与序列到一个回归相同的架构,但将LSTM层的输出模式设置为GydF4y2Ba“顺序”GydF4y2Ba
.GydF4y2Ba
numFeatures = 12;numHiddenUnits = 125;numResponses = 1;层= [GydF4y2Ba......GydF4y2BasequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits,GydF4y2Ba'OutputMode'GydF4y2Ba,GydF4y2Ba“顺序”GydF4y2Ba) fullyConnectedLayer (numResponses) regressionLayer];GydF4y2Ba
有关如何训练LSTM网络进行序列间回归和预测新数据的示例,请参阅GydF4y2Ba使用深度学习的序列到序列回归GydF4y2Ba.GydF4y2Ba
若要为包含图像序列(如视频数据和医学图像)的数据创建深度学习网络,请使用序列输入层指定图像序列输入。GydF4y2Ba
使用卷积层提取特征,即对视频的每一帧单独进行卷积操作,先使用序列折叠层,再使用卷积层,再使用序列展开层。要使用LSTM层从向量序列中学习,使用一个平坦层,然后是LSTM和输出层。GydF4y2Ba
输入= [28 28 1];filtersize = 5;numfilters = 20;numhidendunits = 200;numclasses = 10;层= [GydF4y2Ba......GydF4y2BasequenceInputLayer(inputSize,GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba“输入”GydF4y2Ba)SechandFoldingLayer(GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba“折叠”GydF4y2Ba)卷积2dlayer(filterSize、NumFilter、,GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba“conv”GydF4y2Babatchnormalizationlayer(GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba‘bn’GydF4y2Ba)雷卢耶(GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba“relu”GydF4y2Ba)SequencunfoldingLayer(GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba“展开”GydF4y2Ba)压扁层(GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba“扁平化”GydF4y2Ba)lstmlayer(numhidendunits,GydF4y2Ba'OutputMode'GydF4y2Ba,GydF4y2Ba“最后”GydF4y2Ba,GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba'lstm'GydF4y2Ba) fullyConnectedLayer (numClassesGydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba“俱乐部”GydF4y2Ba) softmaxLayer (GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba'softmax'GydF4y2Ba) classificationLayer (GydF4y2Ba“姓名”GydF4y2Ba,GydF4y2Ba'分类'GydF4y2Ba));GydF4y2Ba
将图层转换为图层图并连接GydF4y2Ba小批量GydF4y2Ba
序列折叠层的输出到序列展开层的相应输入。GydF4y2Ba
Lgraph = LayerGraph(层);Lgraph = ConnectLayers(LAPHAGE,GydF4y2Ba“折叠/小批量大小”GydF4y2Ba,GydF4y2Ba“展开/ miniBatchSize”GydF4y2Ba);GydF4y2Ba
有关如何训练深度学习网络进行视频分类的示例,请参见GydF4y2Ba使用深度学习对视频进行分类GydF4y2Ba.GydF4y2Ba
通过使用输出模式插入额外的LSTM层,可以使LSTM网络更深GydF4y2Ba“顺序”GydF4y2Ba
在LSTM层之前。为了防止过度拟合,可以在LSTM层之后插入衰减层。GydF4y2Ba
对于序列到标签的分类网络,最后一层LSTM的输出模式必须为GydF4y2Ba“最后”GydF4y2Ba
.GydF4y2Ba
numFeatures = 12;numhiddentunits1 = 125;numhidendunits2 = 100;numclasses = 9;层= [GydF4y2Ba......GydF4y2BasequenceInputLayer numFeatures lstmLayer (numHiddenUnits1,GydF4y2Ba'OutputMode'GydF4y2Ba,GydF4y2Ba“顺序”GydF4y2Ba)dropoutLayer(0.2)第一层(numhiddenuts2,GydF4y2Ba'OutputMode'GydF4y2Ba,GydF4y2Ba“最后”GydF4y2Ba)dropoutLayer(0.2)fullyConnectedLayer(NumClass)softmaxLayer classificationLayer];GydF4y2Ba
对于序列到序列分类网络,最后一层LSTM的输出模式必须为GydF4y2Ba“顺序”GydF4y2Ba
.GydF4y2Ba
numFeatures = 12;numhiddentunits1 = 125;numhidendunits2 = 100;numclasses = 9;层= [GydF4y2Ba......GydF4y2BasequenceInputLayer numFeatures lstmLayer (numHiddenUnits1,GydF4y2Ba'OutputMode'GydF4y2Ba,GydF4y2Ba“顺序”GydF4y2Ba)dropoutLayer(0.2)第一层(numhiddenuts2,GydF4y2Ba'OutputMode'GydF4y2Ba,GydF4y2Ba“顺序”GydF4y2Ba)dropoutLayer(0.2)fullyConnectedLayer(NumClass)softmaxLayer classificationLayer];GydF4y2Ba
层GydF4y2Ba | 描述GydF4y2Ba |
---|---|
序列输入层将序列数据输入到网络。GydF4y2Ba | |
LSTM层在时间序列和序列数据中的时间步骤之间学习长期依赖性。GydF4y2Ba | |
双向LSTM(BiLSTM)层学习时间序列或序列数据的时间步长之间的双向长期依赖关系。当您希望网络在每个时间步长从完整的时间序列中学习时,这些依赖关系非常有用。GydF4y2Ba | |
GRU层学习时间序列和序列数据的时间步骤之间的依赖性。GydF4y2Ba | |
序列折叠层将一批图像序列转换为一批图像。使用序列折叠层对图像序列的时间步独立进行卷积运算。GydF4y2Ba | |
序列展开层还原输入数据在序列折叠后的序列结构。GydF4y2Ba | |
扁平层将输入的空间维度折叠为通道维度。GydF4y2Ba | |
|
单词嵌入层将单词索引映射到向量。GydF4y2Ba |
要对新数据进行分类或进行预测,请使用GydF4y2Ba分类GydF4y2Ba
和GydF4y2Ba预测GydF4y2Ba
.GydF4y2Ba
LSTM网络可以记住预测之间网络的状态。如果事先没有完整的时间序列,或者希望对长时间序列进行多个预测,则网络状态非常有用。GydF4y2Ba
要预测和分类时间序列的各个部分并更新网络状态,请使用GydF4y2Bapredictandanddatestate.GydF4y2Ba
和GydF4y2BaclassifyandupdateState.GydF4y2Ba
.重置预测之间的网络状态,使用GydF4y2Ba重置状态GydF4y2Ba
.GydF4y2Ba
有关如何预测序列未来时间步长的示例,请参见GydF4y2Ba基于深度学习的时间序列预测GydF4y2Ba.GydF4y2Ba
LSTM网络支持具有不同序列万博1manbetx长度的输入数据。当通过网络传递数据时,软件焊盘,截断或拆分序列,使每个迷你批处理中的所有序列具有指定的长度。您可以指定使用序列长度和用于使用该序列填充序列的值GydF4y2BaSequenceLengthGydF4y2Ba
和GydF4y2Ba序列填充值GydF4y2Ba
中的名称-值对参数GydF4y2BatrainingOptionsGydF4y2Ba
.GydF4y2Ba
训练网络后,使用相同的小批量大小和填充选项时,使用GydF4y2Ba分类GydF4y2Ba
,GydF4y2Ba预测GydF4y2Ba
,GydF4y2BaclassifyandupdateState.GydF4y2Ba
,GydF4y2Bapredictandanddatestate.GydF4y2Ba
,GydF4y2Ba激活GydF4y2Ba
功能。GydF4y2Ba
若要在填充或截断序列时减少填充或丢弃的数据量,请尝试按序列长度排序数据。若要按序列长度排序数据,请首先通过应用GydF4y2Ba尺寸(x,2)GydF4y2Ba
使用GydF4y2Ba赛尔芬GydF4y2Ba
.然后使用排序序列长度GydF4y2Ba排序GydF4y2Ba
,并使用第二个输出对原始序列重新排序。GydF4y2Ba
sequenceLengths = cellfun(@(X) size(X,2), XTrain);[sequenceLengthsSorted, idx] = (sequenceLengths)进行排序;XTrain = XTrain (idx);GydF4y2Ba
下图显示了条形图中已排序和未排序数据的序列长度。GydF4y2Ba
如果指定序列长度GydF4y2Ba“最长的”GydF4y2Ba
然后,软件填充序列,使迷你批批中的所有序列具有与Mini-Batch中最长序列相同的长度。此选项是默认值。GydF4y2Ba
下图说明了设置的效果GydF4y2Ba“SequenceLength”GydF4y2Ba
到GydF4y2Ba“最长的”GydF4y2Ba
.GydF4y2Ba
如果指定序列长度GydF4y2Ba“最短的”GydF4y2Ba
,然后软件截断序列,使小批量中的所有序列与该小批量中的最短序列具有相同的长度。序列中的剩余数据将被丢弃。GydF4y2Ba
下图说明了设置的效果GydF4y2Ba“SequenceLength”GydF4y2Ba
到GydF4y2Ba“最短的”GydF4y2Ba
.GydF4y2Ba
如果将序列长度设置为整数值,则软件将迷你批处理中的所有序列填充到指定长度的最近倍数,该倍数大于迷你批处理中的最长序列长度。然后,软件将每个序列分割成指定长度的更小的序列。如果发生分裂,则软件创建额外的小批量。GydF4y2Ba
如果完整序列不适合内存,请使用此选项。或者,您可以通过设置GydF4y2Ba'minibatchsize'GydF4y2Ba
选项GydF4y2BatrainingOptionsGydF4y2Ba
到一个更低的值。GydF4y2Ba
如果指定序列长度为正整数,则软件将在连续迭代中处理较小的序列。网络更新分裂序列之间的网络状态。GydF4y2Ba
下图说明了设置的效果GydF4y2Ba“SequenceLength”GydF4y2Ba
到五点。GydF4y2Ba
填充和截断的位置可能会影响训练、分类和预测精度。请尝试设置GydF4y2Ba'sequencdpaddingdirection'GydF4y2Ba
选项GydF4y2BatrainingOptionsGydF4y2Ba
到GydF4y2Ba“左”GydF4y2Ba
或GydF4y2Ba“对”GydF4y2Ba
并查看哪个最适合您的数据。GydF4y2Ba
因为LSTM层次处理序列数据一次一次步骤,当图层时GydF4y2Ba输出模式GydF4y2Ba
财产是GydF4y2Ba“最后”GydF4y2Ba
,最后时间步中的任何填充都会对图层输出产生负面影响。若要填充或截断左侧的序列数据,请设置GydF4y2Ba'sequencdpaddingdirection'GydF4y2Ba
选择GydF4y2Ba“左”GydF4y2Ba
.GydF4y2Ba
对于序列到序列网络(当GydF4y2Ba输出模式GydF4y2Ba
财产是GydF4y2Ba“顺序”GydF4y2Ba
对于每个LSTM层),第一时间步中的任何填充都会对早期时间步的预测产生负面影响。要填充或截断右侧的序列数据,请设置GydF4y2Ba'sequencdpaddingdirection'GydF4y2Ba
选择GydF4y2Ba“对”GydF4y2Ba
.GydF4y2Ba
下图说明了左侧和右侧的填充序列数据。GydF4y2Ba
下面的图说明了在左侧和右侧截断序列数据。GydF4y2Ba
要在训练时使用零中心标准化自动重新居中训练数据,请设置GydF4y2Ba归一化GydF4y2Ba
选择GydF4y2BasequenceInputLayerGydF4y2Ba
到GydF4y2Ba'Zerocenter'GydF4y2Ba
. 或者,可以通过首先计算所有序列的每个特征平均值和标准偏差来规范化序列数据。然后,对于每个训练观察,减去平均值并除以标准偏差。GydF4y2Ba
mu =均值([xtrain {:}],2);sigma = std([xtrain {:}],0,2);xtrain = cellfun(@(x)(x-mu)./ sigma,xtrain,GydF4y2Ba“UniformOutput”GydF4y2Ba、假);GydF4y2Ba
当数据太大而无法放入内存或在读取数据时执行特定操作时,使用数据存储来存储序列、时间序列和信号数据。GydF4y2Ba
要了解更多信息,请参阅GydF4y2Ba使用内存外序列数据的列车网络GydF4y2Ba和GydF4y2Ba使用深度学习对内存不足的文本数据进行分类GydF4y2Ba.GydF4y2Ba
通过使用GydF4y2Ba激活GydF4y2Ba
函数。要了解更多信息,请参阅GydF4y2Ba可视化LSTM网络的激活GydF4y2Ba.GydF4y2Ba
此图说明了时间序列的流程GydF4y2BaXGydF4y2Ba具有GydF4y2BaCGydF4y2Ba长度的特征(频道)GydF4y2BasGydF4y2Ba通过LSTM层。在图中,GydF4y2Ba 和GydF4y2Ba 表示输出(也称为GydF4y2Ba隐藏状态GydF4y2Ba)和GydF4y2Ba细胞状态GydF4y2Ba在时间步GydF4y2BaTGydF4y2Ba分别地GydF4y2Ba
第一个LSTM块使用网络的初始状态和序列的第一个时间步来计算第一个输出和更新的小区状态GydF4y2BaTGydF4y2Ba,块使用网络的当前状态GydF4y2Ba 以及序列的下一时间步,以计算输出和更新的单元状态GydF4y2Ba .GydF4y2Ba
层的状态由GydF4y2Ba隐藏状态GydF4y2Ba(又称GydF4y2Ba输出状态GydF4y2Ba)和GydF4y2Ba细胞状态GydF4y2Ba.隐藏的状态在时间步骤GydF4y2BaTGydF4y2Ba包含此时间步的LSTM层的输出。单元格状态包含从以前的时间步学习到的信息。在每个时间步,该层向单元格状态添加信息或从中删除信息。该层使用GydF4y2Ba盖茨GydF4y2Ba.GydF4y2Ba
以下组件控制层的单元状态和隐藏状态。GydF4y2Ba
组成部分GydF4y2Ba | 目的GydF4y2Ba |
---|---|
输入门(GydF4y2Ba我GydF4y2Ba)GydF4y2Ba | 单元状态更新的控制级别GydF4y2Ba |
忘记门(GydF4y2BaFGydF4y2Ba)GydF4y2Ba | 单元状态重置的控制级别(忘记)GydF4y2Ba |
细胞候选人(GydF4y2BaGGydF4y2Ba)GydF4y2Ba | 将信息添加到单元格状态GydF4y2Ba |
输出门(GydF4y2BaoGydF4y2Ba)GydF4y2Ba | 添加到隐藏状态的单元格状态的控制级别GydF4y2Ba |
此图显示了时间步长的数据流GydF4y2BaTGydF4y2Ba该图突出显示了闸门如何忘记、更新和输出单元格和隐藏状态。GydF4y2Ba
LSTM层的可读权重是输入权重GydF4y2BaWGydF4y2Ba(GydF4y2Ba输入权重GydF4y2Ba
),循环权重GydF4y2BaRGydF4y2Ba(GydF4y2Ba反复出现的重量GydF4y2Ba
),以及偏见GydF4y2BaBGydF4y2Ba(GydF4y2Ba偏见GydF4y2Ba
)。矩阵GydF4y2BaWGydF4y2Ba,GydF4y2BaRGydF4y2Ba,GydF4y2BaBGydF4y2Ba输入权重,复发重量和每个组分的偏置的级联。这些矩阵如下所连接:GydF4y2Ba
在哪里GydF4y2Ba我GydF4y2Ba,GydF4y2BaFGydF4y2Ba,GydF4y2BaGGydF4y2Ba,GydF4y2BaoGydF4y2Ba表示输入门,忘记门,单元候选和输出门。GydF4y2Ba
单元格在时间步长的状态GydF4y2BaTGydF4y2Ba是(谁)给的GydF4y2Ba
在哪里GydF4y2Ba 表示Hadamard积(向量的元素乘法)。GydF4y2Ba
隐藏的状态在时间步骤GydF4y2BaTGydF4y2Ba是(谁)给的GydF4y2Ba
在哪里GydF4y2Ba
表示状态激活功能。这GydF4y2Ba第一层GydF4y2Ba
默认情况下,函数使用双曲线切线函数(TanH)来计算状态激活功能。GydF4y2Ba
下面的公式描述了时间步长的分量GydF4y2BaTGydF4y2Ba.GydF4y2Ba
组成部分GydF4y2Ba | 公式GydF4y2Ba |
---|---|
输入门GydF4y2Ba | |
忘记门GydF4y2Ba | |
细胞的候选人GydF4y2Ba | |
输出门GydF4y2Ba |
在这些计算中,GydF4y2Ba
表示栅极激活功能。这GydF4y2Ba第一层GydF4y2Ba
默认情况下,函数使用GydF4y2Ba
计算门激活函数。GydF4y2Ba
[1] Hochreiter,S.和J.Schmidhuber。“长期短期记忆。”GydF4y2Ba神经计算GydF4y2Ba.卷。9,第8,199,997页,PP.1735-1780。GydF4y2Ba
激活GydF4y2Ba
|GydF4y2BabilstmLayerGydF4y2Ba
|GydF4y2BaclassifyandupdateState.GydF4y2Ba
|GydF4y2Ba压扁层GydF4y2Ba
|GydF4y2Ba泥鳅GydF4y2Ba
|GydF4y2Ba第一层GydF4y2Ba
|GydF4y2Bapredictandanddatestate.GydF4y2Ba
|GydF4y2Ba重置状态GydF4y2Ba
|GydF4y2Ba序列折叠层GydF4y2Ba
|GydF4y2BasequenceInputLayerGydF4y2Ba
|GydF4y2Ba序列展开层GydF4y2Ba
|GydF4y2BaWordembeddingLayer.GydF4y2Ba
(文本分析工具箱)GydF4y2Ba