lstmLayer
长短期记忆层
描述
LSTM层学习时间序列和序列数据中时间步长之间的长期依赖关系。
该层执行加法相互作用,这可以帮助改善训练过程中长序列的梯度流动。
创建
属性
LSTM
NumHiddenUnits
- - - - - -隐藏单元数量
正整数
此属性是只读的。
隐藏单元数(也称为隐藏大小),指定为正整数。
隐藏单元的数量对应于时间步骤之间记住的信息量(隐藏状态)。隐藏状态可以包含来自之前所有时间步骤的信息,而不管序列长度如何。如果隐藏单元的数量太大,那么该层可能会过度拟合训练数据。这个值可以从几十到几千不等。
隐藏状态不限制迭代中处理的时间步数。方法时将序列拆分为更小的序列trainNetwork函数,使用SequenceLength培训的选择。
数据类型:单|双|int8|int16|int32|int64|uint8|uint16|uint32|uint64
OutputMode
- - - - - -输出模式
“序列”
(默认)|“最后一次”
此属性是只读的。
输出模式,指定为下列之一:
“序列”—输出完整的序列。
“最后一次”—输出序列的最后一个时间步。
HasStateInputs
- - - - - -层的状态输入标志
0(假)(默认)|1(真正的)
此属性是只读的。
层的状态输入的标志,指定为0(虚假的)或1(真正的)。
如果HasStateInputs属性是0(false),则该层有一个带有name的输入“在”,对应于输入数据。在本例中,该层使用HiddenState而且CellState属性用于层操作。
如果HasStateInputs属性是1(true),则该层有三个带有名称的输入“在”,“隐藏”,“细胞”,分别对应输入数据、隐藏状态和单元格状态。在这种情况下,该层使用传递给这些输入的值进行层操作。如果HasStateInputs是1(正确),然后HiddenState而且CellState属性必须为空。
数据类型:单|双|int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑
HasStateOutputs
- - - - - -层的状态输出标志
0(假)(默认)|1(真正的)
此属性是只读的。
层的状态输出的标志,指定为0(虚假的)或1(真正的)。
如果HasStateOutputs属性是0(false),则该层有一个带有name的输出“出”,对应输出数据。
如果HasStateOutputs属性是1(true),则该层有三个带有名称的输出“出”,“隐藏”,“细胞”,分别对应输出数据、隐藏状态和单元格状态。在这种情况下,该层还输出在层操作期间计算的状态值。
数据类型:单|双|int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑
InputSize
- - - - - -输入的大小
“汽车”
(默认)|正整数
此属性是只读的。
输入大小,指定为正整数或“汽车”.如果InputSize是“汽车”,然后软件在训练时自动分配输入大小。
数据类型:双|字符|字符串
激活
StateActivationFunction
- - - - - -激活函数更新单元格和隐藏状态
的双曲正切
(默认)|“softsign”
此属性是只读的。
激活函数更新单元格和隐藏状态,指定为以下之一:
的双曲正切—使用双曲正切函数tanh。
“softsign”—使用softsign功能
.
该层使用该选项作为函数
在计算中更新单元格和隐藏状态。有关如何在LSTM层中使用激活函数的更多信息,请参见长短期记忆层.
GateActivationFunction
- - - - - -激活功能应用于闸门
“乙状结肠”
(默认)|“hard-sigmoid”
此属性是只读的。
激活函数应用于门,指定为以下之一:
“乙状结肠”—使用sigmoid函数
.
“hard-sigmoid”-使用硬sigmoid函数
该层使用该选项作为函数
在计算层栅时。
状态
CellState
- - - - - -细胞状态
数值向量
要在层操作中使用的单元格状态,指定为NumHiddenUnits-by-1数值向量。此值对应于数据传递给层时的初始单元格状态。
属性手动设置此属性后,调用resetState函数将单元格状态设置为此值。
如果HasStateInputs是真正的,则CellState属性必须为空。
HiddenState
- - - - - -隐藏状态
数值向量
在层操作中使用的隐藏状态,指定为NumHiddenUnits-by-1数值向量。这个值对应于数据传递给该层时的初始隐藏状态。
属性手动设置此属性后,调用resetState函数将隐藏状态设置为此值。
如果HasStateInputs是真正的,则HiddenState属性必须为空。
参数和初始化
InputWeightsInitializer
- - - - - -函数初始化输入权重
“glorot”
(默认)|“他”
|“正交”
|“narrow-normal”|“零”|“的”|函数处理
函数初始化输入权重,指定为以下之一:
“glorot”-使用Glorot初始化器初始化输入权重[4](也称为Xavier初始化器)。格洛洛特初始化器独立地从均值和方差为零的均匀分布中采样2/(InputSize + numOut),在那里numOut = 4*NumHiddenUnits.
“他”-使用He初始化式初始化输入权重[5].He初始化器样本来自均值和方差为零的正态分布2 / InputSize.
“正交”-初始化输入权重问的QR分解给出的正交矩阵Z=问R对于一个随机矩阵Z从单位正态分布抽样。[6]
“narrow-normal”-通过从均值为0,标准差为0.01的正态分布中独立采样,初始化输入权重。
“零”-用0初始化输入权重。
“的”-用1初始化输入权重。
函数句柄——使用自定义函数初始化输入权重。如果指定了函数句柄,则该函数必须为权重= func(sz),在那里深圳是输入权重的大小。
时,该层才初始化输入权重InputWeights属性为空。
数据类型:字符|字符串|function_handle
RecurrentWeightsInitializer
- - - - - -函数初始化循环权重
“正交”
(默认)|“glorot”
|“他”
|“narrow-normal”|“零”|“的”|函数处理
函数初始化循环权重,指定为以下之一:
“正交”-初始化循环权重问的QR分解给出的正交矩阵Z=问R对于一个随机矩阵Z从单位正态分布抽样。[6]
“glorot”-使用Glorot初始化器初始化循环权重[4](也称为Xavier初始化器)。格洛洛特初始化器独立地从均值和方差为零的均匀分布中采样2/(numIn + numOut),在那里numIn = NumHiddenUnits而且numOut = 4*NumHiddenUnits.
“他”-使用He初始化式初始化循环权重[5].He初始化器样本来自均值和方差为零的正态分布2 / NumHiddenUnits.
“narrow-normal”-通过从均值为0,标准差为0.01的正态分布中独立采样,初始化循环权重。
“零”-用0初始化循环权重。
“的”-用1初始化循环权重。
函数句柄——使用自定义函数初始化循环权重。如果指定了函数句柄,则该函数必须为权重= func(sz),在那里深圳是循环权值的大小。
时,层才初始化循环权重RecurrentWeights属性为空。
数据类型:字符|字符串|function_handle
BiasInitializer
- - - - - -函数初始化偏置
“unit-forget-gate”
(默认)|“narrow-normal”
|“的”
|函数处理
函数初始化偏差,指定为以下之一:
“unit-forget-gate”-初始化遗忘门偏差为1,其余偏差为0。
“narrow-normal”-通过从均值为0,标准差为0.01的正态分布中独立抽样来初始化偏差。
“的”-用1初始化偏差。
函数句柄-使用自定义函数初始化偏置。如果指定了函数句柄,则该函数必须为偏差= func(sz),在那里深圳是偏差的大小。
时,层才初始化偏差偏见属性为空。
数据类型:字符|字符串|function_handle
InputWeights
- - - - - -输入重量
[]
(默认)|矩阵
输入权重,以矩阵形式指定。
输入权值矩阵是LSTM层中组件(门)的四个输入权值矩阵的拼接。这四个矩阵垂直排列顺序如下:
输入门
忘记门
细胞的候选人
输出门
输入权重是可学习的参数。当训练一个网络时,如果InputWeights非空吗trainNetwork使用InputWeights属性作为初始值。如果InputWeights那么是空的trainNetwork所指定的初始化式InputWeightsInitializer.
在训练时,InputWeights是一个4 * NumHiddenUnits——- - - - - -InputSize矩阵。
RecurrentWeights
- - - - - -复发性权重
[]
(默认)|矩阵
循环权值,用矩阵表示。
递归权矩阵是LSTM层中组件(门)的四个递归权矩阵的连接。这四个矩阵按以下顺序垂直连接:
输入门
忘记门
细胞的候选人
输出门
循环权值是可学习的参数。当训练一个网络时,如果RecurrentWeights非空吗trainNetwork使用RecurrentWeights属性作为初始值。如果RecurrentWeights那么是空的trainNetwork所指定的初始化式RecurrentWeightsInitializer.
在训练时间RecurrentWeights是一个4 * NumHiddenUnits——- - - - - -NumHiddenUnits矩阵。
偏见
- - - - - -层的偏见
[]
(默认)|数值向量
LSTM层的层偏置,指定为数值向量。
偏置向量是LSTM层中组件(门)的四个偏置向量的拼接。这四个向量垂直连接的顺序如下:
输入门
忘记门
细胞的候选人
输出门
层偏差是可学习参数。当你训练一个网络时,如果偏见非空吗trainNetwork使用偏见属性作为初始值。如果偏见那么是空的trainNetwork所指定的初始化式BiasInitializer.
在训练时,偏见是一个4 * NumHiddenUnits-by-1数值向量。
学习率和正则化
InputWeightsLearnRateFactor
- - - - - -输入权重的学习率因子
1(默认)|数字标量|1乘4的数字向量
输入权重的学习率因子,指定为数值标量或1 × 4数值向量。
该软件将该因子乘以全局学习率,以确定该层输入权重的学习率因子。例如,如果InputWeightsLearnRateFactor为2,则该层输入权值的学习率因子为当前全局学习率的两倍。属性指定的设置来确定全局学习率trainingOptions函数。
中四个单独矩阵的学习率因子的值InputWeights,指定一个1 × 4向量。的条目InputWeightsLearnRateFactor对应以下的学习率因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有矩阵指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
RecurrentWeightsLearnRateFactor
- - - - - -循环权重的学习率因子
1(默认)|数字标量|1乘4的数字向量
循环权重的学习率因子,指定为数值标量或1 × 4数值向量。
该软件将该因子乘以全局学习率,以确定该层的循环权重的学习率。例如,如果RecurrentWeightsLearnRateFactor为2,则该层的循环权重的学习率是当前全局学习率的两倍。属性指定的设置来确定全局学习率trainingOptions函数。
中四个单独矩阵的学习率因子的值RecurrentWeights,指定一个1 × 4向量。的条目RecurrentWeightsLearnRateFactor对应以下的学习率因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有矩阵指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
BiasLearnRateFactor
- - - - - -学习率因素偏差
1(默认)|负的标量|1乘4的数字向量
偏差的学习率因子,指定为非负标量或1 × 4数值向量。
该软件将该因子乘以全局学习率,以确定该层偏差的学习率。例如,如果BiasLearnRateFactor是2,则该层中偏差的学习率为当前全局学习率的两倍。方法指定的设置,该软件根据设置确定全局学习率trainingOptions函数。
来控制学习率因子的值为四个单独的向量偏见,指定一个1 × 4向量。的条目BiasLearnRateFactor对应以下的学习率因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有向量指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
InputWeightsL2Factor
- - - - - -输入权重的L2正则化因子
1(默认)|数字标量|1乘4的数字向量
输入权重的L2正则化因子,指定为数值标量或1 × 4数值向量。
该软件将该因子乘以全局L2正则化因子,以确定该层输入权重的L2正则化因子。例如,如果InputWeightsL2Factor= 2,则该层的输入权值的L2正则化因子是当前全局L2正则化因子的两倍。方法指定的设置为基础,该软件确定L2正则化因子trainingOptions函数。
中四个单独矩阵的L2正则化因子的值InputWeights,指定一个1 × 4向量。的条目InputWeightsL2Factor对应于以下的L2正则化因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有矩阵指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
RecurrentWeightsL2Factor
- - - - - -L2正则化因子用于循环权重
1(默认)|数字标量|1乘4的数字向量
用于循环权重的L2正则化因子,指定为数值标量或1 × 4数值向量。
该软件将该因子乘以全局L2正则化因子,以确定该层的循环权重的L2正则化因子。例如,如果RecurrentWeightsL2Factor= 2,则该层的循环权值的L2正则化因子是当前全局L2正则化因子的两倍。方法指定的设置为基础,该软件确定L2正则化因子trainingOptions函数。
中四个单独矩阵的L2正则化因子的值RecurrentWeights,指定一个1 × 4向量。的条目RecurrentWeightsL2Factor对应于以下的L2正则化因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有矩阵指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
BiasL2Factor
- - - - - -偏差的L2正则化因子
0(默认)|负的标量|1乘4的数字向量
偏差的L2正则化因子,指定为非负标量或1 × 4数值向量。
软件将这个因子乘以全局l2正则化因子的确定l2这一层偏差的正则化。例如,如果BiasL2Factor是2,则l2这一层偏差的正则化是全局偏差的两倍l2正则化因子。可以指定全局变量l2正则化因子使用trainingOptions函数。
中四个单独向量的L2正则化因子的值偏见,指定一个1 × 4向量。的条目BiasL2Factor对应于以下的L2正则化因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有向量指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
层
的名字
- - - - - -层的名字
''
(默认)|特征向量|字符串标量
层名,指定为字符向量或字符串标量。为层数组输入时,trainNetwork,assembleNetwork,layerGraph,dlnetwork函数自动为具有name的层分配名称''.
数据类型:字符|字符串
NumInputs
- - - - - -输入数量
1
|3.
此属性是只读的。
该层的输入数量。
如果HasStateInputs属性是0(false),则该层有一个带有name的输入“在”,对应于输入数据。在本例中,该层使用HiddenState而且CellState属性用于层操作。
如果HasStateInputs属性是1(true),则该层有三个带有名称的输入“在”,“隐藏”,“细胞”,分别对应输入数据、隐藏状态和单元格状态。在这种情况下,该层使用传递给这些输入的值进行层操作。如果HasStateInputs是1(正确),然后HiddenState而且CellState属性必须为空。
数据类型:双
InputNames
- - - - - -输入名字
{'在'}
|{‘在’,‘隐藏’,‘细胞’}
此属性是只读的。
输入层的名称。
如果HasStateInputs属性是0(false),则该层有一个带有name的输入“在”,对应于输入数据。在本例中,该层使用HiddenState而且CellState属性用于层操作。
如果HasStateInputs属性是1(true),则该层有三个带有名称的输入“在”,“隐藏”,“细胞”,分别对应输入数据、隐藏状态和单元格状态。在这种情况下,该层使用传递给这些输入的值进行层操作。如果HasStateInputs是1(正确),然后HiddenState而且CellState属性必须为空。
NumOutputs
- - - - - -输出数
1
|3.
此属性是只读的。
层的输出数量。
如果HasStateOutputs属性是0(false),则该层有一个带有name的输出“出”,对应输出数据。
如果HasStateOutputs属性是1(true),则该层有三个带有名称的输出“出”,“隐藏”,“细胞”,分别对应输出数据、隐藏状态和单元格状态。在这种情况下,该层还输出在层操作期间计算的状态值。
数据类型:双
OutputNames
- - - - - -输出的名字
{“出”}
|{‘出来’,‘隐藏’,‘细胞’}
此属性是只读的。
输出层的名称。
如果HasStateOutputs属性是0(false),则该层有一个带有name的输出“出”,对应输出数据。
如果HasStateOutputs属性是1(true),则该层有三个带有名称的输出“出”,“隐藏”,“细胞”,分别对应输出数据、隐藏状态和单元格状态。在这种情况下,该层还输出在层操作期间计算的状态值。
例子
创建LSTM层
创建一个LSTM层“lstm1”还有100个隐藏单位。
层= lstmLayer(100,“名字”,“lstm1”)
layer = LSTMLayer with properties: Name: 'lstm1' InputNames: {'in'} OutputNames: {'out'} NumInputs: 1 NumOutputs: 1 HasStateInputs: 0 HasStateOutputs: 0 Hyperparameters InputSize: 'auto' NumHiddenUnits: 100 OutputMode: 'sequence' statactivationfunction: 'tanh' GateActivationFunction: 'sigmoid' Learnable Parameters inputwights: [] recurrentwights: [] Bias: [] State Parameters HiddenState: [] CellState:[]显示所有属性
中包含LSTM层层数组中。
inputSize = 12;numHiddenUnits = 100;numClasses = 9;层= [...sequenceInputLayer(inputSize) lstmLayer(numHiddenUnits) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer]
2”LSTM LSTM 100个隐藏单元3”全连接9全连接层4”Softmax Softmax 5”分类输出crossentropyex
序列分类训练网络
训练深度学习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”)
定义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,图层,选项);
加载测试集并将序列分类到扬声器中。
[XTest,YTest] =日本evowelstestdata;
分类测试数据。指定用于训练的相同的小批大小。
YPred = category (net,XTest,“MiniBatchSize”, miniBatchSize);
计算预测的分类精度。
acc = sum(YPred == YTest)./ nummel (YTest)
Acc = 0.9595
分类LSTM网络
要创建用于序列到标签分类的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层、全连接层和回归输出层的层数组。
将序列输入层的大小设置为输入数据的特征数量。将全连接层的大小设置为响应的数量。您不需要指定序列长度。
对于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;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层学习时间序列和序列数据中时间步长之间的长期依赖关系。
层的状态由隐藏状态(也称为输出状态)及细胞状态.时间步长的隐藏状态t包含这个时间步骤的LSTM层的输出。单元格状态包含从前面的时间步骤中学到的信息。在每个时间步骤中,该层向单元格状态中添加信息或从单元格状态中删除信息。该层使用盖茨.
下面的组件控制层的单元格状态和隐藏状态。
组件
目的
输入门(我)
单元格状态更新的控制级别
忘记大门(f)
单元格状态重置的控制级别(忘记)
候选单元(g)
向单元格状态添加信息
输出门(o)
添加到隐藏状态的单元格状态的控制级别
该图说明了时间步长的数据流t.该图强调了门是如何忘记、更新和输出单元格和隐藏状态的。
LSTM层的可学习权值就是输入权值W(InputWeights),即循环权值R(RecurrentWeights),以及偏差b(偏见).的矩阵W,R,b分别是输入权值、循环权值和每个分量的偏置的连接。这些矩阵连接如下:
在哪里我,f,g,o分别表示输入门、遗忘门、单元格候选门和输出门。
单元格在时间步长的状态t是由
在哪里
表示阿达玛乘积(向量的逐元素乘法)。
时间步长的隐藏状态t是由
在哪里
表示状态激活函数。的lstmLayer函数默认使用双曲正切函数(tanh)来计算状态激活函数。
下式描述了时间步长的分量t.
组件
公式
输入门
忘记门
细胞的候选人
输出门
在这些计算中,
表示门激活函数。的lstmLayer函数在默认情况下使用的sigmoid函数
计算门激活函数。
图层输入和输出格式
层数组或层图中的层传递指定为格式化的数据dlarray对象。
你可以与它们交互dlarray自动区分工作流中的对象,例如在开发自定义层时,使用functionLayer对象,或使用向前而且预测功能与dlnetwork对象。
的支持输入格式万博1manbetxLSTMLayer对象和相应的输出格式。类的自定义层,该自定义层不继承nnet.layer.Formattable类,或FunctionLayer对象的Formattable选项设置为假,则该层接收一个未格式化的dlarray对象,其尺寸顺序对应于本表中概述的格式。
输入格式
OutputMode
输出格式
“CB”(通道、批处理)
“序列”
“CB”(通道、批处理)
“最后一次”
“认知行为治疗”(通道、批次、时间)
“序列”
“认知行为治疗”(通道、批次、时间)
“最后一次”
“CB”(通道、批处理)
在dlnetwork对象,LSTMLayer对象还支持以下输入和输出格万博1manbetx式组合。
输入格式
OutputMode
输出格式
“渣打银行”(空间、通道、批次)
“序列”
“CB”(通道、批处理)
“最后一次”
“SSCB”(空间,空间,通道)
“序列”
“CB”(通道、批处理)
“最后一次”
“SSSCB”(空间,空间,空间,通道)
“序列”
“CB”(通道、批处理)
“最后一次”
“SCBT”(空间、通道、批次)
“序列”
“认知行为治疗”(通道、批次、时间)
“最后一次”
“CB”(通道、批处理)
“SSCBT”(空间、空间、通道、批次、时间)
“序列”
“认知行为治疗”(通道、批次、时间)
“最后一次”
“CB”(通道、批处理)
“SSSCBT”(空间、空间、空间、通道、批次、时间)
“序列”
“认知行为治疗”(通道、批次、时间)
“最后一次”
“CB”(通道、批处理)
中使用这些输入格式trainNetwork工作流中,首先将数据转换为“认知行为治疗”(通道,批次,时间)格式使用flattenLayer.
如果HasStateInputs属性是1(true),则该层有两个带有名称的额外输入“隐藏”而且“细胞”,分别对应隐藏状态和单元格状态。这些额外的输入需要输入格式“CB”(频道,批处理)。
如果HasStateOutputs属性是1(true),则该层有两个带有名称的额外输出“隐藏”而且“细胞”,分别对应隐藏状态和单元格状态。这些附加输出具有输出格式“CB”(频道,批处理)。
参考文献
[1]工藤M.,富山J.,辛波M.。“使用穿过区域的多维曲线分类”模式识别信.第20卷,11-13号,第1103-1111页。
[2]UCI机器学习库:日语元音数据集.https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
[3] Hochreiter, S .和J. Schmidhuber, 1997。长短期记忆。神经计算, 9(8),第1735 - 1780页。
格洛洛特,泽维尔,还有约书亚·本吉奥。《理解深度前馈神经网络训练的难度》在第十三届人工智能与统计国际会议论文集, 249 - 356。撒丁岛,意大利:AISTATS, 2010。
[5]何开明,张翔宇,任少卿,孙健。“深入研究整流器:在ImageNet分类上超越人类水平的性能。”在2015年IEEE计算机视觉国际会议论文集, 1026 - 1034。华盛顿:IEEE计算机视觉学会,2015。
Saxe, Andrew M., James L. McClelland, Surya Ganguli。“深度线性神经万博 尤文图斯网络中非线性学习动力学的精确解。”arXiv预打印arXiv:1312.6120(2013)。
扩展功能
C/ c++代码生成使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
当用Intel生成代码时®MKL-DNN:
的StateActivationFunction属性必须设置为的双曲正切.
的GateActivationFunction属性必须设置为“乙状结肠”.
的HasStateInputs而且HasStateOutputs属性必须设置为0(假)。
GPU代码生成使用GPU Coder™为NVIDIA®GPU生成CUDA®代码。
使用注意事项和限制:
对于GPU代码生成,使用StateActivationFunction属性必须设置为的双曲正切.
对于GPU代码生成,使用GateActivationFunction属性必须设置为“乙状结肠”.
的HasStateInputs而且HasStateOutputs属性必须设置为0(假)。
版本历史
在R2017b中引入
R2019a:默认输入权重初始化为gloria
R2019a的行为发生了变化
从R2019a开始,默认情况下,软件使用Glorot初始化器初始化该层的层输入权重。这种行为有助于稳定训练,通常会减少深度网络的训练时间。
在以前的版本中,软件在默认情况下,使用从均值为零,方差为0.01的正态分布中采样来初始化层输入权重。要重现此行为,请设置“InputWeightsInitializer”图层的选项“narrow-normal”.
R2019a:默认循环权重初始化是正交的
R2019a的行为发生了变化
从R2019a开始,默认情况下,软件初始化该层的层循环权值为问的QR分解给出的正交矩阵Z=问R对于一个随机矩阵Z从单位正态分布抽样。这种行为有助于稳定训练,通常会减少深度网络的训练时间。
在以前的版本中,软件在默认情况下,通过从均值为零,方差为0.01的正态分布中采样来初始化层循环权重。要重现此行为,请设置“RecurrentWeightsInitializer”图层的选项“narrow-normal”.
长短期记忆层
描述
LSTM层学习时间序列和序列数据中时间步长之间的长期依赖关系。
该层执行加法相互作用,这可以帮助改善训练过程中长序列的梯度流动。
LSTM层学习时间序列和序列数据中时间步长之间的长期依赖关系。
该层执行加法相互作用,这可以帮助改善训练过程中长序列的梯度流动。
创建
属性
LSTM
NumHiddenUnits
- - - - - -隐藏单元数量
正整数
此属性是只读的。
隐藏单元数(也称为隐藏大小),指定为正整数。
隐藏单元的数量对应于时间步骤之间记住的信息量(隐藏状态)。隐藏状态可以包含来自之前所有时间步骤的信息,而不管序列长度如何。如果隐藏单元的数量太大,那么该层可能会过度拟合训练数据。这个值可以从几十到几千不等。
隐藏状态不限制迭代中处理的时间步数。方法时将序列拆分为更小的序列trainNetwork函数,使用SequenceLength培训的选择。
数据类型:单|双|int8|int16|int32|int64|uint8|uint16|uint32|uint64
OutputMode
- - - - - -输出模式
“序列”
(默认)|“最后一次”
此属性是只读的。
输出模式,指定为下列之一:
“序列”—输出完整的序列。
“最后一次”—输出序列的最后一个时间步。
HasStateInputs
- - - - - -层的状态输入标志
0(假)(默认)|1(真正的)
此属性是只读的。
层的状态输入的标志,指定为0(虚假的)或1(真正的)。
如果HasStateInputs属性是0(false),则该层有一个带有name的输入“在”,对应于输入数据。在本例中,该层使用HiddenState而且CellState属性用于层操作。
如果HasStateInputs属性是1(true),则该层有三个带有名称的输入“在”,“隐藏”,“细胞”,分别对应输入数据、隐藏状态和单元格状态。在这种情况下,该层使用传递给这些输入的值进行层操作。如果HasStateInputs是1(正确),然后HiddenState而且CellState属性必须为空。
数据类型:单|双|int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑
HasStateOutputs
- - - - - -层的状态输出标志
0(假)(默认)|1(真正的)
此属性是只读的。
层的状态输出的标志,指定为0(虚假的)或1(真正的)。
如果HasStateOutputs属性是0(false),则该层有一个带有name的输出“出”,对应输出数据。
如果HasStateOutputs属性是1(true),则该层有三个带有名称的输出“出”,“隐藏”,“细胞”,分别对应输出数据、隐藏状态和单元格状态。在这种情况下,该层还输出在层操作期间计算的状态值。
数据类型:单|双|int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑
InputSize
- - - - - -输入的大小
“汽车”
(默认)|正整数
此属性是只读的。
输入大小,指定为正整数或“汽车”.如果InputSize是“汽车”,然后软件在训练时自动分配输入大小。
数据类型:双|字符|字符串
激活
StateActivationFunction
- - - - - -激活函数更新单元格和隐藏状态
的双曲正切
(默认)|“softsign”
此属性是只读的。
激活函数更新单元格和隐藏状态,指定为以下之一:
的双曲正切—使用双曲正切函数tanh。
“softsign”—使用softsign功能
.
该层使用该选项作为函数
在计算中更新单元格和隐藏状态。有关如何在LSTM层中使用激活函数的更多信息,请参见长短期记忆层.
GateActivationFunction
- - - - - -激活功能应用于闸门
“乙状结肠”
(默认)|“hard-sigmoid”
此属性是只读的。
激活函数应用于门,指定为以下之一:
“乙状结肠”—使用sigmoid函数
.
“hard-sigmoid”-使用硬sigmoid函数
该层使用该选项作为函数
在计算层栅时。
状态
CellState
- - - - - -细胞状态
数值向量
要在层操作中使用的单元格状态,指定为NumHiddenUnits-by-1数值向量。此值对应于数据传递给层时的初始单元格状态。
属性手动设置此属性后,调用resetState函数将单元格状态设置为此值。
如果HasStateInputs是真正的,则CellState属性必须为空。
HiddenState
- - - - - -隐藏状态
数值向量
在层操作中使用的隐藏状态,指定为NumHiddenUnits-by-1数值向量。这个值对应于数据传递给该层时的初始隐藏状态。
属性手动设置此属性后,调用resetState函数将隐藏状态设置为此值。
如果HasStateInputs是真正的,则HiddenState属性必须为空。
参数和初始化
InputWeightsInitializer
- - - - - -函数初始化输入权重
“glorot”
(默认)|“他”
|“正交”
|“narrow-normal”|“零”|“的”|函数处理
函数初始化输入权重,指定为以下之一:
“glorot”-使用Glorot初始化器初始化输入权重[4](也称为Xavier初始化器)。格洛洛特初始化器独立地从均值和方差为零的均匀分布中采样2/(InputSize + numOut),在那里numOut = 4*NumHiddenUnits.
“他”-使用He初始化式初始化输入权重[5].He初始化器样本来自均值和方差为零的正态分布2 / InputSize.
“正交”-初始化输入权重问的QR分解给出的正交矩阵Z=问R对于一个随机矩阵Z从单位正态分布抽样。[6]
“narrow-normal”-通过从均值为0,标准差为0.01的正态分布中独立采样,初始化输入权重。
“零”-用0初始化输入权重。
“的”-用1初始化输入权重。
函数句柄——使用自定义函数初始化输入权重。如果指定了函数句柄,则该函数必须为权重= func(sz),在那里深圳是输入权重的大小。
时,该层才初始化输入权重InputWeights属性为空。
数据类型:字符|字符串|function_handle
RecurrentWeightsInitializer
- - - - - -函数初始化循环权重
“正交”
(默认)|“glorot”
|“他”
|“narrow-normal”|“零”|“的”|函数处理
函数初始化循环权重,指定为以下之一:
“正交”-初始化循环权重问的QR分解给出的正交矩阵Z=问R对于一个随机矩阵Z从单位正态分布抽样。[6]
“glorot”-使用Glorot初始化器初始化循环权重[4](也称为Xavier初始化器)。格洛洛特初始化器独立地从均值和方差为零的均匀分布中采样2/(numIn + numOut),在那里numIn = NumHiddenUnits而且numOut = 4*NumHiddenUnits.
“他”-使用He初始化式初始化循环权重[5].He初始化器样本来自均值和方差为零的正态分布2 / NumHiddenUnits.
“narrow-normal”-通过从均值为0,标准差为0.01的正态分布中独立采样,初始化循环权重。
“零”-用0初始化循环权重。
“的”-用1初始化循环权重。
函数句柄——使用自定义函数初始化循环权重。如果指定了函数句柄,则该函数必须为权重= func(sz),在那里深圳是循环权值的大小。
时,层才初始化循环权重RecurrentWeights属性为空。
数据类型:字符|字符串|function_handle
BiasInitializer
- - - - - -函数初始化偏置
“unit-forget-gate”
(默认)|“narrow-normal”
|“的”
|函数处理
函数初始化偏差,指定为以下之一:
“unit-forget-gate”-初始化遗忘门偏差为1,其余偏差为0。
“narrow-normal”-通过从均值为0,标准差为0.01的正态分布中独立抽样来初始化偏差。
“的”-用1初始化偏差。
函数句柄-使用自定义函数初始化偏置。如果指定了函数句柄,则该函数必须为偏差= func(sz),在那里深圳是偏差的大小。
时,层才初始化偏差偏见属性为空。
数据类型:字符|字符串|function_handle
InputWeights
- - - - - -输入重量
[]
(默认)|矩阵
输入权重,以矩阵形式指定。
输入权值矩阵是LSTM层中组件(门)的四个输入权值矩阵的拼接。这四个矩阵垂直排列顺序如下:
输入门
忘记门
细胞的候选人
输出门
输入权重是可学习的参数。当训练一个网络时,如果InputWeights非空吗trainNetwork使用InputWeights属性作为初始值。如果InputWeights那么是空的trainNetwork所指定的初始化式InputWeightsInitializer.
在训练时,InputWeights是一个4 * NumHiddenUnits——- - - - - -InputSize矩阵。
RecurrentWeights
- - - - - -复发性权重
[]
(默认)|矩阵
循环权值,用矩阵表示。
递归权矩阵是LSTM层中组件(门)的四个递归权矩阵的连接。这四个矩阵按以下顺序垂直连接:
输入门
忘记门
细胞的候选人
输出门
循环权值是可学习的参数。当训练一个网络时,如果RecurrentWeights非空吗trainNetwork使用RecurrentWeights属性作为初始值。如果RecurrentWeights那么是空的trainNetwork所指定的初始化式RecurrentWeightsInitializer.
在训练时间RecurrentWeights是一个4 * NumHiddenUnits——- - - - - -NumHiddenUnits矩阵。
偏见
- - - - - -层的偏见
[]
(默认)|数值向量
LSTM层的层偏置,指定为数值向量。
偏置向量是LSTM层中组件(门)的四个偏置向量的拼接。这四个向量垂直连接的顺序如下:
输入门
忘记门
细胞的候选人
输出门
层偏差是可学习参数。当你训练一个网络时,如果偏见非空吗trainNetwork使用偏见属性作为初始值。如果偏见那么是空的trainNetwork所指定的初始化式BiasInitializer.
在训练时,偏见是一个4 * NumHiddenUnits-by-1数值向量。
学习率和正则化
InputWeightsLearnRateFactor
- - - - - -输入权重的学习率因子
1(默认)|数字标量|1乘4的数字向量
输入权重的学习率因子,指定为数值标量或1 × 4数值向量。
该软件将该因子乘以全局学习率,以确定该层输入权重的学习率因子。例如,如果InputWeightsLearnRateFactor为2,则该层输入权值的学习率因子为当前全局学习率的两倍。属性指定的设置来确定全局学习率trainingOptions函数。
中四个单独矩阵的学习率因子的值InputWeights,指定一个1 × 4向量。的条目InputWeightsLearnRateFactor对应以下的学习率因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有矩阵指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
RecurrentWeightsLearnRateFactor
- - - - - -循环权重的学习率因子
1(默认)|数字标量|1乘4的数字向量
循环权重的学习率因子,指定为数值标量或1 × 4数值向量。
该软件将该因子乘以全局学习率,以确定该层的循环权重的学习率。例如,如果RecurrentWeightsLearnRateFactor为2,则该层的循环权重的学习率是当前全局学习率的两倍。属性指定的设置来确定全局学习率trainingOptions函数。
中四个单独矩阵的学习率因子的值RecurrentWeights,指定一个1 × 4向量。的条目RecurrentWeightsLearnRateFactor对应以下的学习率因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有矩阵指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
BiasLearnRateFactor
- - - - - -学习率因素偏差
1(默认)|负的标量|1乘4的数字向量
偏差的学习率因子,指定为非负标量或1 × 4数值向量。
该软件将该因子乘以全局学习率,以确定该层偏差的学习率。例如,如果BiasLearnRateFactor是2,则该层中偏差的学习率为当前全局学习率的两倍。方法指定的设置,该软件根据设置确定全局学习率trainingOptions函数。
来控制学习率因子的值为四个单独的向量偏见,指定一个1 × 4向量。的条目BiasLearnRateFactor对应以下的学习率因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有向量指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
InputWeightsL2Factor
- - - - - -输入权重的L2正则化因子
1(默认)|数字标量|1乘4的数字向量
输入权重的L2正则化因子,指定为数值标量或1 × 4数值向量。
该软件将该因子乘以全局L2正则化因子,以确定该层输入权重的L2正则化因子。例如,如果InputWeightsL2Factor= 2,则该层的输入权值的L2正则化因子是当前全局L2正则化因子的两倍。方法指定的设置为基础,该软件确定L2正则化因子trainingOptions函数。
中四个单独矩阵的L2正则化因子的值InputWeights,指定一个1 × 4向量。的条目InputWeightsL2Factor对应于以下的L2正则化因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有矩阵指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
RecurrentWeightsL2Factor
- - - - - -L2正则化因子用于循环权重
1(默认)|数字标量|1乘4的数字向量
用于循环权重的L2正则化因子,指定为数值标量或1 × 4数值向量。
该软件将该因子乘以全局L2正则化因子,以确定该层的循环权重的L2正则化因子。例如,如果RecurrentWeightsL2Factor= 2,则该层的循环权值的L2正则化因子是当前全局L2正则化因子的两倍。方法指定的设置为基础,该软件确定L2正则化因子trainingOptions函数。
中四个单独矩阵的L2正则化因子的值RecurrentWeights,指定一个1 × 4向量。的条目RecurrentWeightsL2Factor对应于以下的L2正则化因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有矩阵指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
BiasL2Factor
- - - - - -偏差的L2正则化因子
0(默认)|负的标量|1乘4的数字向量
偏差的L2正则化因子,指定为非负标量或1 × 4数值向量。
软件将这个因子乘以全局l2正则化因子的确定l2这一层偏差的正则化。例如,如果BiasL2Factor是2,则l2这一层偏差的正则化是全局偏差的两倍l2正则化因子。可以指定全局变量l2正则化因子使用trainingOptions函数。
中四个单独向量的L2正则化因子的值偏见,指定一个1 × 4向量。的条目BiasL2Factor对应于以下的L2正则化因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有向量指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
层
的名字
- - - - - -层的名字
''
(默认)|特征向量|字符串标量
层名,指定为字符向量或字符串标量。为层数组输入时,trainNetwork,assembleNetwork,layerGraph,dlnetwork函数自动为具有name的层分配名称''.
数据类型:字符|字符串
NumInputs
- - - - - -输入数量
1
|3.
此属性是只读的。
该层的输入数量。
如果HasStateInputs属性是0(false),则该层有一个带有name的输入“在”,对应于输入数据。在本例中,该层使用HiddenState而且CellState属性用于层操作。
如果HasStateInputs属性是1(true),则该层有三个带有名称的输入“在”,“隐藏”,“细胞”,分别对应输入数据、隐藏状态和单元格状态。在这种情况下,该层使用传递给这些输入的值进行层操作。如果HasStateInputs是1(正确),然后HiddenState而且CellState属性必须为空。
数据类型:双
InputNames
- - - - - -输入名字
{'在'}
|{‘在’,‘隐藏’,‘细胞’}
此属性是只读的。
输入层的名称。
如果HasStateInputs属性是0(false),则该层有一个带有name的输入“在”,对应于输入数据。在本例中,该层使用HiddenState而且CellState属性用于层操作。
如果HasStateInputs属性是1(true),则该层有三个带有名称的输入“在”,“隐藏”,“细胞”,分别对应输入数据、隐藏状态和单元格状态。在这种情况下,该层使用传递给这些输入的值进行层操作。如果HasStateInputs是1(正确),然后HiddenState而且CellState属性必须为空。
NumOutputs
- - - - - -输出数
1
|3.
此属性是只读的。
层的输出数量。
如果HasStateOutputs属性是0(false),则该层有一个带有name的输出“出”,对应输出数据。
如果HasStateOutputs属性是1(true),则该层有三个带有名称的输出“出”,“隐藏”,“细胞”,分别对应输出数据、隐藏状态和单元格状态。在这种情况下,该层还输出在层操作期间计算的状态值。
数据类型:双
OutputNames
- - - - - -输出的名字
{“出”}
|{‘出来’,‘隐藏’,‘细胞’}
此属性是只读的。
输出层的名称。
如果HasStateOutputs属性是0(false),则该层有一个带有name的输出“出”,对应输出数据。
如果HasStateOutputs属性是1(true),则该层有三个带有名称的输出“出”,“隐藏”,“细胞”,分别对应输出数据、隐藏状态和单元格状态。在这种情况下,该层还输出在层操作期间计算的状态值。
LSTM
NumHiddenUnits
- - - - - -隐藏单元数量
正整数
此属性是只读的。
隐藏单元数(也称为隐藏大小),指定为正整数。
隐藏单元的数量对应于时间步骤之间记住的信息量(隐藏状态)。隐藏状态可以包含来自之前所有时间步骤的信息,而不管序列长度如何。如果隐藏单元的数量太大,那么该层可能会过度拟合训练数据。这个值可以从几十到几千不等。
隐藏状态不限制迭代中处理的时间步数。方法时将序列拆分为更小的序列trainNetwork函数,使用SequenceLength培训的选择。
数据类型:单|双|int8|int16|int32|int64|uint8|uint16|uint32|uint64
OutputMode
- - - - - -输出模式
“序列”
(默认)|“最后一次”
此属性是只读的。
输出模式,指定为下列之一:
“序列”—输出完整的序列。
“最后一次”—输出序列的最后一个时间步。
HasStateInputs
- - - - - -层的状态输入标志
0(假)(默认)|1(真正的)
此属性是只读的。
层的状态输入的标志,指定为0(虚假的)或1(真正的)。
如果HasStateInputs属性是0(false),则该层有一个带有name的输入“在”,对应于输入数据。在本例中,该层使用HiddenState而且CellState属性用于层操作。
如果HasStateInputs属性是1(true),则该层有三个带有名称的输入“在”,“隐藏”,“细胞”,分别对应输入数据、隐藏状态和单元格状态。在这种情况下,该层使用传递给这些输入的值进行层操作。如果HasStateInputs是1(正确),然后HiddenState而且CellState属性必须为空。
数据类型:单|双|int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑
HasStateOutputs
- - - - - -层的状态输出标志
0(假)(默认)|1(真正的)
此属性是只读的。
层的状态输出的标志,指定为0(虚假的)或1(真正的)。
如果HasStateOutputs属性是0(false),则该层有一个带有name的输出“出”,对应输出数据。
如果HasStateOutputs属性是1(true),则该层有三个带有名称的输出“出”,“隐藏”,“细胞”,分别对应输出数据、隐藏状态和单元格状态。在这种情况下,该层还输出在层操作期间计算的状态值。
数据类型:单|双|int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑
InputSize
- - - - - -输入的大小
“汽车”
(默认)|正整数
此属性是只读的。
输入大小,指定为正整数或“汽车”.如果InputSize是“汽车”,然后软件在训练时自动分配输入大小。
数据类型:双|字符|字符串
NumHiddenUnits
- - - - - -隐藏单元数量
正整数
正整数
此属性是只读的。 隐藏单元数(也称为隐藏大小),指定为正整数。 隐藏单元的数量对应于时间步骤之间记住的信息量(隐藏状态)。隐藏状态可以包含来自之前所有时间步骤的信息,而不管序列长度如何。如果隐藏单元的数量太大,那么该层可能会过度拟合训练数据。这个值可以从几十到几千不等。 隐藏状态不限制迭代中处理的时间步数。方法时将序列拆分为更小的序列 数据类型:SequenceLength
单
OutputMode
- - - - - -输出模式
“序列”
(默认)|“最后一次”
“序列”
(默认)|“最后一次”
此属性是只读的。 输出模式,指定为下列之一:
“序列”
“最后一次”
HasStateInputs
- - - - - -层的状态输入标志
0(假)(默认)|1(真正的)
0(假)(默认)|1(真正的)
此属性是只读的。 层的状态输入的标志,指定为 如果 如果 数据类型:单
HasStateOutputs
- - - - - -层的状态输出标志
0(假)(默认)|1(真正的)
0(假)(默认)|1(真正的)
此属性是只读的。 层的状态输出的标志,指定为 如果 如果 数据类型:单
InputSize
- - - - - -输入的大小
“汽车”
(默认)|正整数
“汽车”
(默认)|此属性是只读的。 输入大小,指定为正整数或 数据类型:双
激活
StateActivationFunction
- - - - - -激活函数更新单元格和隐藏状态
的双曲正切
(默认)|“softsign”
此属性是只读的。
激活函数更新单元格和隐藏状态,指定为以下之一:
的双曲正切—使用双曲正切函数tanh。
“softsign”—使用softsign功能
.
该层使用该选项作为函数
在计算中更新单元格和隐藏状态。有关如何在LSTM层中使用激活函数的更多信息,请参见长短期记忆层.
GateActivationFunction
- - - - - -激活功能应用于闸门
“乙状结肠”
(默认)|“hard-sigmoid”
此属性是只读的。
激活函数应用于门,指定为以下之一:
“乙状结肠”—使用sigmoid函数
.
“hard-sigmoid”-使用硬sigmoid函数
该层使用该选项作为函数
在计算层栅时。
StateActivationFunction
- - - - - -激活函数更新单元格和隐藏状态
的双曲正切
(默认)|“softsign”
的双曲正切
(默认)|“softsign”
此属性是只读的。 激活函数更新单元格和隐藏状态,指定为以下之一: 该层使用该选项作为函数
的双曲正切
“softsign”
GateActivationFunction
- - - - - -激活功能应用于闸门
“乙状结肠”
(默认)|“hard-sigmoid”
“乙状结肠”
(默认)|“hard-sigmoid”
此属性是只读的。 激活函数应用于门,指定为以下之一:
该层使用该选项作为函数
“乙状结肠”
“hard-sigmoid”
状态
CellState
- - - - - -细胞状态
数值向量
要在层操作中使用的单元格状态,指定为NumHiddenUnits-by-1数值向量。此值对应于数据传递给层时的初始单元格状态。
属性手动设置此属性后,调用resetState函数将单元格状态设置为此值。
如果HasStateInputs是真正的,则CellState属性必须为空。
HiddenState
- - - - - -隐藏状态
数值向量
在层操作中使用的隐藏状态,指定为NumHiddenUnits-by-1数值向量。这个值对应于数据传递给该层时的初始隐藏状态。
属性手动设置此属性后,调用resetState函数将隐藏状态设置为此值。
如果HasStateInputs是真正的,则HiddenState属性必须为空。
CellState
- - - - - -细胞状态
数值向量
数值向量
要在层操作中使用的单元格状态,指定为 属性手动设置此属性后,调用 如果
HiddenState
- - - - - -隐藏状态
数值向量
数值向量
在层操作中使用的隐藏状态,指定为 属性手动设置此属性后,调用 如果
参数和初始化
InputWeightsInitializer
- - - - - -函数初始化输入权重
“glorot”
(默认)|“他”
|“正交”
|“narrow-normal”|“零”|“的”|函数处理
函数初始化输入权重,指定为以下之一:
“glorot”-使用Glorot初始化器初始化输入权重[4](也称为Xavier初始化器)。格洛洛特初始化器独立地从均值和方差为零的均匀分布中采样2/(InputSize + numOut),在那里numOut = 4*NumHiddenUnits.
“他”-使用He初始化式初始化输入权重[5].He初始化器样本来自均值和方差为零的正态分布2 / InputSize.
“正交”-初始化输入权重问的QR分解给出的正交矩阵Z=问R对于一个随机矩阵Z从单位正态分布抽样。[6]
“narrow-normal”-通过从均值为0,标准差为0.01的正态分布中独立采样,初始化输入权重。
“零”-用0初始化输入权重。
“的”-用1初始化输入权重。
函数句柄——使用自定义函数初始化输入权重。如果指定了函数句柄,则该函数必须为权重= func(sz),在那里深圳是输入权重的大小。
时,该层才初始化输入权重InputWeights属性为空。
数据类型:字符|字符串|function_handle
RecurrentWeightsInitializer
- - - - - -函数初始化循环权重
“正交”
(默认)|“glorot”
|“他”
|“narrow-normal”|“零”|“的”|函数处理
函数初始化循环权重,指定为以下之一:
“正交”-初始化循环权重问的QR分解给出的正交矩阵Z=问R对于一个随机矩阵Z从单位正态分布抽样。[6]
“glorot”-使用Glorot初始化器初始化循环权重[4](也称为Xavier初始化器)。格洛洛特初始化器独立地从均值和方差为零的均匀分布中采样2/(numIn + numOut),在那里numIn = NumHiddenUnits而且numOut = 4*NumHiddenUnits.
“他”-使用He初始化式初始化循环权重[5].He初始化器样本来自均值和方差为零的正态分布2 / NumHiddenUnits.
“narrow-normal”-通过从均值为0,标准差为0.01的正态分布中独立采样,初始化循环权重。
“零”-用0初始化循环权重。
“的”-用1初始化循环权重。
函数句柄——使用自定义函数初始化循环权重。如果指定了函数句柄,则该函数必须为权重= func(sz),在那里深圳是循环权值的大小。
时,层才初始化循环权重RecurrentWeights属性为空。
数据类型:字符|字符串|function_handle
BiasInitializer
- - - - - -函数初始化偏置
“unit-forget-gate”
(默认)|“narrow-normal”
|“的”
|函数处理
函数初始化偏差,指定为以下之一:
“unit-forget-gate”-初始化遗忘门偏差为1,其余偏差为0。
“narrow-normal”-通过从均值为0,标准差为0.01的正态分布中独立抽样来初始化偏差。
“的”-用1初始化偏差。
函数句柄-使用自定义函数初始化偏置。如果指定了函数句柄,则该函数必须为偏差= func(sz),在那里深圳是偏差的大小。
时,层才初始化偏差偏见属性为空。
数据类型:字符|字符串|function_handle
InputWeights
- - - - - -输入重量
[]
(默认)|矩阵
输入权重,以矩阵形式指定。
输入权值矩阵是LSTM层中组件(门)的四个输入权值矩阵的拼接。这四个矩阵垂直排列顺序如下:
输入门
忘记门
细胞的候选人
输出门
输入权重是可学习的参数。当训练一个网络时,如果InputWeights非空吗trainNetwork使用InputWeights属性作为初始值。如果InputWeights那么是空的trainNetwork所指定的初始化式InputWeightsInitializer.
在训练时,InputWeights是一个4 * NumHiddenUnits——- - - - - -InputSize矩阵。
RecurrentWeights
- - - - - -复发性权重
[]
(默认)|矩阵
循环权值,用矩阵表示。
递归权矩阵是LSTM层中组件(门)的四个递归权矩阵的连接。这四个矩阵按以下顺序垂直连接:
输入门
忘记门
细胞的候选人
输出门
循环权值是可学习的参数。当训练一个网络时,如果RecurrentWeights非空吗trainNetwork使用RecurrentWeights属性作为初始值。如果RecurrentWeights那么是空的trainNetwork所指定的初始化式RecurrentWeightsInitializer.
在训练时间RecurrentWeights是一个4 * NumHiddenUnits——- - - - - -NumHiddenUnits矩阵。
偏见
- - - - - -层的偏见
[]
(默认)|数值向量
LSTM层的层偏置,指定为数值向量。
偏置向量是LSTM层中组件(门)的四个偏置向量的拼接。这四个向量垂直连接的顺序如下:
输入门
忘记门
细胞的候选人
输出门
层偏差是可学习参数。当你训练一个网络时,如果偏见非空吗trainNetwork使用偏见属性作为初始值。如果偏见那么是空的trainNetwork所指定的初始化式BiasInitializer.
在训练时,偏见是一个4 * NumHiddenUnits-by-1数值向量。
InputWeightsInitializer
- - - - - -函数初始化输入权重
“glorot”
(默认)|“他”
|“正交”
|“narrow-normal”|“零”|“的”|函数处理
“glorot”
(默认)|“他”
“正交”
“narrow-normal”|“零”|“的”|函数处理
函数初始化输入权重,指定为以下之一: 函数句柄——使用自定义函数初始化输入权重。如果指定了函数句柄,则该函数必须为 时,该层才初始化输入权重 数据类型:
“glorot”
“他”
“正交”
“narrow-normal”
“零”
“的”
字符
RecurrentWeightsInitializer
- - - - - -函数初始化循环权重
“正交”
(默认)|“glorot”
|“他”
|“narrow-normal”|“零”|“的”|函数处理
“正交”
(默认)|“glorot”
“他”
“narrow-normal”|“零”|“的”|函数处理
函数初始化循环权重,指定为以下之一: 函数句柄——使用自定义函数初始化循环权重。如果指定了函数句柄,则该函数必须为 时,层才初始化循环权重 数据类型:
“正交”
“glorot”
“他”
“narrow-normal”
“零”
“的”
字符
BiasInitializer
- - - - - -函数初始化偏置
“unit-forget-gate”
(默认)|“narrow-normal”
|“的”
|函数处理
“unit-forget-gate”
(默认)|“narrow-normal”
“的”
函数初始化偏差,指定为以下之一: 函数句柄-使用自定义函数初始化偏置。如果指定了函数句柄,则该函数必须为 时,层才初始化偏差 数据类型:
“unit-forget-gate”
“narrow-normal”
“的”
字符
InputWeights
- - - - - -输入重量
[]
(默认)|矩阵
[]
(默认)|输入权重,以矩阵形式指定。 输入权值矩阵是LSTM层中组件(门)的四个输入权值矩阵的拼接。这四个矩阵垂直排列顺序如下: 输入门 忘记门 细胞的候选人 输出门 输入权重是可学习的参数。当训练一个网络时,如果 在训练时,
trainNetwork
RecurrentWeights
- - - - - -复发性权重
[]
(默认)|矩阵
[]
(默认)|循环权值,用矩阵表示。 递归权矩阵是LSTM层中组件(门)的四个递归权矩阵的连接。这四个矩阵按以下顺序垂直连接: 输入门 忘记门 细胞的候选人 输出门 循环权值是可学习的参数。当训练一个网络时,如果 在训练时间
trainNetwork
偏见
- - - - - -层的偏见
[]
(默认)|数值向量
[]
(默认)|LSTM层的层偏置,指定为数值向量。 偏置向量是LSTM层中组件(门)的四个偏置向量的拼接。这四个向量垂直连接的顺序如下: 输入门 忘记门 细胞的候选人 输出门 层偏差是可学习参数。当你训练一个网络时,如果 在训练时,
trainNetwork
学习率和正则化
InputWeightsLearnRateFactor
- - - - - -输入权重的学习率因子
1(默认)|数字标量|1乘4的数字向量
输入权重的学习率因子,指定为数值标量或1 × 4数值向量。
该软件将该因子乘以全局学习率,以确定该层输入权重的学习率因子。例如,如果InputWeightsLearnRateFactor为2,则该层输入权值的学习率因子为当前全局学习率的两倍。属性指定的设置来确定全局学习率trainingOptions函数。
中四个单独矩阵的学习率因子的值InputWeights,指定一个1 × 4向量。的条目InputWeightsLearnRateFactor对应以下的学习率因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有矩阵指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
RecurrentWeightsLearnRateFactor
- - - - - -循环权重的学习率因子
1(默认)|数字标量|1乘4的数字向量
循环权重的学习率因子,指定为数值标量或1 × 4数值向量。
该软件将该因子乘以全局学习率,以确定该层的循环权重的学习率。例如,如果RecurrentWeightsLearnRateFactor为2,则该层的循环权重的学习率是当前全局学习率的两倍。属性指定的设置来确定全局学习率trainingOptions函数。
中四个单独矩阵的学习率因子的值RecurrentWeights,指定一个1 × 4向量。的条目RecurrentWeightsLearnRateFactor对应以下的学习率因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有矩阵指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
BiasLearnRateFactor
- - - - - -学习率因素偏差
1(默认)|负的标量|1乘4的数字向量
偏差的学习率因子,指定为非负标量或1 × 4数值向量。
该软件将该因子乘以全局学习率,以确定该层偏差的学习率。例如,如果BiasLearnRateFactor是2,则该层中偏差的学习率为当前全局学习率的两倍。方法指定的设置,该软件根据设置确定全局学习率trainingOptions函数。
来控制学习率因子的值为四个单独的向量偏见,指定一个1 × 4向量。的条目BiasLearnRateFactor对应以下的学习率因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有向量指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
InputWeightsL2Factor
- - - - - -输入权重的L2正则化因子
1(默认)|数字标量|1乘4的数字向量
输入权重的L2正则化因子,指定为数值标量或1 × 4数值向量。
该软件将该因子乘以全局L2正则化因子,以确定该层输入权重的L2正则化因子。例如,如果InputWeightsL2Factor= 2,则该层的输入权值的L2正则化因子是当前全局L2正则化因子的两倍。方法指定的设置为基础,该软件确定L2正则化因子trainingOptions函数。
中四个单独矩阵的L2正则化因子的值InputWeights,指定一个1 × 4向量。的条目InputWeightsL2Factor对应于以下的L2正则化因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有矩阵指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
RecurrentWeightsL2Factor
- - - - - -L2正则化因子用于循环权重
1(默认)|数字标量|1乘4的数字向量
用于循环权重的L2正则化因子,指定为数值标量或1 × 4数值向量。
该软件将该因子乘以全局L2正则化因子,以确定该层的循环权重的L2正则化因子。例如,如果RecurrentWeightsL2Factor= 2,则该层的循环权值的L2正则化因子是当前全局L2正则化因子的两倍。方法指定的设置为基础,该软件确定L2正则化因子trainingOptions函数。
中四个单独矩阵的L2正则化因子的值RecurrentWeights,指定一个1 × 4向量。的条目RecurrentWeightsL2Factor对应于以下的L2正则化因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有矩阵指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
BiasL2Factor
- - - - - -偏差的L2正则化因子
0(默认)|负的标量|1乘4的数字向量
偏差的L2正则化因子,指定为非负标量或1 × 4数值向量。
软件将这个因子乘以全局l2正则化因子的确定l2这一层偏差的正则化。例如,如果BiasL2Factor是2,则l2这一层偏差的正则化是全局偏差的两倍l2正则化因子。可以指定全局变量l2正则化因子使用trainingOptions函数。
中四个单独向量的L2正则化因子的值偏见,指定一个1 × 4向量。的条目BiasL2Factor对应于以下的L2正则化因子:
输入门
忘记门
细胞的候选人
输出门
若要为所有向量指定相同的值,请指定一个非负标量。
例子:2
例子:[1 2 1 1]
InputWeightsLearnRateFactor
- - - - - -输入权重的学习率因子
1(默认)|数字标量|1乘4的数字向量
1
输入权重的学习率因子,指定为数值标量或1 × 4数值向量。 该软件将该因子乘以全局学习率,以确定该层输入权重的学习率因子。例如,如果 中四个单独矩阵的学习率因子的值 输入门 忘记门 细胞的候选人 输出门 若要为所有矩阵指定相同的值,请指定一个非负标量。 例子: 例子:trainingOptions
2
[1 2 1 1]
RecurrentWeightsLearnRateFactor
- - - - - -循环权重的学习率因子
1(默认)|数字标量|1乘4的数字向量
1
循环权重的学习率因子,指定为数值标量或1 × 4数值向量。 该软件将该因子乘以全局学习率,以确定该层的循环权重的学习率。例如,如果 中四个单独矩阵的学习率因子的值 输入门 忘记门 细胞的候选人 输出门 若要为所有矩阵指定相同的值,请指定一个非负标量。 例子: 例子:trainingOptions
2
[1 2 1 1]
BiasLearnRateFactor
- - - - - -学习率因素偏差
1(默认)|负的标量|1乘4的数字向量
1
偏差的学习率因子,指定为非负标量或1 × 4数值向量。 该软件将该因子乘以全局学习率,以确定该层偏差的学习率。例如,如果 来控制学习率因子的值为四个单独的向量 输入门 忘记门 细胞的候选人 输出门 若要为所有向量指定相同的值,请指定一个非负标量。 例子: 例子:trainingOptions
2
[1 2 1 1]
InputWeightsL2Factor
- - - - - -输入权重的L2正则化因子
1(默认)|数字标量|1乘4的数字向量
1
输入权重的L2正则化因子,指定为数值标量或1 × 4数值向量。 该软件将该因子乘以全局L2正则化因子,以确定该层输入权重的L2正则化因子。例如,如果 中四个单独矩阵的L2正则化因子的值 输入门 忘记门 细胞的候选人 输出门 若要为所有矩阵指定相同的值,请指定一个非负标量。 例子: 例子:trainingOptions
2
[1 2 1 1]
RecurrentWeightsL2Factor
- - - - - -L2正则化因子用于循环权重
1(默认)|数字标量|1乘4的数字向量
1
用于循环权重的L2正则化因子,指定为数值标量或1 × 4数值向量。 该软件将该因子乘以全局L2正则化因子,以确定该层的循环权重的L2正则化因子。例如,如果 中四个单独矩阵的L2正则化因子的值 输入门 忘记门 细胞的候选人 输出门 若要为所有矩阵指定相同的值,请指定一个非负标量。 例子: 例子:trainingOptions
2
[1 2 1 1]
BiasL2Factor
- - - - - -偏差的L2正则化因子
0(默认)|负的标量|1乘4的数字向量
0
偏差的L2正则化因子,指定为非负标量或1 × 4数值向量。 软件将这个因子乘以全局 中四个单独向量的L2正则化因子的值 输入门 忘记门 细胞的候选人 输出门 若要为所有向量指定相同的值,请指定一个非负标量。 例子: 例子:trainingOptions
2
[1 2 1 1]
层
的名字
- - - - - -层的名字
''
(默认)|特征向量|字符串标量
层名,指定为字符向量或字符串标量。为层数组输入时,trainNetwork,assembleNetwork,layerGraph,dlnetwork函数自动为具有name的层分配名称''.
数据类型:字符|字符串
NumInputs
- - - - - -输入数量
1
|3.
此属性是只读的。
该层的输入数量。
如果HasStateInputs属性是0(false),则该层有一个带有name的输入“在”,对应于输入数据。在本例中,该层使用HiddenState而且CellState属性用于层操作。
如果HasStateInputs属性是1(true),则该层有三个带有名称的输入“在”,“隐藏”,“细胞”,分别对应输入数据、隐藏状态和单元格状态。在这种情况下,该层使用传递给这些输入的值进行层操作。如果HasStateInputs是1(正确),然后HiddenState而且CellState属性必须为空。
数据类型:双
InputNames
- - - - - -输入名字
{'在'}
|{‘在’,‘隐藏’,‘细胞’}
此属性是只读的。
输入层的名称。
如果HasStateInputs属性是0(false),则该层有一个带有name的输入“在”,对应于输入数据。在本例中,该层使用HiddenState而且CellState属性用于层操作。
如果HasStateInputs属性是1(true),则该层有三个带有名称的输入“在”,“隐藏”,“细胞”,分别对应输入数据、隐藏状态和单元格状态。在这种情况下,该层使用传递给这些输入的值进行层操作。如果HasStateInputs是1(正确),然后HiddenState而且CellState属性必须为空。
NumOutputs
- - - - - -输出数
1
|3.
此属性是只读的。
层的输出数量。
如果HasStateOutputs属性是0(false),则该层有一个带有name的输出“出”,对应输出数据。
如果HasStateOutputs属性是1(true),则该层有三个带有名称的输出“出”,“隐藏”,“细胞”,分别对应输出数据、隐藏状态和单元格状态。在这种情况下,该层还输出在层操作期间计算的状态值。
数据类型:双
OutputNames
- - - - - -输出的名字
{“出”}
|{‘出来’,‘隐藏’,‘细胞’}
此属性是只读的。
输出层的名称。
如果HasStateOutputs属性是0(false),则该层有一个带有name的输出“出”,对应输出数据。
如果HasStateOutputs属性是1(true),则该层有三个带有名称的输出“出”,“隐藏”,“细胞”,分别对应输出数据、隐藏状态和单元格状态。在这种情况下,该层还输出在层操作期间计算的状态值。
的名字
- - - - - -层的名字
''
(默认)|特征向量|字符串标量
''
(默认)|层名,指定为字符向量或字符串标量。为
数据类型:字符
NumInputs
- - - - - -输入数量
1
|3.
1
|3.
此属性是只读的。 该层的输入数量。 如果 如果 数据类型:双
InputNames
- - - - - -输入名字
{'在'}
|{‘在’,‘隐藏’,‘细胞’}
{'在'}
|{‘在’,‘隐藏’,‘细胞’}
此属性是只读的。 输入层的名称。 如果 如果
NumOutputs
- - - - - -输出数
1
|3.
1
|3.
此属性是只读的。 层的输出数量。 如果 如果 数据类型:双
OutputNames
- - - - - -输出的名字
{“出”}
|{‘出来’,‘隐藏’,‘细胞’}
{“出”}
|{‘出来’,‘隐藏’,‘细胞’}
此属性是只读的。 输出层的名称。 如果 如果
例子
创建LSTM层
创建一个LSTM层“lstm1”还有100个隐藏单位。
层= lstmLayer(100,“名字”,“lstm1”)
layer = LSTMLayer with properties: Name: 'lstm1' InputNames: {'in'} OutputNames: {'out'} NumInputs: 1 NumOutputs: 1 HasStateInputs: 0 HasStateOutputs: 0 Hyperparameters InputSize: 'auto' NumHiddenUnits: 100 OutputMode: 'sequence' statactivationfunction: 'tanh' GateActivationFunction: 'sigmoid' Learnable Parameters inputwights: [] recurrentwights: [] Bias: [] State Parameters HiddenState: [] CellState:[]显示所有属性
中包含LSTM层层数组中。
inputSize = 12;numHiddenUnits = 100;numClasses = 9;层= [...sequenceInputLayer(inputSize) lstmLayer(numHiddenUnits) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer]
2”LSTM LSTM 100个隐藏单元3”全连接9全连接层4”Softmax Softmax 5”分类输出crossentropyex
序列分类训练网络
训练深度学习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”)
定义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,图层,选项);
加载测试集并将序列分类到扬声器中。
[XTest,YTest] =日本evowelstestdata;
分类测试数据。指定用于训练的相同的小批大小。
YPred = category (net,XTest,“MiniBatchSize”, miniBatchSize);
计算预测的分类精度。
acc = sum(YPred == YTest)./ nummel (YTest)
Acc = 0.9595
分类LSTM网络
要创建用于序列到标签分类的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层、全连接层和回归输出层的层数组。
将序列输入层的大小设置为输入数据的特征数量。将全连接层的大小设置为响应的数量。您不需要指定序列长度。
对于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;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层
创建一个LSTM层 中包含LSTM层层= lstmLayer(100,
layer = LSTMLayer with properties: Name: 'lstm1' InputNames: {'in'} OutputNames: {'out'} NumInputs: 1 NumOutputs: 1 HasStateInputs: 0 HasStateOutputs: 0 Hyperparameters InputSize: 'auto' NumHiddenUnits: 100 OutputMode: 'sequence' statactivationfunction: 'tanh' GateActivationFunction: 'sigmoid' Learnable Parameters inputwights: [] recurrentwights: [] Bias: [] State Parameters HiddenState: [] CellState:[]显示所有属性
inputSize = 12;numHiddenUnits = 100;numClasses = 9;层= [
2”LSTM LSTM 100个隐藏单元3”全连接9全连接层4”Softmax Softmax 5”分类输出crossentropyex
序列分类训练网络
训练深度学习LSTM网络进行序列到标签分类。 按照[1]和[2]中的描述加载Japanese Vowels数据集。 把第一个时间序列想象成一个图形。每一行对应一个特征。 定义LSTM网络体系结构。将输入大小指定为12(输入数据的特征数量)。指定一个LSTM层有100个隐藏单元,并输出序列的最后一个元素。最后,指定9个类,包括大小为9的全连接层,然后是softmax层和分类层。 指定培训选项。指定求解器为 因为迷你批的数量小,序列短,所以CPU更适合训练。集 使用指定的培训选项对LSTM网络进行培训。 加载测试集并将序列分类到扬声器中。 分类测试数据。指定用于训练的相同的小批大小。 计算预测的分类精度。[XTrain,YTrain] =日本evowelstraindata;
图形图(XTrain{1}')
inputSize = 12;numHiddenUnits = 100;numClasses = 9;层= [
2”LSTM LSTM 100个隐藏单元3”全连接9全连接层4”Softmax Softmax 5”分类输出crossentropyex
maxEpochs = 70;miniBatchSize = 27;选项= trainingOptions(
net = trainNetwork(XTrain,YTrain,图层,选项);
[XTest,YTest] =日本evowelstestdata;
YPred = category (net,XTest,
acc = sum(YPred == YTest)./ nummel (YTest)
Acc = 0.9595
分类LSTM网络
要创建用于序列到标签分类的LSTM网络,请创建一个层数组,其中包含序列输入层、LSTM层、全连接层、softmax层和分类输出层。 将序列输入层的大小设置为输入数据的特征数量。将全连接层的大小设置为类的数量。您不需要指定序列长度。 对于LSTM层,指定隐藏单元的数量和输出模式 有关演示如何训练LSTM网络进行序列到标签分类和对新数据进行分类的示例,请参见 如果要创建用于序列到序列分类的LSTM网络,请使用与序列到标签分类相同的架构,但将LSTM层的输出模式设置为numFeatures = 12;numHiddenUnits = 100;numClasses = 9;层= [
numFeatures = 12;numHiddenUnits = 100;numClasses = 9;层= [
回归LSTM网络
要创建用于序列对一回归的LSTM网络,请创建一个包含序列输入层、LSTM层、全连接层和回归输出层的层数组。 将序列输入层的大小设置为输入数据的特征数量。将全连接层的大小设置为响应的数量。您不需要指定序列长度。 对于LSTM层,指定隐藏单元的数量和输出模式 要创建用于序列到序列回归的LSTM网络,请使用与序列到一回归相同的体系结构,但将LSTM层的输出模式设置为 有关演示如何训练LSTM网络进行序列到序列回归和对新数据进行预测的示例,请参见numFeatures = 12;numHiddenUnits = 125;numResponses = 1;层= [
numFeatures = 12;numHiddenUnits = 125;numResponses = 1;层= [
更深层次的LSTM网络
通过使用输出模式插入额外的LSTM层,可以使LSTM网络更深 对于序列到标签的分类网络,最后一层LSTM的输出模式必须为 对于序列到序列的分类网络,最后一层LSTM的输出模式必须为numFeatures = 12;numhiddenunit1 = 125;numhiddenunit2 = 100;numClasses = 9;层= [
numFeatures = 12;numhiddenunit1 = 125;numhiddenunit2 = 100;numClasses = 9;层= [
算法
长短期记忆层
LSTM层学习时间序列和序列数据中时间步长之间的长期依赖关系。
层的状态由隐藏状态(也称为输出状态)及细胞状态.时间步长的隐藏状态t包含这个时间步骤的LSTM层的输出。单元格状态包含从前面的时间步骤中学到的信息。在每个时间步骤中,该层向单元格状态中添加信息或从单元格状态中删除信息。该层使用盖茨.
下面的组件控制层的单元格状态和隐藏状态。
组件
目的
输入门(我)
单元格状态更新的控制级别
忘记大门(f)
单元格状态重置的控制级别(忘记)
候选单元(g)
向单元格状态添加信息
输出门(o)
添加到隐藏状态的单元格状态的控制级别
该图说明了时间步长的数据流t.该图强调了门是如何忘记、更新和输出单元格和隐藏状态的。
LSTM层的可学习权值就是输入权值W(InputWeights),即循环权值R(RecurrentWeights),以及偏差b(偏见).的矩阵W,R,b分别是输入权值、循环权值和每个分量的偏置的连接。这些矩阵连接如下:
在哪里我,f,g,o分别表示输入门、遗忘门、单元格候选门和输出门。
单元格在时间步长的状态t是由
在哪里
表示阿达玛乘积(向量的逐元素乘法)。
时间步长的隐藏状态t是由
在哪里
表示状态激活函数。的lstmLayer函数默认使用双曲正切函数(tanh)来计算状态激活函数。
下式描述了时间步长的分量t.
组件
公式
输入门
忘记门
细胞的候选人
输出门
在这些计算中,
表示门激活函数。的lstmLayer函数在默认情况下使用的sigmoid函数
计算门激活函数。
图层输入和输出格式
层数组或层图中的层传递指定为格式化的数据dlarray对象。
你可以与它们交互dlarray自动区分工作流中的对象,例如在开发自定义层时,使用functionLayer对象,或使用向前而且预测功能与dlnetwork对象。
的支持输入格式万博1manbetxLSTMLayer对象和相应的输出格式。类的自定义层,该自定义层不继承nnet.layer.Formattable类,或FunctionLayer对象的Formattable选项设置为假,则该层接收一个未格式化的dlarray对象,其尺寸顺序对应于本表中概述的格式。
输入格式
OutputMode
输出格式
“CB”(通道、批处理)
“序列”
“CB”(通道、批处理)
“最后一次”
“认知行为治疗”(通道、批次、时间)
“序列”
“认知行为治疗”(通道、批次、时间)
“最后一次”
“CB”(通道、批处理)
在dlnetwork对象,LSTMLayer对象还支持以下输入和输出格万博1manbetx式组合。
输入格式
OutputMode
输出格式
“渣打银行”(空间、通道、批次)
“序列”
“CB”(通道、批处理)
“最后一次”
“SSCB”(空间,空间,通道)
“序列”
“CB”(通道、批处理)
“最后一次”
“SSSCB”(空间,空间,空间,通道)
“序列”
“CB”(通道、批处理)
“最后一次”
“SCBT”(空间、通道、批次)
“序列”
“认知行为治疗”(通道、批次、时间)
“最后一次”
“CB”(通道、批处理)
“SSCBT”(空间、空间、通道、批次、时间)
“序列”
“认知行为治疗”(通道、批次、时间)
“最后一次”
“CB”(通道、批处理)
“SSSCBT”(空间、空间、空间、通道、批次、时间)
“序列”
“认知行为治疗”(通道、批次、时间)
“最后一次”
“CB”(通道、批处理)
中使用这些输入格式trainNetwork工作流中,首先将数据转换为“认知行为治疗”(通道,批次,时间)格式使用flattenLayer.
如果HasStateInputs属性是1(true),则该层有两个带有名称的额外输入“隐藏”而且“细胞”,分别对应隐藏状态和单元格状态。这些额外的输入需要输入格式“CB”(频道,批处理)。
如果HasStateOutputs属性是1(true),则该层有两个带有名称的额外输出“隐藏”而且“细胞”,分别对应隐藏状态和单元格状态。这些附加输出具有输出格式“CB”(频道,批处理)。
长短期记忆层
LSTM层学习时间序列和序列数据中时间步长之间的长期依赖关系。
层的状态由隐藏状态(也称为输出状态)及细胞状态.时间步长的隐藏状态t包含这个时间步骤的LSTM层的输出。单元格状态包含从前面的时间步骤中学到的信息。在每个时间步骤中,该层向单元格状态中添加信息或从单元格状态中删除信息。该层使用盖茨.
下面的组件控制层的单元格状态和隐藏状态。
组件
目的
输入门(我)
单元格状态更新的控制级别
忘记大门(f)
单元格状态重置的控制级别(忘记)
候选单元(g)
向单元格状态添加信息
输出门(o)
添加到隐藏状态的单元格状态的控制级别
该图说明了时间步长的数据流t.该图强调了门是如何忘记、更新和输出单元格和隐藏状态的。
LSTM层的可学习权值就是输入权值W(InputWeights),即循环权值R(RecurrentWeights),以及偏差b(偏见).的矩阵W,R,b分别是输入权值、循环权值和每个分量的偏置的连接。这些矩阵连接如下:
在哪里我,f,g,o分别表示输入门、遗忘门、单元格候选门和输出门。
单元格在时间步长的状态t是由
在哪里
表示阿达玛乘积(向量的逐元素乘法)。
时间步长的隐藏状态t是由
在哪里
表示状态激活函数。的lstmLayer函数默认使用双曲正切函数(tanh)来计算状态激活函数。
下式描述了时间步长的分量t.
组件
公式
输入门
忘记门
细胞的候选人
输出门
在这些计算中,
表示门激活函数。的lstmLayer函数在默认情况下使用的sigmoid函数
计算门激活函数。
LSTM层学习时间序列和序列数据中时间步长之间的长期依赖关系。
层的状态由 下面的组件控制层的单元格状态和隐藏状态。 该图说明了时间步长的数据流 LSTM层的可学习权值就是输入权值
在哪里 单元格在时间步长的状态
在哪里 时间步长的隐藏状态
在哪里 下式描述了时间步长的分量 在这些计算中,
组件 目的
输入门( 单元格状态更新的控制级别
忘记大门( 单元格状态重置的控制级别(忘记)
候选单元( 向单元格状态添加信息
输出门( 添加到隐藏状态的单元格状态的控制级别
组件 公式
输入门
忘记门
细胞的候选人
输出门
图层输入和输出格式
层数组或层图中的层传递指定为格式化的数据dlarray对象。
你可以与它们交互dlarray自动区分工作流中的对象,例如在开发自定义层时,使用functionLayer对象,或使用向前而且预测功能与dlnetwork对象。
的支持输入格式万博1manbetxLSTMLayer对象和相应的输出格式。类的自定义层,该自定义层不继承nnet.layer.Formattable类,或FunctionLayer对象的Formattable选项设置为假,则该层接收一个未格式化的dlarray对象,其尺寸顺序对应于本表中概述的格式。
输入格式
OutputMode
输出格式
“CB”(通道、批处理)
“序列”
“CB”(通道、批处理)
“最后一次”
“认知行为治疗”(通道、批次、时间)
“序列”
“认知行为治疗”(通道、批次、时间)
“最后一次”
“CB”(通道、批处理)
在dlnetwork对象,LSTMLayer对象还支持以下输入和输出格万博1manbetx式组合。
输入格式
OutputMode
输出格式
“渣打银行”(空间、通道、批次)
“序列”
“CB”(通道、批处理)
“最后一次”
“SSCB”(空间,空间,通道)
“序列”
“CB”(通道、批处理)
“最后一次”
“SSSCB”(空间,空间,空间,通道)
“序列”
“CB”(通道、批处理)
“最后一次”
“SCBT”(空间、通道、批次)
“序列”
“认知行为治疗”(通道、批次、时间)
“最后一次”
“CB”(通道、批处理)
“SSCBT”(空间、空间、通道、批次、时间)
“序列”
“认知行为治疗”(通道、批次、时间)
“最后一次”
“CB”(通道、批处理)
“SSSCBT”(空间、空间、空间、通道、批次、时间)
“序列”
“认知行为治疗”(通道、批次、时间)
“最后一次”
“CB”(通道、批处理)
中使用这些输入格式trainNetwork工作流中,首先将数据转换为“认知行为治疗”(通道,批次,时间)格式使用flattenLayer.
如果HasStateInputs属性是1(true),则该层有两个带有名称的额外输入“隐藏”而且“细胞”,分别对应隐藏状态和单元格状态。这些额外的输入需要输入格式“CB”(频道,批处理)。
如果HasStateOutputs属性是1(true),则该层有两个带有名称的额外输出“隐藏”而且“细胞”,分别对应隐藏状态和单元格状态。这些附加输出具有输出格式“CB”(频道,批处理)。
层数组或层图中的层传递指定为格式化的数据 你可以与它们交互 的支持输入格式万博1manbetx 在 中使用这些输入格式 如果 如果
输入格式 OutputMode
输出格式
“CB”
“序列”
“CB”
“最后一次”
“认知行为治疗”
“序列”
“认知行为治疗”
“最后一次”
“CB”
输入格式 OutputMode
输出格式
“渣打银行”
“序列”
“CB”
“最后一次”
“SSCB”
“序列”
“CB”
“最后一次”
“SSSCB”
“序列”
“CB”
“最后一次”
“SCBT”
“序列”
“认知行为治疗”
“最后一次”
“CB”
“SSCBT”
“序列”
“认知行为治疗”
“最后一次”
“CB”
“SSSCBT”
“序列”
“认知行为治疗”
“最后一次”
“CB”
参考文献
[1]工藤M.,富山J.,辛波M.。“使用穿过区域的多维曲线分类”模式识别信.第20卷,11-13号,第1103-1111页。
[2]UCI机器学习库:日语元音数据集.https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
[3] Hochreiter, S .和J. Schmidhuber, 1997。长短期记忆。神经计算, 9(8),第1735 - 1780页。
格洛洛特,泽维尔,还有约书亚·本吉奥。《理解深度前馈神经网络训练的难度》在第十三届人工智能与统计国际会议论文集, 249 - 356。撒丁岛,意大利:AISTATS, 2010。
[5]何开明,张翔宇,任少卿,孙健。“深入研究整流器:在ImageNet分类上超越人类水平的性能。”在2015年IEEE计算机视觉国际会议论文集, 1026 - 1034。华盛顿:IEEE计算机视觉学会,2015。
Saxe, Andrew M., James L. McClelland, Surya Ganguli。“深度线性神经万博 尤文图斯网络中非线性学习动力学的精确解。”arXiv预打印arXiv:1312.6120(2013)。
[1]工藤M.,富山J.,辛波M.。“使用穿过区域的多维曲线分类”
[2]
[3] Hochreiter, S .和J. Schmidhuber, 1997。长短期记忆。
格洛洛特,泽维尔,还有约书亚·本吉奥。《理解深度前馈神经网络训练的难度》在
[5]何开明,张翔宇,任少卿,孙健。“深入研究整流器:在ImageNet分类上超越人类水平的性能。”在
Saxe, Andrew M., James L. McClelland, Surya Ganguli。“深度线性神经万博 尤文图斯网络中非线性学习动力学的精确解。”
扩展功能
C/ c++代码生成使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
当用Intel生成代码时®MKL-DNN:
的StateActivationFunction属性必须设置为的双曲正切.
的GateActivationFunction属性必须设置为“乙状结肠”.
的HasStateInputs而且HasStateOutputs属性必须设置为0(假)。
GPU代码生成使用GPU Coder™为NVIDIA®GPU生成CUDA®代码。
使用注意事项和限制:
对于GPU代码生成,使用StateActivationFunction属性必须设置为的双曲正切.
对于GPU代码生成,使用GateActivationFunction属性必须设置为“乙状结肠”.
的HasStateInputs而且HasStateOutputs属性必须设置为0(假)。
C/ c++代码生成使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
当用Intel生成代码时 的 的 的
GPU代码生成使用GPU Coder™为NVIDIA®GPU生成CUDA®代码。
使用注意事项和限制: 对于GPU代码生成,使用 对于GPU代码生成,使用 的
版本历史
在R2017b中引入
R2019a:默认输入权重初始化为gloria
R2019a的行为发生了变化
从R2019a开始,默认情况下,软件使用Glorot初始化器初始化该层的层输入权重。这种行为有助于稳定训练,通常会减少深度网络的训练时间。
在以前的版本中,软件在默认情况下,使用从均值为零,方差为0.01的正态分布中采样来初始化层输入权重。要重现此行为,请设置“InputWeightsInitializer”图层的选项“narrow-normal”.
R2019a:默认循环权重初始化是正交的
R2019a的行为发生了变化
从R2019a开始,默认情况下,软件初始化该层的层循环权值为问的QR分解给出的正交矩阵Z=问R对于一个随机矩阵Z从单位正态分布抽样。这种行为有助于稳定训练,通常会减少深度网络的训练时间。
在以前的版本中,软件在默认情况下,通过从均值为零,方差为0.01的正态分布中采样来初始化层循环权重。要重现此行为,请设置“RecurrentWeightsInitializer”图层的选项“narrow-normal”.
R2019a:默认输入权重初始化为gloria
R2019a的行为发生了变化
从R2019a开始,默认情况下,软件使用Glorot初始化器初始化该层的层输入权重。这种行为有助于稳定训练,通常会减少深度网络的训练时间。
在以前的版本中,软件在默认情况下,使用从均值为零,方差为0.01的正态分布中采样来初始化层输入权重。要重现此行为,请设置“InputWeightsInitializer”图层的选项“narrow-normal”.
R2019a的行为发生了变化
从R2019a开始,默认情况下,软件使用Glorot初始化器初始化该层的层输入权重。这种行为有助于稳定训练,通常会减少深度网络的训练时间。 在以前的版本中,软件在默认情况下,使用从均值为零,方差为0.01的正态分布中采样来初始化层输入权重。要重现此行为,请设置
R2019a:默认循环权重初始化是正交的
R2019a的行为发生了变化
从R2019a开始,默认情况下,软件初始化该层的层循环权值为问的QR分解给出的正交矩阵Z=问R对于一个随机矩阵Z从单位正态分布抽样。这种行为有助于稳定训练,通常会减少深度网络的训练时间。
在以前的版本中,软件在默认情况下,通过从均值为零,方差为0.01的正态分布中采样来初始化层循环权重。要重现此行为,请设置“RecurrentWeightsInitializer”图层的选项“narrow-normal”.
R2019a的行为发生了变化
从R2019a开始,默认情况下,软件初始化该层的层循环权值为 在以前的版本中,软件在默认情况下,通过从均值为零,方差为0.01的正态分布中采样来初始化层循环权重。要重现此行为,请设置
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB: 弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站: 选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。如何获得最佳的网站性能
欧洲