lstm
- (input, init_h, init_c, max_len, hidden_size, num_layers, dropout_prob=0.0, is_bidirec=False, is_test=False, name=None, default_initializer=None, seed=-1)[源代码]
注解
该OP仅支持 GPU 设备运行
该OP实现了 LSTM,即 Long-Short Term Memory(长短期记忆)运算 - 。
该OP的实现不包括 diagonal/peephole 连接,参见 Gers, F. A., & Schmidhuber, J. (2000)。 如果需要使用 peephole 连接方法,请使用 。
该OP对于序列中每一个时间步的计算公式如下:
- 公式中的概念信息如下:
表示时间步 的输入
表示时间步 的 hidden 状态
分别表示前一个时间步的 hidden 和 cell 状态
- 表示候选的 cell 状态
, 和
分别为 input gate,forget gate,output gate
-
表示 bias (例如,
是 input gate 的 bias)
- 表示 gate 的非线性激活函数,默认为 sigmoid
表示矩阵的 Hadamard product,即对两个维度相同的矩阵,将相同位置的元素相乘,得到另一个维度相同的矩阵
- 参数:
- input ( Variable ) - LSTM的输入张量,维度为 的 3-D Tensor,其中 seq_len 为序列的长度, input_dim 为序列词嵌入的维度。数据类型为 float32 或者 float64。
- init_h ( ) – LSTM的初始 hidden 状态,维度为
的 3-D Tensor,其中 num_layers 是LSTM的总层数,hidden_size 是隐层维度。 如果is_bidirec = True, 维度应该为 。数据类型为 float32 或者 float64。
- init_c ( Variable ) - LSTM的初始 cell 状态。维度为
的 3-D Tensor,其中 num_layers 是LSTM的总层数,hidden_size 是隐层维度。 如果is_bidirec = True, 维度应该为 。数据类型为 float32 或者 float64。
- max_len (int) – LSTM的最大长度。输入张量的第一个 input_dim 不能大于 max_len。
- num_layers (int) – LSTM的总层数。例如,该参数设置为2,则会堆叠两个LSTM,其第一个LSTM的输出会作为第二个LSTM的输入。
- dropout_prob (float,可选) – dropout比例,dropout 只在 rnn 层之间工作,而不是在时间步骤之间。dropout 不作用于最后的 rnn 层的 rnn 输出中。默认值为 0.0。
- is_bidirec (bool,可选) – 是否是双向的LSTM。默认值为 False。
- is_test (bool,可选) – 是否在测试阶段。默认值为 False。
- name (str,可选) - 具体用法请参见 ,一般无需设置,默认值为None。
- default_initializer (Initializer,可选) – 用于初始化权重的初始化器,如果为None,将进行默认初始化。默认值为 None。
- seed (int,可选) – LSTM中dropout的seed,如果是-1,dropout将使用随机seed。默认值为 1。
rnn_out:LSTM hidden的输出结果的Tensor,数据类型与input一致,维度为
。如果 设置为True,则维度为
last_h:LSTM最后一步的hidden状态的Tensor,数据类型与input一致,维度为
。如果 设置为True,则维度为
返回类型: tuple( Variable , , Variable )
代码示例: