主要内容

lstm

长时间的短期记忆

描述

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

请注意

该函数将深度学习LSTM运算应用于dlarray数据。对象中应用LSTM操作layerGraph对象或数组,使用以下层:

例子

Y= lstm (XH0C0权重recurrentWeights偏见对输入进行长短期记忆(LSTM)计算X使用初始隐藏状态H0,初始单元状态C0和参数权重recurrentWeights,偏见.输入X必须是格式化的dlarray.输出Y是一个格式化的dlarray具有相同的尺寸格式X,除任何“年代”维度。

lstm函数使用双曲正切函数(tanh)作为状态激活函数更新单元格和隐藏状态。的lstm函数的sigmoid函数由 σ x 1 + e x 1 作为门激活函数。

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

___) = lstm (___“DataFormat”,FMT还指定维度格式FMTX不是格式化的dlarray.输出Y是一个非格式化dlarray具有相同的尺寸顺序X,除任何“年代”维度。

例子

全部折叠

使用三个隐藏单元执行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 =“认知行为治疗”

查看的大小hiddenState而且cellState

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

检查输出hiddenState是否与上次输出的时间步长相同海底

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

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

输入参数

全部折叠

输入数据,指定为格式化的dlarray,一个非格式化dlarray,或数字数组。当X不是格式化的dlarray,您必须使用指定尺寸标签格式FMT, DataFormat”.如果X一个数字数组,至少是其中之一H0C0权重recurrentWeights,或偏见必须是一个dlarray

X必须包含已标记的序列维度“T”.如果X有标注空间维度吗“年代”,它们被压扁成“C”通道尺寸。如果X没有通道维度,则添加通道维度。如果X是否有未指明的尺寸标注“U”,他们必须是独生子女。

数据类型:|

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

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

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

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

数据类型:|

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

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

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

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

数据类型:|

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

指定权重作为一个大小矩阵4 * NumHiddenUnits——- - - - - -InputSize,在那里NumHiddenUnits是尺寸的吗“C”两个维度C0而且H0,InputSize是尺寸的吗“C”维度的X乘以每一个的大小“年代”维度的X,礼物。

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

数据类型:|

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

指定recurrentWeights作为一个大小矩阵4 * NumHiddenUnits——- - - - - -NumHiddenUnits,在那里NumHiddenUnits是尺寸的吗“C”两个维度C0而且H0

如果recurrentWeights是一个格式化的dlarray,它必须包含“C”尺寸的大小4 * NumHiddenUnits和一个“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.输出Y是否与输入具有相同的基础数据类型X

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

的大小“C”维度的Y是否与隐藏单元的数量相同,由大小指定“C”维度的H0C0

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

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

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

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

限制

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

更多关于

全部折叠

长时间的短期记忆

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

扩展功能

版本历史

介绍了R2019b

Baidu
map