深度学习 | MATLAB Deep Learning Toolbox lstmLayer
目录
- 深度学习 | MATLAB Deep Learning Toolbox lstmLayer
- lstmLayer
- 网络特性
- 案例分析
- 拓展内容
- 参考资料
MATLAB Deep Learning Toolbox是深度学习工具箱,可以构建深度神经网络模型。实验表明MATLAB2020及以上是目前该工具箱较为完善版本。本文主要构建深度神经网络的lstmLayer 参数设置。
lstmLayer
- LSTM 层学习时间序列和序列数据中的时间步长之间的长期依赖关系。
- 该层执行加性交互,这有助于在训练期间改善长序列的梯度流。
%创建一个 LSTM 层并设置NumHiddenUnits属性。
layer = lstmLayer(numHiddenUnits)
%使用一个或多个名称-值对参数设置附加l OutputMode, Activations, State, Parameters and Initialization, Learn Rate and Regularization以及 Name属性。您可以指定多个名称-值对参数。将每个属性名称括在引号中。
layer = lstmLayer(numHiddenUnits,Name,Value)
网络特性
- LSTM
1.NumHiddenUnits—隐藏单元的数量
2.OutputMode—输出格式
'sequence' – 输出完整的序列。
'last' – 输出序列的最后一个时间步。
3.InputSize—输入大小
输入大小,指定为正整数或'auto'。如果InputSize是'auto',则软件会在训练时自动分配输入大小。
- 激活设置
1.StateActivationFunction—更新单元格和隐藏状态的激活函数
用于更新单元格和隐藏状态的激活函数,指定为下列值之一:
'tanh' – 使用双曲正切函数 (tanh)。
'softsign' – 使用信号功能
2.GateActivationFunction—应用于门的激活函数
'sigmoid' – 使用 sigmoid 函数
'hard-sigmoid' – 使用硬 sigmoid 函数
- 状态设定
1.CellState—细胞状态数值向量的初始值
细胞状态的初始值,指定为 NumHiddenUnits乘以 1 的数值向量。该值对应于时间步长 0 的细胞状态。
设置此属性后,调用该 resetState函数会将单元格状态设置为此值。
2.HiddenState—隐藏状态数值向量的初始值
隐藏状态的初始值,指定为NumHiddenUnits乘以 1 的数值向量。该值对应于时间步长 0 的隐藏状态。
设置此属性后,调用该resetState函数会将隐藏状态设置为此值。
- 参数和初始化
1.InputWeightsInitializer—初始化输入权重的函数
2.RecurrentWeightsInitializer—初始化循环权重的函数
3.BiasInitializer—初始化偏差的函数
4.InputWeights—输入权重,指定为矩阵。
输入权重矩阵是 LSTM 层中组件(门)的四个输入权重矩阵的串联。
四个矩阵按以下顺序垂直连接:输入门、遗忘门、候选细胞、输出门;
输入权重是可学习的参数。训练网络时,如果InputWeights为非空,
则trainNetwork使用该InputWeights属性作为初始值。
如果InputWeights为空,
则trainNetwork使用由指定的初始化程序InputWeightsInitializer。
在训练时,InputWeights是4*NumHiddenUnits-by-InputSize matrix矩阵。
5.RecurrentWeights—循环权重,矩阵组成同上;
循环权重是可学习的参数。
训练网络时,如果RecurrentWeights为非空,
则trainNetwork使用该RecurrentWeights属性作为初始值。
如果RecurrentWeights为空,
则trainNetwork使用由指定的初始化程序RecurrentWeightsInitializer。
在训练时RecurrentWeights 是4*NumHiddenUnits-by-NumHiddenUnits矩阵。
6.Bias—层偏差,矩阵组成同上;
层偏差是可学习的参数。训练网络时,
如果Bias为非空,则trainNetwork使用该Bias属性作为初始值。
如果Bias为空,则trainNetwork使用由指定的初始化程序BiasInitializer。
在训练时,Bias是一个 4*NumHiddenUnits乘以 1 的数值向量。
- 学习率和正则化
1.InputWeightsLearnRateFactor—输入权重的学习率因子
2.RecurrentWeightsLearnRateFactor—循环权重的学习率因子
3.BiasLearnRateFactor—偏差的学习率因子
4.InputWeightsL2Factor—输入权重1的L2正则化因子
5.RecurrentWeightsL2Factor—循环权重的L2正则化因子
6.BiasL2Factor—偏差的L2正则化因子
- Layer
1.Name—图层名称
图层名称,指定为字符向量或字符串标量。
要在图层图中包含图层,您必须指定一个非空的唯一图层名称。
如果训练一个带有层的系列网络并且 Name 设置为 '',那么软件会在训练时自动为层分配一个名称。
2.NumInputs—输入数量
0 (default)
层的输入数量。 该层没有输入。
3.InputNames—输入名称
{} (default)
输入图层名称。 该层没有输入。
4.NumOutputs—输出数量
(default)
层的输出数量。 该层只有一个输出。
5.OutputNames—输出名称
OutputNames — Output names
{'out'} (default)
图层的输出名称。 该层只有一个输出。
案例分析
- 分类任务
要创建用于序列到标签分类的 LSTM 网络,请创建一个包含序列输入层、LSTM 层、全连接层、softmax 层和分类输出层的层数组。将序列输入层的大小设置为输入数据的特征数。将全连接层的大小设置为类的数量。不需要指定序列长度。对于 LSTM 层,指定隐藏单元的数量和输出模式’last’。
numFeatures = 12;
numHiddenUnits = 100;
numClasses = 9;
layers = [ ...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits,'OutputMode','last')
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer];
%要为序列到序列分类创建 LSTM 网络,
%请使用与序列到标签分类相同的架构,但将 LSTM 层的输出模式设置为'sequence'。
numFeatures = 12;
numHiddenUnits = 100;
numClasses = 9;
layers = [ ...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits,'OutputMode','sequence')
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer];
- 回归任务
要为序列对一回归创建 LSTM 网络,请创建一个包含序列输入层、LSTM 层、全连接层和回归输出层的层数组。将序列输入层的大小设置为输入数据的特征数。将全连接层的大小设置为响应的数量。不需要指定序列长度。对于 LSTM 层,指定隐藏单元的数量和输出模式’last’。
numFeatures = 12;
numHiddenUnits = 125;
numResponses = 1;
layers = [ ...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits,'OutputMode','last')
fullyConnectedLayer(numResponses)
regressionLayer];
%要为序列到序列回归创建 LSTM 网络,
%请使用与序列到一回归相同的架构,但将 LSTM 层的输出模式设置为'sequence'。
numFeatures = 12;
numHiddenUnits = 125;
numResponses = 1;
layers = [ ...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits,'OutputMode','sequence')
fullyConnectedLayer(numResponses)
regressionLayer];
拓展内容
- ‘WorkerLoad’ - 并行工作负载划分
GPU 或 CPU 之间的并行工作负载分配,
指定为逗号分隔的对,由 'WorkerLoad' 和以下项之一组成:
从 0 到 1 的标量 - 每台机器上用于网络训练计算的工作人员的比例。
如果使用启用后台调度的小批量数据存储中的数据训练网络,
则剩余的工作人员会在后台获取和预处理数据。
正整数 - 每台机器上用于网络训练计算的工人数量。
如果您使用启用后台调度的小批量数据存储中的数据训练网络,
则剩余的工作人员会在后台获取和预处理数据。
数字向量 - 并行池中每个工作器的网络训练负载。
如果使用启用后台调度的小批量数据存储中的数据训练网络,
那么可以将工作负载分配为 0 以使用该工作在后台获取数据。
指定的向量必须包含并行池中的每个工作器一个值。
- ‘DispatchInBackground’ - 使用后台调度
使用后台调度(异步预取队列)从数据存储中读取训练数据,
指定为 false 或 true。
后台调度需要 Parallel Computing Toolbox。
DispatchInBackground 仅支持可分区的数据存储。
- Checkpoints、‘CheckpointPath’ - 保存检查点网络的路径
保存检查点网络的路径,
指定为逗号分隔的对组,其中包含 'CheckpointPath' 和一个字符向量。
如果不指定路径(即使用默认的“'”),
则软件不会保存任何检查点网络。
如果您指定路径,则 trainNetwork 在每个 epoch 之后
将检查点网络保存到此路径,并为每个网络分配一个唯一名称。
然后,您可以加载任何检查点网络并从该网络恢复训练。
如果该文件夹不存在,则必须先创建它,然后再指定保存检查点网络的路径。 如果您指定的路径不存在,则 trainingOptions 会返回错误。
有关保存网络检查点的更多信息,请参阅保存检查点网络和恢复训练。
示例:'CheckpointPath','C:\Temp\checkpoint'
- ‘OutputFcn’ - 输出函数,深度学习网络训练期间自定义输出
要在训练期间调用的输出函数,指定为逗号分隔的对组,
其中包含 'OutputFcn' 和一个函数句柄或函数句柄元胞数组。
trainNetwork 在训练开始前、每次迭代后和训练结束后调用指定函数一次。
如果某个字段未计算或与对输出函数的某个调用不相关,则该字段包含一个空数组。
使用输出函数来显示或绘制进度信息,或者停止训练。
要提前停止训练,请让您的输出函数返回 true。
如果任何输出函数返回true,则训练结束,trainNetwork返回最新的网络。 有关显示如何使用输出函数的示例,请参阅在深度学习网络训练期间自定义输出。
参考资料
标签:输出,lstmLayer,训练,网络,Deep,指定,MATLAB,序列,输入 From: https://blog.51cto.com/u_15735367/5940160[1]https://ww2.mathworks.cn/help/deeplearning/ref/nnet.cnn.layer.lstmlayer.html?s_tid=doc_ta
[2]UCI Machine Learning Repository: Japanese Vowels Dataset. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
[3] Hochreiter, S, and J. Schmidhuber, 1997. Long short-term memory. Neural computation, 9(8), pp.1735–1780.
[7] https://ww2.mathworks.cn/help/deeplearning/referencelist.html?type=function&category=index&s_tid=CRUX_topnav
[8] https://ww2.mathworks.cn/help/deeplearning/ref/nnet.cnn.layer.sequenceinputlayer.html