lstm

长时间的短期记忆

描述

长短期记忆(LSTM)操作允许网络学习时间序列中的时间步长和序列数据之间的长期依赖关系。

注意

该函数将深度学习LSTM操作应用于dlarray数据。如果您想应用一个LSTM操作layerGraph对象或阵列,使用下列层:

DLY= lstm (DLXH0C0权重recurrentWeights偏见对输入应用长短期内存(LSTM)计算DLX使用初始隐藏状态H0,初始小区状态C0和参数权重recurrentWeights偏见。输入DLX是一个格式化的dlarray同尺寸的标签。输出DLY是一个格式化的dlarray与。相同的维度标签DLX,除了任何'S'尺寸。

lstm函数使用双曲正切函数(tanh)作为状态激活函数更新单元格和隐藏状态。该lstm功能使用给出的双曲线函数 σ X = 1 + Ë - X - 1 作为门激活功能。

[DLYhiddenStatecellState)= lstm (DLXH0C0权重recurrentWeights偏见还返回LSTM操作后的隐藏状态和单元格状态。

[___)= lstm (___“DataFormat”,FMT还指定尺寸格式FMTDLX是不是一个格式化dlarray。输出DLY是一个未格式化dlarray与。相同的维度顺序DLX,除了任何'S'尺寸。

例子

全部收缩

执行使用三个隐藏单元的LSTM操作。

32个观察与10个信道和64的序列长度创建输入序列数据

numFeatures = 10;numObservations = 32;sequenceLength = 64;X = randn (numFeatures numObservations sequenceLength);dlX = dlarray (X,'CBT');

有三个隐藏单位创建初始的隐蔽性和细胞状态。使用相同的初始隐藏状态和电池状态的所有观测值。

numHiddenUnits = 3;H0 = 0 (numHiddenUnits, 1);C0 = 0 (numHiddenUnits, 1);

创建用于LSTM操作可以学习的参数。

重量= dlarray (randn (4 * numHiddenUnits numFeatures),'CU');recurrentWeights = dlarray (randn (4 * numHiddenUnits numHiddenUnits),'CU');偏压= dlarray(randn(4 * numHiddenUnits,1),“C”);

执行LSTM计算

[DLY,hiddenState,cellState] = LSTM(DLX,H0,C0,重量,recurrentWeights,偏压);

查看大小和尺寸DLY

大小(DLY)
ANS =1×332 64
dlY.dims
ANS = 'CBT'

视图的大小hiddenStatecellState

大小(hiddenState)
ANS =1×23 32
大小(cellState)
ANS =1×23 32

检查输出hiddenState是相同的输出的最后时间步DLY

如果extractdata(dlY(:,:,end)) ="隐藏状态和最后一个时间步是相等的");其他disp (“隐藏的状态和最后的时间步长是不相等的。”结束
隐藏状态和最后一个时间步是相等的。

您可以使用隐藏状态和单元格状态来跟踪LSTM操作的状态,并输入进一步的顺序数据。

输入参数

全部收缩

输入数据,指定为dlarray有或没有维度标签或数字数组。当DLX是不是一个格式化dlarray,必须使用指定尺寸的标签格式FMT, DataFormat”。如果DLX是一个数字数组,至少一个H0C0权重recurrentWeights, 要么偏见必须是dlarray

DLX必须包含标记为?的序列维数'T'。如果DLX已任何空间尺寸标记'S'时,它们被夷为平地“C”通道的尺寸。如果DLX已任何未指定的尺寸标记'U',它们必须是单身。

数据类型:|

初始隐藏状态向量,指定为adlarray有或没有维度标签或数字数组。

如果H0是一个格式化的dlarray,它必须包含一个标记为通道尺寸“C”和可选标记的批处理尺寸“B”具有相同大小的“B”维度的DLX。如果H0没有“B”维,该函数使用同样的隐藏状态向量对每个观测DLX

的大小“C”维度决定隐藏单位的数量。的大小“C”维度的H0必须等于“C”尺寸C0

如果H0是不是格式化dlarray,第一维的大小决定了隐藏单位的数量,并且必须与第一维相同大小“C”维度的C0

数据类型:|

初始小区状态向量,指定为dlarray有或没有维度标签或数字数组。

如果C0是一个格式化的dlarray,它必须包含一个标记为通道尺寸“C”和可选标记的批处理尺寸“B”具有相同大小的“B”维度的DLX。如果C0没有“B”维,该函数使用相同的小区状态向量对每个观测DLX

的大小“C”维度决定隐藏单位的数量。的大小“C”维度的C0必须等于“C”尺寸H0

如果C0是不是格式化dlarray,第一维的大小决定了隐藏单位的数量,并且必须与第一维相同大小“C”维度的H0

数据类型:|

权重,指定为dlarray有或没有维度标签或数字数组。

指定权重作为大小的矩阵4 * NumHiddenUnits——- - - - - -InputSize,在那里NumHiddenUnits尺寸是多少“C”两者的尺寸C0H0InputSize尺寸是多少“C”维度的DLX乘以每个的大小'S'维度的DLX当存在。

如果权重是一个格式化的dlarray,它必须包含a“C”大小尺寸4 * NumHiddenUnits'U'大小尺寸InputSize

数据类型:|

经常性的权重,指定为dlarray有或没有维度标签或数字数组。

指定recurrentWeights作为大小的矩阵4 * NumHiddenUnits——- - - - - -NumHiddenUnits,在那里NumHiddenUnits尺寸是多少“C”两者的尺寸C0H0

如果recurrentWeights是一个格式化的dlarray,它必须包含a“C”大小尺寸4 * NumHiddenUnits'U'大小尺寸NumHiddenUnits

数据类型:|

偏差,用a表示dlarray矢量具有或不具有尺寸标签或一个数值向量。

指定偏见作为长度的矢量4 * NumHiddenUnits,在那里NumHiddenUnits尺寸是多少“C”两者的尺寸C0H0

如果偏见是一个格式化的dlarray,非单例维度必须标记为“C”

数据类型:|

未格式化的输入数据,指定为逗号分隔的一对组成的维序“DataFormat”和字符数组或字符串FMT它为数据的每个维度提供一个标签。每个字符在FMT必须符合下列条件之一:

  • 'S'——空间

  • “C”——频道

  • “B”- 批次(例如,样本和观测)

  • 'T'- 时间(例如,序列)

  • 'U'——未指明的

您可以指定标记多个维度'S'要么'U'。你可以使用标签“C”“B”'T'最多一次。

您必须指定FMT, DataFormat”当输入数据DLX是不是一个格式化dlarray

例子:'DATAFORMAT', '固态断路器'

数据类型:字符|字符串

输出参数

全部收缩

LSTM输出,返回为dlarray。输出DLY是否具有与输入相同的基础数据类型DLX

如果输入数据DLX是一个格式化的dlarrayDLY具有相同尺寸的标签DLX,除了任何'S'尺寸。如果输入的数据不是格式化dlarrayDLY是一个未格式化dlarray具有相同的维序作为输入数据。

的大小“C”维度的DLY是一样的隐藏单元的数量,通过的尺寸指定“C”维度的H0要么C0

每个观察的隐藏状态向量,返回为dlarray或具有相同数据类型的数字数组H0

如果输入H0是一个格式化的dlarray时,则输出hiddenState是一个格式化的dlarray与格式'CB'

对于每个观测细胞状态向量,返回为dlarray或者一个数字数组。cellState返回的数据类型与C0

如果输入C0是一个格式化的dlarray, 输出cellState返回为格式化dlarray与格式'CB'

限制

  • functionToLayerGraph不支持万博1manbetxlstm功能。如果您使用functionToLayerGraph的函数lstm操作时,所得LayerGraph包含占位符层。

更多关于

全部收缩

长时间的短期记忆

LSTM操作允许网络学习时间序列和序列数据中的时间步长之间的长期依赖关系。有关更多信息,请参见的定义长短-TEM存储层lstmLayer参考页面。

扩展功能

介绍了在R2019b