dynamic_lstm

    该OP实现了 LSTM,即 Long-Short Term Memory(长短期记忆)运算 - 。

    注解

    • 该OP仅支持 LoDTensor 作为输入,如果您需要处理的是Tensor,请使用 lstm

    • 在实现的时候为了提升效率,用户必须将LSTM的输入先进行线性映射,将维度为 [T, hidden_size] 的输入映射为 [T, 4 × hidden_size] 输入,然后再传给该OP。

    该OP的默认实现方式为 diagonal/peephole 连接,参见 。 如果需要禁用 peephole 连接方法,将 use_peepholes 设为 False 即可。

    该OP对于序列中每一个时间步的计算公式如下:

    dynamic_lstm - 图1

    dynamic_lstm - 图2

    dynamic_lstm - 图3

    公式中的概念信息如下:

    • 表示时间步

      dynamic_lstm - 图4

      的输入

    • 表示时间步

      dynamic_lstm - 图5

    • 分别表示前一个时间步的 hidden 和 cell 状态

    • dynamic_lstm - 图6

      表示候选的 cell 状态

    • dynamic_lstm - 图7

      分别为 input gate,forget gate,output gate

    • dynamic_lstm - 图8

      表示 weight (例如,

      是在计算 input gate

      dynamic_lstm - 图9

      时,对输入

      做线性变换的 weight)

    • σσ 表示 gate 的非线性激活函数,默认为 sigmoid

    • ⊙⊙ 表示矩阵的 Hadamard product,即对两个维度相同的矩阵,将相同位置的元素相乘,得到另一个维度相同的矩阵

    参数:

    • input ( Variable ) 维度为 [T,4∗hidden_size][T,4∗hidden_size] 的多维 LoDTensor(必须在传入该OP前对维度为 [T,hidden_size][T,hidden_size] 的输入经过线性变换得到),其中 T 为 batch 中所有样本的长度之和,hidden_size 为隐层大小,数据类型为 float32 或者 float64。

    • size (int) – 必须为 4*hidden_size。

    • h_0 ( ,可选) 维度为 [batch_size,hidden_size][batch_size,hidden_size] 的多维 Tensor,其中 hidden_size 为隐层大小,数据类型为 float32 或者 float64。如果为 None,该OP会自动设置为全0的向量。默认值为None。

    • c_0 ( Variable ,可选) 维度为 [batch_size,hidden_size][batch_size,hidden_size] 的多维 Tensor,其中 hidden_size 为隐层大小,数据类型为 float32 或者 float64。如果为 None,该OP会自动设置为全0的向量;h0,c0h0,c0 如果要设置为None,必须同时为None。默认值为None。

    • param_attr (ParamAttr,可选) – 指定权重参数属性的对象。如果为None,表示使用默认的权重参数属性。具体用法请参见 。如果用户需要设置此属性,维度必须等于 [hidden_size,4∗hidden_size][hidden_size,4∗hidden_size]。默认值为None。

    • use_peepholes (bool,可选) – 是否使用 peephole 连接。默认值为True。

    • is_reverse (bool,可选) – 是否将输入的数据根据根据样本长度进行逆序,同时会将输出进行逆序,用户拿到结果之后,不需要再逆序。默认值为False。

    • gate_activation (str,可选) – 应用于input gate,forget gate, output gate 的激活函数。默认值为sigmoid。

    • cell_activation (str,可选) – 用于cell输入的激活函数。默认值为tanh。

    • candidate_activation (str,可选) – 用于cell输出的激活函数。默认值为tanh。

    • dtype (str,可选) – 数据类型为 float32 或者 float64。默认值为 float32。

    • name (str,可选) – 具体用法请参见 Name ,默认值为None。

    返回:经过lstm运算输出的 hidden 和 cell 的状态的tuple,包括

    • hidden:LSTM hidden的输出结果,维度为 [T,hidden_size][T,hidden_size] 的LoDTensor,且LoD保持与输入一致,数据类型与input一致。

    返回类型: tuple( , Variable

    代码示例