動態RNN和靜態RNN區別


調用static_rnn實際上是生成了rnn按時間序列展開之后的圖。打開tensorboard你會看到sequence_length個rnn_cell stack在一起,只不過這些cell是share weight的。因此,sequence_length就和圖的拓撲結構綁定在了一起,因此也就限制了每個batch的sequence_length必須是一致。

調用dynamic_rnn不會將rnn展開,而是利用tf.while_loop這個api,通過Enter, Switch, Merge, LoopCondition, NextIteration等這些control flow的節點,生成一個可以執行循環的圖(這個圖應該還是靜態圖,因為圖的拓撲結構在執行時是不會變化的)。在tensorboard上,你只會看到一個rnn_cell, 外面被一群control flow節點包圍着。對於dynamic_rnn來說,sequence_length僅僅代表着循環的次數,而和圖本身的拓撲沒有關系,所以每個batch可以有不同sequence_length。

   

鏈接:https://www.zhihu.com/question/52200883/answer/251068217


免責聲明!

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



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