sequenceInputLayer
序列输入层
描述
序列输入层向网络输入序列数据。
创建
属性
输入序列
InputSize
- - - - - -大小的输入
正整数|正整数向量
输入的大小,指定为正整数或正整数的向量。
对于向量序列输入,
InputSize
是一个对应于特征数量的标量。对于一维图像序列输入,
InputSize
是两个元素的向量吗(h c)
,在那里h
图像的高度和c
是图像的通道数。对于二维图像序列输入,
InputSize
是三个元素的向量吗[w c h]
,在那里h
是图像高度,w
是图像的宽度,和c
是图像的通道数。对于三维图像序列输入,
InputSize
是四个元素的向量吗[h w d c]
,在那里h
是图像高度,w
为图像宽度,d
是图像的深度,和c
是图像的通道数。
方法指定输入数据的最小序列长度最小长度
财产。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
最小长度
- - - - - -输入数据的最小序列长度
1
(默认)|正整数
输入数据的最小序列长度,指定为正整数。当用网络进行训练或预测时,如果输入数据小于最小长度
时间步进,软件就会抛出错误。
当您创建一个在时间维度下采样数据的网络时,您必须注意网络支持您的训练数据和任何用于预测的数据。一些深度学习层要求输入具有最小序列长度。例如,1-D卷积层要求输入至少具有与滤波器大小相同的时间步长。
当序列数据的时间序列在网络中传播时,序列长度会发生变化。例如,下采样操作(如1-D卷积)输出的数据比输入的时间步长更少。这意味着下采样操作可能导致网络中后面的层抛出错误,因为数据的序列长度比该层所需的最小长度短。
当你训练或组装一个网络时,软件会自动检查长度为1的序列是否可以在网络中传播。有些网络可能不支持长度为1的序列,但可以成功传播长度较长的序列。若要检查网络是否支持传播训练和预期的预测数据,请设置最小长度
属性设置为小于或等于数据的最小长度和预测数据的预期最小长度的值。
提示
若要防止卷积和池化层更改数据的大小,请设置填充
层的选项“相同”
或“因果”
.
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
归一化
- - - - - -数据归一化
“没有”
(默认)|“zerocenter”
|“zscore”
|“rescale-symmetric”
|“rescale-zero-one”
|函数处理
每次数据通过输入层向前传播时应用的数据归一化,指定为以下之一:
提示
默认情况下,该软件在使用trainNetwork
函数。为节省训练时的时间,请指定规范化所需的统计信息并设置ResetInputNormalization
选项trainingOptions
来0
(的意见
).
该软件将规范化应用于所有输入元素,包括填充值。
数据类型:字符
|字符串
|function_handle
NormalizationDimension
- - - - - -规范化维度
“汽车”
(默认)|“通道”
|“元素”
|“所有”
归一化维度,指定为以下之一:
“汽车”
—如果培训选项为假
并且指定任何规范化统计信息(的意思是
,StandardDeviation
,最小值
,或马克斯
),然后对与统计值匹配的维度进行归一化。否则,在训练时重新计算统计数据并应用通道规范化。“通道”
——Channel-wise正常化。“元素”
——Element-wise正常化。“所有”
-使用标量统计将所有值规范化。
数据类型:字符
|字符串
的意思是
- - - - - -零中心和z分数归一化的平均值
[]
(默认)|数字数组|数字标量
零中心和z分数归一化的平均值,指定为数值数组,或为空。
如果指定的意思是
属性,然后归一化
必须“zerocenter”
或“zscore”
.如果的意思是
是[]
,那么trainNetwork
函数计算平均值并忽略填充值。培养一个dlnetwork
对象使用自定义训练循环或组装网络而不使用assembleNetwork
函数时,必须设置的意思是
属性设置为数值标量或数值数组。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
StandardDeviation
- - - - - -标准偏差
[]
(默认)|数字数组|数字标量
用于z分数归一化的标准偏差,指定为数值数组、数值标量或空。
如果指定StandardDeviation
属性,然后归一化
必须“zscore”
.如果StandardDeviation
是[]
,那么trainNetwork
函数计算平均值并忽略填充值。培养一个dlnetwork
对象使用自定义训练循环或组装网络而不使用assembleNetwork
函数时,必须设置StandardDeviation
属性设置为数值标量或数值数组。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
最小值
- - - - - -可缩放的最小值
[]
(默认)|数字数组|数字标量
可缩放的最小值,指定为数值数组,或为空。
如果指定最小值
属性,然后归一化
必须“rescale-symmetric”
或“rescale-zero-one”
.如果最小值
是[]
,那么trainNetwork
函数计算最小值并忽略填充值。培养一个dlnetwork
对象使用自定义训练循环或组装网络而不使用assembleNetwork
函数时,必须设置最小值
属性设置为数值标量或数值数组。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
马克斯
- - - - - -可缩放的最大值
[]
(默认)|数字数组|数字标量
可缩放的最大值,指定为数值数组,或为空。
如果指定马克斯
属性,然后归一化
必须“rescale-symmetric”
或“rescale-zero-one”
.如果马克斯
是[]
,那么trainNetwork
函数计算最大值并忽略填充值。培养一个dlnetwork
对象使用自定义训练循环或组装网络而不使用assembleNetwork
函数时,必须设置马克斯
属性设置为数值标量或数值数组。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
SplitComplexInputs
- - - - - -标志将输入数据分为实分量和虚分量
0
(假
)(默认)|1
(真正的
)
此属性是只读的。
标志将输入数据分为实分量和虚分量,指定为以下值之一:
0
(假
) -不要分割输入数据。1
(真正的
) -将数据分割为实分量和虚分量。
当SplitComplexInputs
是1
,则该层输出的通道数量为输入数据的两倍。例如,如果输入数据是复值numChannels
通道,然后层输出数据与2 * numChannels
渠道,渠道1
通过numChannels
包含输入数据和的真实组件numChannels + 1
通过2 * numChannels
包含输入数据的虚构成分。如果输入数据是真实的,那么通道numChannels + 1
通过2 * numChannels
都是零。
将复值数据输入到网络中SplitComplexInputs
输入层的选项必须为1
.
有关演示如何使用复值数据训练网络的示例,请参见复值数据列车网络.
层
的名字
- - - - - -层的名字
”
(默认)|特征向量|字符串标量
层名,指定为字符向量或字符串标量。为层
数组输入,trainNetwork
,assembleNetwork
,layerGraph
,dlnetwork
函数自动为具有此名称的层分配名称”
.
数据类型:字符
|字符串
NumInputs
- - - - - -输入数量
0(默认)
此属性是只读的。
层的输入数。该层没有输入。
数据类型:双
InputNames
- - - - - -输入名字
{}
(默认)
此属性是只读的。
输入图层名称。该层没有输入。
数据类型:细胞
NumOutputs
- - - - - -数量的输出
1
(默认)
此属性是只读的。
层的输出数量。这个层只有一个输出。
数据类型:双
OutputNames
- - - - - -输出的名字
{“出”}
(默认)
此属性是只读的。
输出层的名称。这个层只有一个输出。
数据类型:细胞
例子
创建序列输入层
创建一个带有名称的序列输入层“seq1”
输入大小为12。
层= sequenceInputLayer (12,“名字”,“seq1”)
layer = SequenceInputLayer,属性:Name: 'seq1' InputSize: 12 MinLength: 1 SplitComplexInputs: 0 Hyperparameters NormalizationDimension: 'auto'
包含一个序列输入层层
数组中。
inputSize = 12;numHiddenUnits = 100;numClasses = 9;层= [...sequenceInputLayer inputSize lstmLayer (numHiddenUnits,“OutputMode”,“最后一次”fulllyconnectedlayer (numClasses)
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 SplitComplexInputs: 0 Hyperparameters NormalizationDimension: 'auto'
序列分类训练网络
训练深度学习LSTM网络进行序列到标签分类。
按照[1]和[2]中描述的方式加载日语元音数据集。XTrain
是包含270个不同长度序列的单元阵列,有12个特征对应于LPC倒谱系数。Y
是标签1,2,…,9的分类向量。的条目XTrain
矩阵有12行(一行表示每个特征)和不同数量的列(一列表示每个时间步)。
[XTrain, YTrain] = japaneseVowelsTrainData;
在一个情节中想象第一个时间序列。每一行对应一个特征。
图绘制(XTrain{1}”)标题(“训练观察1”) numFeatures = size(XTrain{1},1);传奇(“特性”+字符串(1:numFeatures),“位置”,“northeastoutside”)
定义LSTM网络架构。指定输入大小为12(输入数据的特征数量)。指定一个LSTM层有100个隐藏单元,并输出序列的最后一个元素。最后,指定9个类,包括一个大小为9的完全连接层,然后是一个softmax层和一个分类层。
inputSize = 12;numHiddenUnits = 100;numClasses = 9;层= [...sequenceInputLayer inputSize lstmLayer (numHiddenUnits,“OutputMode”,“最后一次”fulllyconnectedlayer (numClasses)
2”LSTM LSTM与100个隐藏单元3”全连接9全连接层4”Softmax Softmax 5”分类输出crossentropyex
指定培训选项。指定求解器为“亚当”
而且“GradientThreshold”
为1。将迷你批处理大小设置为27,并将最大epoch数设置为70。
因为小批次的序列较短,CPU更适合训练。集“ExecutionEnvironment”
来“cpu”
.在GPU上训练,如果可用,设置“ExecutionEnvironment”
来“汽车”
(默认值)。
maxEpochs = 70;miniBatchSize = 27个;选择= trainingOptions (“亚当”,...“ExecutionEnvironment”,“cpu”,...“MaxEpochs”maxEpochs,...“MiniBatchSize”miniBatchSize,...“GradientThreshold”,1,...“详细”假的,...“阴谋”,“训练进步”);
使用指定的培训选项对LSTM网络进行培训。
网= trainNetwork (XTrain、YTrain层,选择);
加载测试集并将序列分类到扬声器中。
[XTest,欧美]= japaneseVowelsTestData;
对测试数据进行分类。指定与培训时相同的小批大小。
XTest YPred =分类(净,“MiniBatchSize”, miniBatchSize);
计算预测的分类精度。
acc = sum(YPred == YTest)./numel(YTest)
acc = 0.9459
分类LSTM网络
创建用于序列到标签分类的LSTM网络时,需要创建包含序列输入层、LSTM层、全连通层、softmax层和分类输出层的层数组。
将序列输入层的大小设置为输入数据的特征数量。将全连接层的大小设置为类的数量。您不需要指定序列长度。
对于LSTM层,需要指定隐藏单元数和输出模式“最后一次”
.
numFeatures = 12;numHiddenUnits = 100;numClasses = 9;层= [...sequenceInputLayer numFeatures lstmLayer (numHiddenUnits,“OutputMode”,“最后一次”) fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer];
有关如何训练LSTM网络进行序列到标签分类和对新数据进行分类的示例,请参见利用深度学习进行序列分类.
在创建序列到序列分类的LSTM网络时,使用与序列到标签分类相同的架构,但LSTM层的输出模式设置为“序列”
.
numFeatures = 12;numHiddenUnits = 100;numClasses = 9;层= [...sequenceInputLayer numFeatures lstmLayer (numHiddenUnits,“OutputMode”,“序列”) fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer];
回归LSTM网络
为了创建序列对一回归的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层之前。为了防止过拟合,可以在LSTM层之后插入dropout层。
对于序列到标签的分类网络,最后一层LSTM的输出模式必须为“最后一次”
.
numFeatures = 12;numHiddenUnits1 = 125;numHiddenUnits2 = 100;numClasses = 9;层= [...sequenceInputLayer numFeatures lstmLayer (numHiddenUnits1,“OutputMode”,“序列”) dropoutLayer (0.2) lstmLayer (numHiddenUnits2“OutputMode”,“最后一次”) dropoutLayer(0.2) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
对于序列到序列的分类网络,最后一层LSTM的输出模式必须为“序列”
.
numFeatures = 12;numHiddenUnits1 = 125;numHiddenUnits2 = 100;numClasses = 9;层= [...sequenceInputLayer numFeatures lstmLayer (numHiddenUnits1,“OutputMode”,“序列”) dropoutLayer (0.2) lstmLayer (numHiddenUnits2“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 (lgraph,“折/ miniBatchSize”,“展开/ miniBatchSize”);
查看最终的网络架构情节
函数。
图绘制(lgraph)
参考文献
[1]工藤先生,富山先生,Shimbo先生。“利用穿过区域的多维曲线分类”。模式识别的字母.第20卷第11-13期,第1103-1111页。
[2]UCI机器学习库:日语元音数据集.https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
扩展功能
C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。
对于矢量序列输入,在代码生成过程中特征的数量必须是恒定的。
不支持代码生成
“归一化”
使用函数句柄指定。代码生成不支持复杂输入,也不支持
“SplitComplexInputs”
选择。
GPU的代码生成
使用GPU Coder™为NVIDIA GPU生成CUDA®代码。
使用注意事项和限制:
生成CUDA®或c++代码使用GPU Coder™,你必须首先构建和训练一个深度神经网络。一旦对网络进行了训练和评估,就可以配置代码生成器来生成代码,并在使用NVIDIA的平台上部署卷积神经网络®或手臂®GPU处理器。有关更多信息,请参见GPU Coder深度学习(GPU编码器).
对于这一层,您可以生成利用NVIDIA CUDA深度神经网络库(cuDNN)或NVIDIA TensorRT™高性能推理库的代码。
cuDNN库支持向量和二维图像序列。TensorRT库只支持向量输入序列。
对于矢量序列输入,在代码生成过程中特征的数量必须是恒定的。
对于图像序列输入,在代码生成期间,高度、宽度和通道数量必须是一个常数。
不支持代码生成
“归一化”
使用函数句柄指定。代码生成不支持复杂输入,也不支持
“SplitComplexInputs”
选择。
版本历史
介绍了R2017bR2020a:trainNetwork
在计算规范化统计信息时忽略填充值
从R2020a开始,trainNetwork
在计算规范化统计信息时忽略填充值。这意味着归一化
选项sequenceInputLayer
现在让训练对数据操作不变,例如,“zerocenter”
归一化现在意味着训练结果与数据的平均值是不变的。
如果在填充序列上进行训练,那么在早期版本中计算的归一化因子可能不同,并可能产生不同的结果。
R2019b:sequenceInputLayer
默认情况下,它使用通道方面的归一化来进行零中心归一化
从R2019b开始,sequenceInputLayer
默认情况下,它使用通道方面的归一化来进行零中心归一化。在以前的版本中,这一层使用基于元素的规范化。要复制此行为,请设置NormalizationDimension
这个图层的选项“元素”
.
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。