1. 程式人生 > >動態RNN和靜態RNN區別

動態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