2

我試圖在張量流中創建具有GRU單元(以及LSTM單元)的多層遞歸神經網絡。我看了多個來源,包括官方教程。但是我一直看到下面的多層RNN模式(這裏用GRU單元顯示)。在張量流中創建多層遞歸神經網絡

cell = GRUCell(num_neurons) # Or LSTMCell(num_neurons) 
cell = DropoutWrapper(cell, output_keep_prob=dropout) 
cell = MultiRNNCell([cell] * num_layers) 

此代碼片段取自RNN Tensorflow Introduction。我對[cell] * num_layers的理解是,相同的對象cell在列表中被引用num_layer次。所以,MultiRNNCell不會創建一個深層網絡,其中每一層的權重都與之前的相同。如果有人能夠澄清這裏究竟發生了什麼,這將非常有見地。

+0

最初,是的。權重與GRU/LSTM單位的每層相同。但是隨着神經網絡的學習,這些權重應該被更新。這就是爲什麼當你創建堆疊的RNN(GRU/LSTM)時,你必須有'tf.nn.dynamic_rnn(cell,x,initial_state = Hin)'。據我所知,'Hin'將承載GRU/LSTM單元的狀態,這意味着它也具有每層的權重。 –

回答

2

我假設您已經很好地理解了TensorFlow的概念和執行模型。如果沒有,請查看tensorflow.org上的教程,特別是變量之一。

GRUCell的構造函數不會向Graph添加任何節點。只有當您調用實例(即cell())時,變量和操作纔會添加到圖中。當MultiRNNCell被調用時,它會在調用子層之前創建不同的變量範圍。這樣每層都有自己的變量。