主要内容

lstm

长时间的短期记忆

描述

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

请注意

该函数应用深度学习LSTM操作dlarray数据。如果您想在layerGraph对象或数组,使用下面的图层:

例子

海底= lstm (dlXH0C0权重recurrentWeights偏见将长短期记忆(LSTM)计算应用于输入dlX使用初始隐藏状态H0,初始细胞状态C0和参数权重recurrentWeights,偏见.输入dlX必须是格式化的dlarray.输出海底是一个格式化的dlarray使用相同的维度格式dlX,除了任何“年代”维度。

lstm函数使用双曲正切函数(tanh)作为状态激活函数来更新单元格和隐藏状态。的lstm函数使用给出的s形函数 σ x 1 + e x 1 作为门的激活功能。

海底hiddenStatecellState) = lstm (dlXH0C0权重recurrentWeights偏见也在LSTM操作后返回隐藏状态和单元格状态。

___) = lstm (___“DataFormat”,FMT还指定维度格式FMTdlX不是格式化的dlarray.输出海底是一个非格式化dlarray尺寸顺序和dlX,除了任何“年代”维度。

例子

全部折叠

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

创建输入序列数据为32个观测值,10个通道,序列长度为64

numFeatures = 10;numObservations = 32;sequenceLength = 64;X = randn (numFeatures numObservations sequenceLength);dlX = dlarray (X,“认知行为治疗”);

用三个隐藏单元创建初始隐藏和单元格状态。对所有观察使用相同的初始隐藏状态和单元格状态。

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

为LSTM操作创建可学习的参数。

重量= dlarray (randn (4 * numHiddenUnits numFeatures),“铜”);recurrentWeights = dlarray (randn (4 * numHiddenUnits numHiddenUnits),“铜”);偏见= dlarray (randn (4 * numHiddenUnits, 1),“C”);

执行LSTM计算

[海底,hiddenState cellState] = lstm (H0 dlX, C0、重量、recurrentWeights偏差);

查看的大小和尺寸海底

大小(海底)
ans =1×332 64
dlY.dims
ans =“认知行为治疗”

查看hiddenStatecellState

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

检查输出hiddenState是否与输出的最后一个时间步长相同海底

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

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

输入参数

全部折叠

输入数据,指定为格式化的dlarray,一个非格式化dlarray,或数字数组。当dlX不是格式化的dlarray,则必须使用FMT, DataFormat”.如果dlX是一个数字数组,至少是H0C0权重recurrentWeights,或偏见必须是一个dlarray

dlX必须包含一个序列维度标记“T”.如果dlX有标注空间尺寸吗“年代”,它们被压平成“C”通道尺寸。如果dlX没有通道维度,则添加一个。如果dlX是否有未指明的尺寸标注“U”,它们必须是单例的。

数据类型:|

初始隐藏状态向量,指定为格式化dlarray,一个非格式化dlarray,或数字数组。

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

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

如果H0a不是格式化的吗dlarray,第一个维度的大小决定了隐藏单元的数量,并且必须与第一个维度或“C”维度的C0

数据类型:|

初始单元格状态向量,指定为格式化的dlarray,一个非格式化dlarray,或数字数组。

如果C0是一个格式化的dlarray,它必须包含标记的通道维度“C”以及可选的批处理尺寸标记“B”和它的大小一样“B”维度的dlX.如果C0没有“B”维度时,函数对中的每个观测使用相同的单元格状态向量dlX

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

如果C0a不是格式化的吗dlarray,第一个维度的大小决定了隐藏单元的数量,并且必须与第一个维度或“C”维度的H0

数据类型:|

权重,指定为格式化的dlarray,一个非格式化dlarray,或数字数组。

指定权重作为大小矩阵4 * NumHiddenUnits——- - - - - -InputSize,在那里NumHiddenUnits尺码是多少“C”两个维度C0H0,InputSize尺码是多少“C”维度的dlX乘以每一个的大小“年代”维度的dlX,礼物。

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

数据类型:|

循环权值,指定为格式化的dlarray,一个非格式化dlarray,或数字数组。

指定recurrentWeights作为大小矩阵4 * NumHiddenUnits——- - - - - -NumHiddenUnits,在那里NumHiddenUnits尺码是多少“C”两个维度C0H0

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

数据类型:|

偏差,指定为格式化的dlarray,一个非格式化dlarray,或数字数组。

指定偏见作为一个长度向量4 * NumHiddenUnits,在那里NumHiddenUnits尺码是多少“C”两个维度C0H0

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

数据类型:|

未格式化输入数据的维度顺序,指定为逗号分隔对,由“DataFormat”以及字符数组或字符串FMT为数据的每个维度提供一个标签。每个字符在FMT必须是下列情况之一:

  • “年代”——空间

  • “C”——频道

  • “B”-批次(例如,样品和观察)

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

  • “U”——未指明的

您可以指定多个标注的维度“年代”“U”.你可以使用标签“C”“B”,“T”最多一次。

您必须指定FMT, DataFormat”当输入数据未格式化时dlarray

例子:“DataFormat”、“SSCB”

数据类型:字符|字符串

输出参数

全部折叠

LSTM输出,返回为dlarray.输出海底具有与输入相同的底层数据类型dlX

如果输入数据dlX是一个格式化的dlarray海底具有与?相同的维度格式dlX,除了任何“年代”维度。如果输入数据没有格式化dlarray海底是一个非格式化dlarray与输入数据的维度顺序相同。

尺寸“C”维度的海底与隐藏单元的数量相同,由“C”维度的H0C0

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

如果输入H0是一个格式化的dlarray,则输出hiddenState是一个格式化的dlarray的格式“CB”

每个观察的单元格状态向量,返回为dlarray或者一个数字数组。cellState以相同的数据类型返回C0

如果输入C0是一个格式化的dlarray,输出cellState作为格式化的dlarray的格式“CB”

限制

  • functionToLayerGraph不支持万博1manbetxlstm函数。如果你使用functionToLayerGraph的函数lstm操作,由此产生的LayerGraph包含占位符层。

更多关于

全部折叠

长时间的短期记忆

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

扩展功能

介绍了R2019b