主要内容

sequenceInputLayer

序列输入层

描述

序列输入层向网络输入序列数据。

创建

描述

= sequenceInputLayer (inputSize创建序列输入层并设置InputSize财产。

例子

= sequenceInputLayer (inputSize名称,值设置可选的最小长度归一化的意思是,的名字属性使用名称-值对。可以指定多个名称-值对。将每个属性名用单引号括起来。

属性

全部展开

输入序列

输入的大小,指定为正整数或正整数的向量。

  • 对于向量序列输入,InputSize是与特征数对应的标量。

  • 对于一维图像序列输入,InputSize向量是由两个元素构成的吗(h c),在那里h图像的高度和c是图像的通道数。

  • 对于二维图像序列输入,InputSize向量是三个元素的吗[h w c],在那里h是图像高度,w是图像宽度,和c是图像的通道数。

  • 对于三维图像序列输入,InputSize向量是四个元素的吗[h w d c],在那里h是图像高度,w是图像宽度,d是图像深度,和c是图像的通道数。

要指定输入数据的最小序列长度,请使用最小长度财产。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

输入数据的最小序列长度,指定为正整数。当使用网络进行训练或预测时,如果输入数据小于最小长度时间步长,然后软件抛出一个错误。

当你创建一个在时间维度下采样数据的网络时,你必须注意网络支持你的训练数据和任何用于预测的数据。万博1manbetx一些深度学习层要求输入具有最小序列长度。例如,1-D卷积层要求输入至少具有与滤波器大小相同的时间步长。

当序列数据的时间序列在网络中传播时,序列长度可以改变。例如,1-D卷积等下采样操作可以以比输入更少的时间步长输出数据。这意味着向下采样操作可能导致网络中后面的层抛出错误,因为数据的序列长度小于该层所需的最小长度。

当你训练或组装一个网络时,软件会自动检查长度为1的序列是否可以在网络中传播。一些网络可能不支持长度为1的序列,但可以成功地传万博1manbetx播长度更长的序列。若要检查网络是否支持传播训练数据和预期预测数据,万博1manbetx请设置最小长度属性设置为小于或等于数据的最小长度和预测数据的预期最小长度的值。

提示

要防止卷积层和池化层改变数据的大小,请设置填充图层的选项“相同”“因果”

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

每次数据通过输入层向前传播时应用数据规范化,指定为以下之一:

  • “zerocenter”-减去指定的平均值的意思是

  • “zscore”-减去指定的平均值的意思是然后除以StandardDeviation

  • “rescale-symmetric”-使用指定的最小值和最大值将输入重新缩放到范围[- 1,1]最小值而且马克斯,分别。

  • “rescale-zero-one”-使用指定的最小值和最大值将输入重新缩放到范围[0,1]最小值而且马克斯,分别。

  • “没有”—不要对输入数据进行归一化。

  • function句柄-使用指定的函数规范化数据。函数必须符合这个形式Y = func(X),在那里X输入数据和输出数据吗Y是规范化的数据。

提示

默认情况下,该软件在训练时自动计算归一化统计数据。为节省训练时的时间,请指定规范化所需的统计信息并设置“ResetInputNormalization”选项trainingOptions

如果输入数据包含填充,则该层在规范化输入数据时忽略填充值。

数据类型:字符|字符串|function_handle

归一化维度,指定为以下之一:

  • “汽车”—如果培训选项为您可以指定任何规范化统计信息(的意思是StandardDeviation最小值,或马克斯),然后在与统计数据相匹配的维度上归一化。否则,在训练时重新计算统计数据并应用通道的归一化。

  • “通道”-通道的标准化。

  • “元素”-元素的标准化。

  • “所有”-使用标量统计数据规范化所有值。

数据类型:字符|字符串

0 -center和z-score归一化的平均值,指定为数值数组,或为空。

  • 对于向量序列输入,的意思是一定是InputSize-by-1每个通道的均值向量,数字标量,或[]

  • 对于二维图像序列输入,的意思是必须是相同大小的数字数组InputSize,一个1乘1乘-InputSize (3)每个通道的均值数组、数值标量或[]

  • 对于三维图像序列输入,的意思是必须是相同大小的数字数组InputSize,一个1 × 1 × 1 × -InputSize (4)每个通道的均值数组、数值标量或[]

如果您指定的意思是属性,然后归一化必须“zerocenter”“zscore”.如果的意思是[],然后软件计算训练时间的平均值。

您可以在未经训练的情况下创建网络时设置此属性(例如,在使用assembleNetwork).

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

用于z分数归一化的标准偏差,指定为数值数组、数值标量或空值。

  • 对于向量序列输入,StandardDeviation一定是InputSize-by-1每个通道的标准偏差向量,数字标量,或[]

  • 对于二维图像序列输入,StandardDeviation必须是相同大小的数字数组InputSize,一个1乘1乘-InputSize (3)每个通道的标准偏差数组、数字标量或[]

  • 对于三维图像序列输入,StandardDeviation必须是相同大小的数字数组InputSize,一个1 × 1 × 1 × -InputSize (4)每个通道的标准偏差数组,或数值标量。

如果您指定StandardDeviation属性,然后归一化必须“zscore”.如果StandardDeviation[],然后软件计算训练时的标准差。

您可以在未经训练的情况下创建网络时设置此属性(例如,在使用assembleNetwork).

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

用于重新缩放的最小值,指定为数值数组或为空。

  • 对于向量序列输入,最小值一定是InputSize-by-1每个通道的均值向量或数字标量。

  • 对于二维图像序列输入,最小值必须是相同大小的数字数组InputSize,一个1乘1乘-InputSize (3)每个通道的最小值数组,或数值标量。

  • 对于三维图像序列输入,最小值必须是相同大小的数字数组InputSize,一个1 × 1 × 1 × -InputSize (4)每个通道的最小值数组,或数值标量。

如果您指定最小值属性,然后归一化必须“rescale-symmetric”“rescale-zero-one”.如果最小值[],然后软件计算训练时的最小值。

您可以在未经训练的情况下创建网络时设置此属性(例如,在使用assembleNetwork).

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

用于重新缩放的最大值,指定为数值数组或为空。

  • 对于向量序列输入,马克斯一定是InputSize-by-1每个通道的均值向量或数字标量。

  • 对于二维图像序列输入,马克斯必须是相同大小的数字数组InputSize,一个1乘1乘-InputSize (3)每个通道的最大值数组、数值标量或[]

  • 对于三维图像序列输入,马克斯必须是相同大小的数字数组InputSize,一个1 × 1 × 1 × -InputSize (4)每个通道的最大值数组、数值标量或[]

如果您指定马克斯属性,然后归一化必须“rescale-symmetric”“rescale-zero-one”.如果马克斯[],然后软件计算训练时的最大值。

您可以在未经训练的情况下创建网络时设置此属性(例如,在使用assembleNetwork).

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

层名,指定为字符向量或字符串标量。为数组输入时,trainNetworkassembleNetworklayerGraph,dlnetwork函数自动为具有name的层分配名称

数据类型:字符|字符串

该层的输入数量。该层没有输入。

数据类型:

输入层的名称。该层没有输入。

数据类型:细胞

此属性是只读的。

层的输出数量。这个图层只有一个输出。

数据类型:

此属性是只读的。

输出层的名称。这个图层只有一个输出。

数据类型:细胞

例子

全部折叠

用名称创建一个序列输入层“seq1”输入大小为12。

层= sequenceInputLayer(12,“名字”“seq1”
层= SequenceInputLayer属性:名称:'seq1' InputSize: 12 MinLength: 1超参数归一化:'none' NormalizationDimension: 'auto'

中包含序列输入层数组中。

inputSize = 12;numHiddenUnits = 100;numClasses = 9;层= [...sequenceInputLayer inputSize lstmLayer (numHiddenUnits,“OutputMode”“最后一次”fullyConnectedLayer(numClasses) softmaxLayer classificationLayer
2”LSTM LSTM 100个隐藏单元3”全连接9全连接层4”Softmax Softmax 5”分类输出crossentropyex

创建一个名称为224-224 RGB图像序列的序列输入层“seq1”

layer = sequenceInputLayer([224 224 3],“名字”“seq1”
Name: 'seq1' InputSize: [224 224 3] MinLength: 1超参数归一化:'none' NormalizationDimension: 'auto'

训练深度学习LSTM网络进行序列到标签分类。

按照[1]和[2]中的描述加载Japanese Vowels数据集。XTrain是包含270个不同长度序列的单元阵列,其中12个特征对应于LPC倒谱系数。Y是标签1,2,…,9的分类向量。中的条目XTrain是有12行(每个特征一行)和不同数量列(每个时间步骤一列)的矩阵。

[XTrain,YTrain] =日本evowelstraindata;

把第一个时间序列想象成一个图形。每一行对应一个特征。

图形图(XTrain{1}')“训练观察1”) numFeatures = size(XTrain{1},1);传奇(“特性”+字符串(1:numFeatures),“位置”“northeastoutside”

图中包含一个轴对象。标题为Training Observation 1的坐标轴对象包含12个类型为line的对象。这些对象分别代表特征1、特征2、特征3、特征4、特征5、特征6、特征7、特征8、特征9、特征10、特征11、特征12。

定义LSTM网络体系结构。将输入大小指定为12(输入数据的特征数量)。指定一个LSTM层有100个隐藏单元,并输出序列的最后一个元素。最后,指定9个类,包括大小为9的全连接层,然后是softmax层和分类层。

inputSize = 12;numHiddenUnits = 100;numClasses = 9;层= [...sequenceInputLayer inputSize lstmLayer (numHiddenUnits,“OutputMode”“最后一次”fullyConnectedLayer(numClasses) softmaxLayer classificationLayer
2”LSTM LSTM 100个隐藏单元3”全连接9全连接层4”Softmax Softmax 5”分类输出crossentropyex

指定培训选项。指定求解器为“亚当”而且“GradientThreshold”为1。将mini-batch大小设置为27,并将最大epoch数设置为70。

因为迷你批的数量小,序列短,所以CPU更适合训练。集“ExecutionEnvironment”“cpu”.要在GPU上训练,如果可用,请设置“ExecutionEnvironment”“汽车”(默认值)。

maxEpochs = 70;miniBatchSize = 27;选项= trainingOptions(“亚当”...“ExecutionEnvironment”“cpu”...“MaxEpochs”maxEpochs,...“MiniBatchSize”miniBatchSize,...“GradientThreshold”,1,...“详细”假的,...“阴谋”“训练进步”);

使用指定的培训选项对LSTM网络进行培训。

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

图训练进度(26-Feb-2022 11:36:08)包含2个axis对象和另一个类型为uigridlayout的对象。坐标轴对象1包含11个类型为patch、text、line的对象。坐标轴对象2包含11个类型为patch、text、line的对象。

加载测试集并将序列分类到扬声器中。

[XTest,YTest] =日本evowelstestdata;

分类测试数据。指定用于训练的相同的小批大小。

YPred = category (net,XTest,“MiniBatchSize”, miniBatchSize);

计算预测的分类精度。

acc = sum(YPred == YTest)./ nummel (YTest)
Acc = 0.9595

要创建用于序列到标签分类的LSTM网络,请创建一个层数组,其中包含序列输入层、LSTM层、全连接层、softmax层和分类输出层。

将序列输入层的大小设置为输入数据的特征数量。将全连接层的大小设置为类的数量。您不需要指定序列长度。

对于LSTM层,指定隐藏单元的数量和输出模式“最后一次”

numFeatures = 12;numHiddenUnits = 100;numClasses = 9;层= [...sequenceInputLayer numFeatures lstmLayer (numHiddenUnits,“OutputMode”“最后一次”) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];

有关演示如何训练LSTM网络进行序列到标签分类和对新数据进行分类的示例,请参见使用深度学习的序列分类

如果要创建用于序列到序列分类的LSTM网络,请使用与序列到标签分类相同的架构,但将LSTM层的输出模式设置为“序列”

numFeatures = 12;numHiddenUnits = 100;numClasses = 9;层= [...sequenceInputLayer numFeatures lstmLayer (numHiddenUnits,“OutputMode”“序列”) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];

要创建用于序列对一回归的LSTM网络,请创建一个包含序列输入层、LSTM层、全连接层和回归输出层的层数组。

将序列输入层的大小设置为输入数据的特征数量。将全连接层的大小设置为响应的数量。您不需要指定序列长度。

对于LSTM层,指定隐藏单元的数量和输出模式“最后一次”

numFeatures = 12;numHiddenUnits = 125;numResponses = 1;层= [...sequenceInputLayer numFeatures lstmLayer (numHiddenUnits,“OutputMode”“最后一次”) fullyConnectedLayer(numResponses) regressionLayer];

要创建用于序列到序列回归的LSTM网络,请使用与序列到一回归相同的体系结构,但将LSTM层的输出模式设置为“序列”

numFeatures = 12;numHiddenUnits = 125;numResponses = 1;层= [...sequenceInputLayer numFeatures lstmLayer (numHiddenUnits,“OutputMode”“序列”) fullyConnectedLayer(numResponses) regressionLayer];

有关演示如何训练LSTM网络进行序列到序列回归和对新数据进行预测的示例,请参见使用深度学习的序列到序列回归

通过使用输出模式插入额外的LSTM层,可以使LSTM网络更深“序列”在LSTM层之前。为了防止过拟合,可以在LSTM层之后插入dropout层。

对于序列到标签的分类网络,最后一层LSTM的输出模式必须为“最后一次”

numFeatures = 12;numhiddenunit1 = 125;numhiddenunit2 = 100;numClasses = 9;层= [...sequenceInputLayer numFeatures lstmLayer (numHiddenUnits1,“OutputMode”“序列”lstmLayer(numhiddenunit2)“OutputMode”“最后一次”) dropoutLayer(0.2) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];

对于序列到序列的分类网络,最后一层LSTM的输出模式必须为“序列”

numFeatures = 12;numhiddenunit1 = 125;numhiddenunit2 = 100;numClasses = 9;层= [...sequenceInputLayer numFeatures lstmLayer (numHiddenUnits1,“OutputMode”“序列”lstmLayer(numhiddenunit2)“OutputMode”“序列”) dropoutLayer(0.2) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];

为包含图像序列的数据(如视频和医学图像数据)创建深度学习网络。

  • 要将图像序列输入到网络中,请使用序列输入层。

  • 为了独立地对每个时间步应用卷积运算,首先使用序列折叠层将图像序列转换为图像数组。

  • 若要在执行这些操作后恢复序列结构,请使用序列展开层将此图像数组转换回图像序列。

  • 要将图像转换为特征向量,请使用压平层。

然后,您可以将向量序列输入到LSTM和BiLSTM层。

定义网络架构

创建一个分类LSTM网络,将28 × 28灰度图像序列分类为10类。

定义如下网络架构:

  • 输入大小为的序列输入层[28 28 1]

  • 一个带有20个5 × 5滤波器的卷积、批归一化和ReLU层块。

  • 一个带有200个隐藏单元的LSTM层,只输出最后一个时间步长。

  • 一个大小为10的全连接层(类的数量),然后是一个softmax层和一个分类层。

为了在每个时间步上独立地执行卷积运算,在卷积层之前包含一个序列折叠层。LSTM层期望矢量序列输入。为了恢复序列结构并将卷积层的输出重塑为特征向量序列,在卷积层和LSTM层之间插入序列展开层和平坦层。

inputSize = [28 28 1];filterSize = 5;numFilters = 20;numHiddenUnits = 200;numClasses = 10;层= [...sequenceInputLayer (inputSize“名字”“输入”) sequenceFoldingLayer (“名字”“折”) convolution2dLayer (filterSize numFilters,“名字”“conv”) batchNormalizationLayer (“名字”bn的) reluLayer (“名字”“relu”) sequenceUnfoldingLayer (“名字”“展开”) flattenLayer (“名字”“平”) lstmLayer (numHiddenUnits“OutputMode”“最后一次”“名字”“lstm”) fullyConnectedLayer (numClasses“名字”“俱乐部”) softmaxLayer (“名字”“softmax”) classificationLayer (“名字”“分类”));

将图层转换为图层图并连接miniBatchSize序列折叠层的输出到序列展开层的相应输入。

lgraph = layerGraph(图层);lgraph = connectLayers(“折/ miniBatchSize”“展开/ miniBatchSize”);

工具查看最终的网络架构情节函数。

图绘制(lgraph)

图中包含一个轴对象。axis对象包含一个graphplot类型的对象。

参考文献

[1]工藤M.,富山J.,辛波M.。“使用穿过区域的多维曲线分类”模式识别信.第20卷,11-13号,第1103-1111页。

[2]UCI机器学习库:日语元音数据集.https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

扩展功能

版本历史

在R2017b中引入

全部展开

R2020a的行为发生了变化

在未来的版本中改变行为