dynamic_lstm在paddle如何实现
收藏
根据paddlepaddle对dynamic_lstm的定义:https://github.com/PaddlePaddle/Paddle/blob/cb2ad89884382201f74ee9d078f6978645995aa2/python/paddle/fluid/layers/rnn.py#L1937,输入数据通过全连接层将输入维度调整成[T, 4*hidden_size],如果参数use_peepholes=True,那么lstm模块的权重参数维度为[hidden_size, 4*hidden_size],表示[Wch, Wih, Wfh, Woh];lstm模块的偏置参数维度为[1, 7*hidden_size],表示[bc, bi, bf, bo, Wic, Wfc, Woc]。这些参数是如何对输入进行计算的,感觉和API文档里的对应不上:https://www.paddlepaddle.org.cn/documentation/docs/zh/api_cn/layers_cn/dynamic_lstm_cn.html#dynamic-lstm
0
收藏
请登录后评论
目前我是这么认为的,输入特征经过全连接层后序列中的某一条特征可以看成[xc, xi, xf, xo],维度上是[1, 4*hidden_size],那么第一条特征经过lstm的处理如下(其中×表示叉乘,*表示点乘):
input = sigmoid(xi + Wih×h0 + Wic*c0 + bi)
forget = sigmoid(xf + Wfh×h0 + Wfc*c0 + bf)
output = sigmoid(xo + Woh×h0 + Woc*c0 + bo)
cell = tanh(xc + Wch×h0 + bc)
c1 = forget*c0 + input*cell
h1 = output*tanh(c1)
但我对dynamic_lstm中is_reverse=True的具体操作还不清楚,只是将序列倒序吗?还是在内部有其他倒序?
包含两次逆序:对输入序列的逆序,以及通过lstm模块后,对输出结果逆序