主要内容

lstm

长时间的短期记忆

描述

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

笔记

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

例子

d= lstm (DLX.H0.C0.重量recurrentWeights偏见将长短期记忆(LSTM)计算应用于输入DLX.使用初始隐藏状态H0.,初始细胞状态C0.和参数重量recurrentWeights, 和偏见.输入DLX.必须是格式化的dlarray..输出d是一个格式化的dlarray.使用相同的维度格式DLX.,除了任何'方面。

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

[d隐静塔Cellstate.) = lstm (DLX.H0.C0.重量recurrentWeights偏见也在LSTM操作后返回隐藏状态和单元格状态。

[___) = lstm (___“DataFormat”,FMT.还指定维度格式FMT.DLX.不是格式化的dlarray..输出d是一个无格式化的人dlarray.尺寸顺序和DLX.,除了任何'方面。

例子

全部收缩

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

将输入序列数据创建为具有10个通道的32个观察,序列长度为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 * numhidentunits,1),“C”);

执行LSTM计算

[dly,hiddenstate,cellstate] = LSTM(DLX,H0,C0,重量,复制重量,偏差);

查看尺寸和尺寸d

尺寸(dly)
ans =.1×3.32 64
dly.dims.
ans ='cbt'

查看尺寸隐静塔Cellstate.

尺寸(暗息)
ans =.1×23 32.
尺寸(Cellstate)
ans =.1×23 32.

检查输出隐静塔是否与输出的最后一个时间步长相同d

如果extractdata(dlY(:,:,end)) == hiddenState"隐藏状态和最后的时间步长相等");别的disp (“隐藏状态和最后一次步骤不等于。”结尾
隐藏状态与最后时间步长相等。

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

输入参数

全部收缩

输入数据,指定为格式化的dlarray.,一个不可格式化的人dlarray.或数字数组。什么时候DLX.不是格式化的dlarray.,您必须使用尺寸标签格式使用FMT, DataFormat”.如果DLX.是一个数字数组,至少是H0.C0.重量recurrentWeights,或偏见必须是A.dlarray.

DLX.必须包含一个序列维度标记'T'.如果DLX.有任何标记的空间尺寸',它们被压平成“C”通道尺寸。如果DLX.没有频道维度,然后添加一个。如果DLX.有标记的任何未指定的尺寸'U',他们必须是单身。

数据类型:|

初始隐藏状态向量,指定为格式化dlarray.,一个不可格式化的人dlarray.或数字数组。

如果H0.是一个格式化的dlarray.,它必须包含标有频道维度“C”以及可选的批处理尺寸标记“B”与尺寸相同“B”维度的DLX..如果H0.没有“B”维度,该函数使用相同的隐藏状态向量为每个观察DLX.

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

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

数据类型:|

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

如果C0.是一个格式化的dlarray.,它必须包含标有频道维度“C”以及可选的批处理尺寸标记“B”与尺寸相同“B”维度的DLX..如果C0.没有“B”尺寸,该函数使用相同的单元格状态向量为每个观察DLX.

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

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

数据类型:|

权重,指定为格式化的dlarray.,一个不可格式化的人dlarray.或数字数组。

指定重量作为大小的矩阵4 * NumHiddenUnits——- - - - - -InputSize,在那里NumHiddenUnits尺码是多少“C”两者的维度C0.H0., 和InputSize尺码是多少“C”维度的DLX.乘以每个的大小'维度的DLX.在现有的地方。

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

数据类型:|

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

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

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

数据类型:|

偏差,指定为格式化的dlarray.,一个不可格式化的人dlarray.或数字数组。

指定偏见作为长度的矢量4 * NumHiddenUnits,在那里NumHiddenUnits尺码是多少“C”两者的维度C0.H0.

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

数据类型:|

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

  • '——空间

  • “C”——频道

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

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

  • 'U'——未指明的

您可以指定标记的多个维度'或者'U'.你可以使用标签“C”“B”, 和'T'最多一次。

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

例子:'dataformat','sscb'

数据类型:字符|字符串

输出参数

全部收缩

LSTM输出,作为一个返回dlarray..输出d具有与输入相同的底层数据类型DLX.

如果输入数据DLX.是一个格式化的dlarray.d具有与?相同的维度格式DLX.,除了任何'方面。如果输入数据不是格式化的dlarray.d是一个无格式化的人dlarray.与输入数据相同的维度顺序。

大小“C”维度的d与隐藏单元的数量相同,由大小指定“C”维度的H0.或者C0.

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

如果输入H0.是一个格式化的dlarray.,然后输出隐静塔是一个格式化的dlarray.格式“CB”

每个观察的细胞状态向量,返回为adlarray.或者一个数字数组。Cellstate.以相同的数据类型返回C0.

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

限制

  • functiontolayergraph.不支持金宝applstm功能。如果你使用functiontolayergraph.的函数lstm操作,由此产生分层图包含占位符层。

更多关于

全部收缩

长时间的短期记忆

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

扩展功能

在R2019B中介绍