參考 ————
圖例講解
https://blog.csdn.net/u014518506/article/details/80445283
理解:cell其實只有一個 ; sequence length其實就是這個cell更新多少次;LSTM的參數總數其實從全連接層的角度來看就可以
源碼分析
https://www.cnblogs.com/yuetz/p/6563377.html
concat = _linear([inputs, h], 4 * self._num_units, True, scope=scope) # i = input_gate, j = new_input, f = forget_gate, o = output_gate i, j, f, o = array_ops.split(value=concat, num_or_size_splits=4, axis=1) new_c = (c * sigmoid(f + self._forget_bias) + sigmoid(i) * self._activation(j)) new_h = self._activation(new_c) * sigmoid(o)
理解哪里是輸入門、輸出門、遺忘門
state_is_tuple=True的時候,state是元組形式,state=(c,h)。如果是False,那么state是一個由c和h拼接起來的張量,state=tf.concat(1,[c,h])。在運行時,則返回2值,一個是h,還有一個state。
**如何理解batch在lstm或者rnn里面的運算過程?不是只有一個cell嗎!
-- 其實就是batch最開始用於反向傳播過程中的原因,每一個batch進入的時候的一個cell會copy成batchsize個,這樣就有batchsize個一樣的cell,然后在下個timestep時刻,將batchsize個cell的梯度更新的情況統一起來(例如sum操作),作為新的cell的值,那么下一個timestep的初始cell值也都是一樣的
https://blog.csdn.net/jcsyl_mshot/article/details/80712110 詳細講了一個timestep中的loss計算和反向傳播