LSTM參數和結構的本質理解——num_units參數/batch_size/cell計算


 

 

 

 

參考 ————

圖例講解

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計算和反向傳播

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM