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被调用时,它会在调用子层之前创建不同的变量范围。这样每层都有自己的变量。